环境信息
系统环境:Centos7.2
数据库:Mysql5.7
前置
开启 mysql binlog 日志功能 vim /etc/my.cnf
添加下面内容
[mysqld]
server_id=100
log-bin = /usr/local/mysql/binlog/mysql-bin.log
日志目录如下:
解决方案一
在binlog的目录中执行以下命令:
mysqlbinlog --no-defaults -d DB_name --start-datetime='2018-09-11 8:54:40'
--stop-datetime='2018-09-11 12:59:10' mysql-bin.000032 >temp20180911.sql
说明:将起始时间点为"2018-09-11 8:54:40",结束时间点为“2018-09-11 12:59:10”,这段时间内的"mysql-bin-000032"的binlog日志导出到临时脚本文件"temp20180911.sql"中,用于在mysql数据库里面使用source temp20180911.sql 进行恢复。
也可以按照起始位置和结束位置来恢复(binlog_files自行替换):
mysqlbinlog binlog_files | more
恢复示例:
mysqlbinlog --stop-position="102" --start-position="367" mysql-bin.000001 |
mysql -uroot -pxxx database_name
mysqlbinlog --start-datetime="2018-04-20 10:01:00"
--stop-datetime="2005-04-21 10:01:00" mysql-bin.000001 |
mysql -u root -pxxx database_name
参数说明:
--database ##与"-d"作用相同,用于指定数据
-d ##与“database”作用相同,用于指定数据库
--start-datetime ##起始时间点
--stop-datetime ##结束时间点
--start-position ##起始位置
--stop-position ##结束位置
然后进入mysql环境,执行脚本:
mysql -uadmin -p
source /usr/local/mysql/binlog/tmp20190910.sql
解决方案二
mysqlbinlog --no-defaults --start-datetime='2018-09-11 8:54:40'
--stop-datetime='2018-09-11 12:59:10' /root/mysql-bin.000032 | mysql -uroot -p
说明:将起始点与结束点之间的binlog日志,直接用于恢复(此种方法在非主从同步的机器上报错),建议采用方案一。
注意
reset 是重置日志的指令,要慎重使用。
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+