MYSQL增量备份恢复以及日志修复方法

binlog恢复操作:
1、使用binlog直接还原

# --no-defaults参数可以解决字符集报错
mysqlbinlog --no-defaults mysql-bin.000001 | mysql -uroot -p  #日志备份全部恢复
# 使用--database参数,从binlog日志中恢复单个库(两种写法)
mysqlbinlog --database=test mysql-bin.000001 |mysql -uroot -p123
mysqlbinlog --no-defaults mysql-bin.000001 | mysql -uroot -p test 

有时会因为误删文件而恢复删除前状态,但是日志存储文件还是位于mysql-bin.000001,如果执行一次上面的命令,你会发现你的数据并没有恢复。WHY? 因为其实你已经恢复了,但是你又把它删除了。解决办法是定时使用flush logs存储文件

mysqlbinlog的时间和位置界定参数:

  • --start-datetime:恢复的开始时间
  • --stop-datetime:恢复的结束时间
  • --start-position:恢复开始的位置
  • --stop-position:恢复结束的位置

使用以上的参数,我们可以恢复到删除前一秒:

mysqlbinlog --no-defaults --start-datetime='2016-01-04 15:11:00' --stop-datetime='2016-01-04 15:11:00' mysql-bin.000001 | mysql -uroot -p123

或者执行我们删除之前的代码:

mysqlbinlog --no-defaults --start-position=249 --stop-position=249 mysql-bin.000001 | mysql -uroot -p123

不常用选项:

  • -u --user=name日志恢复到的服务器账号
  • -p --password[=name]日志恢复到的服务器密码
  • -h --host=name日志恢复到的服务器IP,本机不用填写
  • --read-from-remote-server从某个MySQL服务器上读取binlog日志

2、通过binlog文本文件source还原
上面我们已经通过~/test1.sql导出了日志文件,使用mysqlbinlog将binlog日志导出成文本文件,使用source执行该文件:

source ~/test1.sql;

常见错误解决办法:
1、binlog恢复数据会出现重复创建数据么?
答案是不会,在恢复过程中如果出现重复创建数据记录,将会出现Duplicate entry '2' for key 'PRIMARY'这样的错误并且结束程序执行。

2、如何在报错的情况下继续执行数据
有时候我们不记得开始和结束时间,希望直接执行而不是遇到错误停止:

  • --force-read, -f
#使用此选项,如果mysqlbinlog读取它无法识别的二进制日志事件,它将输出警告,忽略该事件,然后继续。如果没有此选项,mysqlbinlog会在读取此类事件时停止。
mysqlbinlog --no-defaults --start-datetime='2018-12-26 14:31:00' --stop-datetime='2018-12-26 14:38:00' mysql-bin.000001 | mysql -uroot -p123 -f

你可能感兴趣的:(MYSQL增量备份恢复以及日志修复方法)