show variables like 'log_bin';
+--------------- +------- +
| Variable_name | Value |
+--------------- +------- +
| log_bin | OFF |
+--------------- +------- +
1 row in set (0.00 sec)
a. 在 xx.cnf 中配置
log_error=mysql_error.log
binlog_format = MIXED // binlog日志格式, mysql默认采用 statement,建议使用 mixed
log-bin = /data/mysql/mysql-bin.log // binlog日志文件
expire_logs_days = 7 // binlog过期清理时间
max_binlog_size = 100m // binlog每个日志文件大小
binlog_cache_size = 4m // binlog缓存大小
max_binlog_cache_size = 512m // 最大 binlog缓存大小
b. 命令
set global log_bin=mysql_bin
请注意,每次重启 MySQL服务也会生成一个新的二进制日志文件,相当于二进制日志切换。
切换二进制日志时,你会看到这些 number会不断递增。
另外,除了这些二进制日志文件外,你会看到还生成了一个 mysql_bin_log.index的文件,
这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。
show binary logs;
purge binary logs to 'mysql_bin_log.000002';
purge binary logs before '2017-03-10 10:10 :00 ';
purge master logs before date_sub( now( ) , interval 7 day);
a. 使用 show binlog events 方式可以获取当前以及指定 binlog 的日志,不适宜提取大量日志
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
b. 命令查看 需要参数解码: --base64-output=decode-rows
./bin/mysqlbinlog ./mysql-bin.000003
./bin/mysqlbinlog --no-defaults ./mysql-bin.000003 > a.sql
flush logs;
--skip-gtids=true
mysqlbinlog ./mysql-bin.xxx -d database_name > a.sql
cat a.sql | grep -v "#" | tr "\r\n" " " | tr ";" "\n" | grep -iE "create" | sed "s/\/\*\!\*\//;/g" > t.sql
--start-position=875 起始 pos 点
--stop-position=954 结束 pos 点
--start-datetime= "2016-9-25 22:01:08" 起始时间点
--stop-datetime= "2019-9-25 22:09:46" 结束时间点
--database=zyyshop 指定只恢复 zyyshop 数据库 (一台主机上往往有多个数据库,只限本地 log日志 )
--base64-output=decode-rows 如果 binlog 为 row ,需要参数解码: --base64-output=decode-rows -v
1. 从指定一个日志恢复
mysqlbinlog ./mysql-bin.000003 --skip-gtids=true | mysql -uroot -p -P3307
2. 指定节点恢复
mysqlbinlog ./mysql-bin.000004 --start-position=251 --stop-position=381 --skip-gtids=true | mysql -uroot -p -P3307
+ ------------------ + ----- + ---------------- + ----------- + ------------- + -------------------------------------------------------------------- +
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+ ------------------ + ----- + ---------------- + ----------- + ------------- + -------------------------------------------------------------------- +
| mysql-bin.000004 | 4 | Format_desc | 2 | 123 | Server ver: 5.7.18-log, Binlog ver: 4 |
| mysql-bin.000004 | 190 | Gtid | 2 | 251 | SET @@SESSION.GTID_NEXT= 'fb3f6789-4209-11e8-b23e-525400b13db7 :19 ' |
| mysql-bin.000004 | 251 | Query | 2 | 381 | CREATE DATABASE `test` /*!40100 COLLATE 'utf8_general_ci' */ |
| mysql-bin.000004 | 381 | Gtid | 2 | 442 | SET @@SESSION.GTID_NEXT= 'fb3f6789-4209-11e8-b23e-525400b13db7 :20 ' |
+ ------------------ + ----- + ---------------- + ----------- + ------------- + -------------------------------------------------------------------- +
mysqlbinlog -uroot -p111111 -h192.168.5.120 -P3307 --read-from-remote-server mysql-bin.000001
##### 从远程备份到本地
mysqlbinlog --read-from-remote-server --raw --host=192.168.5.120 --port=3307 --user=root --password=xxxxx --stop-never mysql-bin.000001