一. 概述
在上篇讲到了逻辑备份,使用mysqldump工具来备份一个库,并使用完全恢复还原了数据库。在结尾也讲到了误操作是不能用完全恢复的。解决办法是:我们需要恢复到误操作之前的状态,然后跳过误操作语句。再恢复后面执行的语句,完成我们的恢复,这种恢复叫“不完全恢复”。在mysql 中,不完全恢复分为基于时间点的恢复和基于位置的恢复。
1.1 基于时间点恢复步骤
下面来模拟基于时间点恢复,操作步骤如下:
(1)先逻辑备份一个库。
(2)模拟用户操作一些数据。
(3)误操作发生,记住时间点。
(4)还原备份库。
(5)使用mysqlbinlog --stop-datetime恢复到误操作前的时间点。
(6)跳过误操作时间点,使用mysqlbinlog --start-datetime继续执行后面的binlog,完成恢复。
1.2 基于时间点恢复演示
下面以test库的testbackup表为例,该表有6条数据,如下图所示:
-- 共6条数据SELECT * FROM testbackup

-- 当前log文件序号是:mysql-bin.000040 SHOW MASTER STATUS
步骤1:备份test库,先定位到/usr/local/mysql/data目录下,备份完成后此时的log文件序号mysql-bin.000041,备份脚本下图所示:
[root@hsr data]# pwd/usr/local/mysql/data [root@hsr data]# mysqldump -uroot -p --single-transaction -F test > test.dmp Enter password: [root@hsr data]# ls -l test.dmp -rw-r--r-- 1 root root 321260 9月 26 09:49 test.dmp
步骤2: 进行正常用户操作,新增了二条数据,此时表中共8条数据。
INSERT INTO testbackup VALUES(7,'田七') INSERT INTO testbackup VALUES(8,'小康')
步骤3:误操作发生,删除了一条数据id为3的,此时表中共7条数据,误删除时间点是10:01分钟
DELETE FROM testbackup WHERE id=3
步骤4:还原数据库后,此时testbackup表只有最初的6条数据
[root@hsr data]# mysql -uroot -p test < test.dmp Enter password:步骤:5和6
-- 切换到binlog日志目录下 [root@hsr mysql]#

