1.1 、开启 binlog
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
(2)保存更改后的配置文件,并重新启动MySQL服务,使更改生效。
(3)确认binlog已经成功开启,可以使用以下命令登录MySQL并执行:
SHOW MASTER STATUS;
如果输出类似如下信息,则表示binlog已经成功开启:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | test | |
+------------------+----------+--------------+------------
或者以下命令:可以看到log_bin的状态是ON
show variables like 'log_bin%';
mysql> show variables like 'log_bin%';
+---------------------------------+--------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+--------------------------------+
5 rows in set (0.00 sec)
#这个参数用来启用binlog,并指定了binlog的文件名前缀。在这个例子中,binlog文件会以 dx_logbin 开头命名。binlog文件记录了数据库的所有更改操作,包括增删改等。
log-bin=adx_logbin
#这个参数指定了单个binlog文件的最大大小,单位是字节。当binlog文件大小达到这个值时,MySQL会自动创建一个新的binlog文件来继续记录日志。
max_binlog_size=104857600
#这个参数指定了binlog文件的过期时间,单位是天。超过指定天数的binlog文件会被自动删除。这个设置有助于控制磁盘空间的使用。
expire_logs_days=7
#这个参数用来指定需要记录binlog的数据库名称。在这个例子中,adx_db 是需要记录binlog的数据库,
#binlog-do-db=adx_db
#这个参数用来指定不需要记录binlog的数据库名称。在这个例子中,javaboy_no_db 是不需要记录binlog的数据库,但是由于前面有#注释了,所以实际上是被注释掉了,不会生效。
#binlog-ignore-db=javaboy_no_db
#这个参数用来控制binlog的写入方式。当设置为0时,表示不强制立即将binlog日志写入磁盘。这样会提高性能,但在数据库宕机时可能会丢失一部分数据。
sync_binlog=0
#这个参数指定了MySQL服务器的唯一标识符。在复制和多主模式下,每个服务器都需要有一个唯一的ID来标识自己。
server-id=1
docker restart mysql

log_bin_basename: /var/lib/mysql/adx_logbin
这个配置指定了二进制日志文件的基本名字为adx_logbin,不包括文件扩展名。实际的二进制日志文件会以这个基本名字开头,后面紧跟一个数字标识,再加上文件扩展名(通常是.log)。例如,可能生成的二进制日志文件包括adx_logbin.000001、adx_logbin.000002等。
这个设置意味着生成的二进制日志文件将以adx_logbin作为基本名字。
log_bin_index: /var/lib/mysql/adx_logbin.index
这个配置指定了二进制日志索引文件的名字为二进制日志索引文件记录了所有的二进制日志文件名字及其对应的位置信息,通常以.index作为文件扩展名。通过这个索引文件,MySQL可以快速地定位到各个二进制日志文件,并进行相应的操作,比如数据库恢复、复制等。

show master logs;

用于查看当前主服务器的二进制日志(binlog)信息。执行这个命令可以获取以下信息,File:当前正在写入的二进制日志文件名,Position:在当前二进制日志文件中的位置,即已经写入的字节数。
show master status;

flush logs

reset master
执行 RESET MASTER; 可以确保清除所有的旧的日志文件,防止日志文件过多占用磁盘空间,并从头开始记录新的二进制日志事件。

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
该命令用于显示指定二进制日志文件中的二进制日志事件。这个命令可以提供对二进制日志中存储的操作和更改的详细信息。
下面是各参数的含义:
IN 'log_name': 可选参数,指定要查看的特定二进制日志文件名。
FROM pos: 可选参数,指定从日志文件中的特定位置开始显示日志事件。
LIMIT [offset,] row_count: 可选参数,限制要显示的日志事件的数量,并可以设置偏移量。
show binlog events in 'adx_logbin.000001';

mysqldump -uroot -p --flush-logs --lock-tables -B student2>/root/student2.bak.sql
mysqldump: 这是用于备份数据库的命令。
-uroot: 表示使用 root 用户身份连接到数据库进行备份。
-p: 是一个选项,表示在输入密码之前会提示用户输入密码。
--flush-logs: 这个选项表示在备份完成后将刷新日志文件,确保备份过程中的日志都被记录下来。
--lock-tables: 这个选项表示在备份时对数据库表进行锁定,以确保备份的一致性。
-B student2: 表示备份名为 student2 的数据库。
> /root/student2.sql: 这部分表示将备份内容导出到 /root 目录下的 student2.sql 文件中。

可以通过cat命令查看导出的sql,老铁没毛病。



show binlog events in 'adx_logbin.000002';

可以看到,在 1403-1507 这个 Pos 中发生了删库跑路事件,那么我们只需要回放该文件将数据恢复到 1403 这个位置即可。
由于 adx_logbin.000002 文件是在当前凌晨1:00备份之后产生的新文件,因此这个文件从起始到 1403 这个 Pos 之间的操作,就是凌晨1:00到删库之前的操作了。
那么我们来看下通过 binlog 来恢复数据的命令:(没有这个student2库的话先手动建立一个)
mysqlbinlog /var/lib/mysql/adx_logbin.000002 --stop-position=1403 --database=student2 | mysql -uroot -p
mysqlbinlog: 是用于解析 MySQL 二进制日志文件的工具。通过这个命令,你可以查看和分析二进制日志中的内容。
/var/lib/mysql/adx_logbin.000002: 这是指定的二进制日志文件路径,即要解析的二进制日志文件。
--stop-position=1403: 这个选项指定了解析二进制日志文件时要停止的位置。在这种情况下,命令会解析从文件开头到指定位置(1403)之间的内容。
--database=student2: 这个选项指定了只解析属于数据库 'student2' 的相关操作。这意味着命令只会处理涉及 'student2' 数据库的内容。
|: 这是管道符号,用于将 mysqlbinlog 命令的输出传递给后面的 mysql 命令。
mysql -uroot -p: 这是执行实际恢复操作的部分。它使用 mysql 命令以 root 用户身份连接到 MySQL 数据库,并执行从 mysqlbinlog 命令得到的结果。
mysqlbinlog: 是用于解析 MySQL 二进制日志文件的工具。通过这个命令,你可以查看和分析二进制日志中的内容。
/var/lib/mysql/adx_logbin.000002: 这是指定的二进制日志文件路径,即要解析的二进制日志文件。
--stop-position=1403: 这个选项指定了解析二进制日志文件时要停止的位置。在这种情况下,命令会解析从文件开头到指定位置(1403)之间的内容。
--database=student2: 这个选项指定了只解析属于数据库 'student2' 的相关操作。这意味着命令只会处理涉及 'student2' 数据库的内容。
|: 这是管道符号,用于将 mysqlbinlog 命令的输出传递给后面的 mysql 命令。
mysql -uroot -p: 这是执行实际恢复操作的部分。它使用 mysql 命令以 root 用户身份连接到 MySQL 数据库,并执行从 mysqlbinlog 命令得到的结果。


---THE END---

文章转载自程序员恰恰,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




