mysql binlog恢复错误_mysql通过binlog日志来恢复数据

简介

在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通过我们的备份文件来恢复,也只能恢复到 2016-11-19 09:30:00 这个时间点,而9.30分到10:30分这一个小时的数据恢复不了,这时候我们可以通过mysql的binlog日志来恢复没有备份到的这一小时的数据。

1、开启mysql的binlog日志(默认情况下没有开启)

#vim /etc/my.cnf下添加一行(也可以另外指定binlog日志的路径)

log-bin = mysql-bin

#mysql5.7默认情况下,binlog日志文件默认放在/usr/local/mysql/data/目录下

2、对binlog日志的相关操作命令

2.1用mysqlbinlog可以查看binlog日志里的信息

./mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000003

2.2刷新binlog日志

mysql> flush logs; #这样就会多出一个最新的binlog日志

2.2查看最新的 binlog日志

mysql> show master status;

2.3清空所有的binlog日志

mysql> reset master;

3、根据位置恢复

#mysqlbinlog --start-position=134 --stop-position=330 mysql-binglog.000001 > /root/test1.txt

进入MYSQL导入

mysql> source /root/test1.txt

--start-position  起始位置

--stop-position  结束位置

4、根据日期

#./mysqlbinlog --start-date="2016-11-10 17:30:05"

--stop-date="2016-11-10 18:00:00"

mysql-binlog.000002  >

/root/test2.sql

mysql> source /root/test2.sql

--start-date 起始时间

--stop-date 结束时间

或者

#./mysqlbinlog --start-date="2016-11-10 17:30:05"

--stop-date="2016-11-10 18:00:00" mysql-binlog.000002 | ./mysql -uroot -padmin test

将mysql-bin.000002日志文件中从2016-11-10 17:30:05到2016-11-10 18:00:00截止的sql语句导入到mysql中test

----如果有多个binlog文件,中间用空格隔开,打上完全路径

5、补充mysqldump备份

[root@jacky tmp]# /usr/local/mysql/bin/mysqldump -uroot -padmin test -l -F > /tmp/test.sql   #备份 数据库test到tmpl目录下的test.sql文件中

-l 表示读锁,在备份的过程中mysql不能写入数据,从而保证数据的完整性

-f 表示 flust logs,重新生成新的日志文件,当然也包括bin-log日志

./mysql -uroot -padmin test  -v -f < /tmp/test.sql   #通过/tmp/test.sql文件恢复test数据库

-v 查看导入的详细信息

-f 导入过程中遇到错误,跳过,并继续往下执行

你可能感兴趣的:(mysql,binlog恢复错误)