Mysql资料 Binlog(下)

2021-06-11 14:19:10 浏览数 (1)

三.查看binlog日志

使用mysqlbinlog自带查看命令法

注意: –>binlog是二进制文件,普通文件查看器cat、more、vim等都无法打开,必须使用自带的mysqlbinlog命令查看 –>binlog日志与数据库文件在同目录中 –>在MySQL5.5以下版本使用mysqlbinlog命令时如果报错,就加上 “–no-defaults”选项

查看 mysqlbinlog mysql-bin.000002

解释 server id 1 : 数据库主机的服务号; end_log_pos 796: sql结束时的pos节点 thread_id=11: 线程号

mysql加载方式查询

注意: 无

查看 show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

查看命令参数

  1. IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
  2. FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
  3. LIMIT [offset,] :偏移量(不指定就是0)
  4. row_count :查询总条数(不指定就是所有行)

查看的例子 show binlog events in 'mysql-bin.000002'G;

其余例子 a)查询第一个(最早)的binlog日志: show binlog eventsG;

b)指定查询 mysql-bin.000002这个文件: show binlog events in 'mysql-bin.000002'G;

c)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起: show binlog events in 'mysql-bin.000002' from 624G;

d)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,查询10条(即10条语句) show binlog events in 'mysql-bin.000002' from 624 limit 10G;

e)指定查询 mysql-bin.000002这个文件,从pos点:624开始查起,偏移2行(即中间跳过2个),查询10条 show binlog events in 'mysql-bin.000002' from 624 limit 2,10G;

四.恢复数据

说明: 恢复的时候要配合全备份,先进行全备份,在用mysqldump全备时添加-F刷新binlog,这时候mysqldump备份的是最新的binlog日志之前的内容了。

先进行全备份恢复,再将最新的binlog文件用mysqlbinlog进行查看,grep或者其他方式过滤,找到有问题的sql语句,记录下当时的pos点或者时间。只恢复出问题之前得时间点即可。

操作: 先恢复全部的 mysql -uroot -p'123456' < 2018-10-15-alldb.sql

再筛选有问题的sql部分,下面用grep方式找到了drop语句所在位置

再找到这条语句之前的上一条语句的pos点和时间点来恢复。可以看到104条是删除,那就恢复到103条的。当前看到的是日志区间。

以下命令进行恢复,stop-position是指定恢复截止的pos点。 实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径 mysqlbinlog --stop-position=5519 mysql-bin.000015 | mysql -uroot -p'123456'

其余例子 a)如果只是某个数据库有问题,可以只恢复单个数据库而不是所有: `mysqlbinlog mysql-bin.000015 –database=数据库A | mysql -uroot -p’123456 数据库A’

五.命令参数

  1. 常用参数选项解释:
  2. --start-position=875 起始pos点
  3. --stop-position=954 结束pos点
  4. --start-datetime="2016-9-25 22:01:08" 起始时间点
  5. --stop-datetime="2019-9-25 22:09:46" 结束时间点
  6. --database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)

0 人点赞