mysql binlog 以及数据回滚
2022-08-22103
1、binlog=statement格式
ues `test`;delete from t where a>=4 and u_time<='2021-11-15' limit 1
2、binlog=row格式
3、binlog=mixed格式
显示所有binlog
show binary logs;
读取最新的binlog数据
show binlog events;
读取指定binlog中的数据
show binlog events in 'DESKTOP-PRRNA5O-bin.000071'
(如果binlog为row模式则可以闪回利用存储的row数据可以实现恢复,statement则为备份模式,需要有备份即恢复点,利用存储的sql语句进行重新执行sql语句恢复数据)
利用mysqlbinlog获取回滚sql --no-defaults 可以去掉乱码
mysqlbinlog --no-defaults -uroot -p123456 -hlocalhost -P3306 --start-position="1227" --stop-position="1546" --read-from-remote-server --skip-gtids=true DESKTOP-PRRNA5O-bin.000073 > D:\test.sql
--skip-gtids=xxx的作用为:mysqldump
是否使用--skip-gtids=true 参数,要根据情况来定;
第一种情况:
如果我们是要恢复数据到源数据库或者和源数据库有相同 GTID 信息的实例,那么就要使用该参数。如果不带该参数的话,是无法恢复成功的。因为包含的 GTID 已经在源数据库执行过了,根据 GTID 特性,一个 GTID 信息在一个数据库只能执行一次,所以不会恢复成功。
# mysqlbinlog --skip-gtids=true mysql-bin.000012 |mysql -uroot -p
或者
# mysqlbinlog --skip-gtids=true mysql-bin.000012 > backup.sql
mysql -uroot -p < backup.sql
第二种情况:
如果是恢复到其他实例的数据库并且不包含源实例的 GTID 信息,那么可以不使用该参数,使用或者不使用都可以恢复成功
上一篇:Mysql优化 下一篇:Mysql数据库锁设计