1.查看是否开启策略 应该返回 ON
SHOW VARIABLES LIKE 'log_bin';
2.查看二进制文件地址及大小
SHOW VARIABLES LIKE 'log_bin_basename';
SHOW VARIABLES LIKE 'max_binlog_size';
3.查看所有二级制文件
SHOW BINARY LOGS;
4.注意文件夹命名如果有空格,需要引号
mysqlbinlog --start-datetime="2024-07-30 14:00:00" --stop-datetime="2024-08-09 16:00:59" "D:\MySQLData\MySQL\MySQL Server 8.0\data\DATA-MYSQL-bin.000004" > restore_part2.sql
得到sql文件(这个时间段插入的数据)
5.创建测试数据库(必须是一个单独的服务器,数据库命名要与正式库一致),将正式数据库的表结构复制出来,在测试环境创建,然后数据库命名为原名称procost,要一致。
导出数据库表结构(在正式库使用)
mysqldump -u root -p procost --no-data > no.sql
6.将4中得到的文件复制到测试服务器,并在文件所在的目录下使用cmd
7.进入mysql
输入mysql -u root -p
再source 绝对路径(不要直接在文件夹所在路径用cmd 然后mysql -u -p恢复,这种方式出错就立刻中断;一定进入数据库后用source)
如:source d:\restore_part2.sql
日志记录里的恢复一定要在测试数据库中,因为里面的数据库名表名都是写死的,即使在同一个数据库服务器中建立两个不同的数据库也不行,必须在测试库执行!否则即使使用D:\MySQL\MySQL Server 8.0\Data>mysql -u root -p test_db < restore_part2.sql 也会导致数据运行进了正式库!
切记,时间区间要选对,而且不同服务器时间会存在误差,如果时间选成了备份数据执行后的,那就会导致回到备份数据的状态,一定要选到刚出错之前的时间,也就是在日志中还没有删除时。