由于该写入操作出现在我们完整备份之后,所以我们的完整备份中没有这个数据库和其中的数据,所以此时我们只能借助于二进制日志文件了。我们上次完整备份时的二进制日志文件是mysql-bin.000005,在我们做了完整备份恢复之后,重启了sql服务,
于是生成了mysql-bin.000006二进制日志文件。
查看二进制日志文件
[root@www data]# ls /mydata/binlogs/
mysql-bin.000001 mysql-bin.000003 mysql-bin.000005 mysql-bin.index
mysql-bin.000002 mysql-bin.000004 mysql-bin.000006
查看我们完整备份之前保存的二进制日志mysql-bin.000005的信息
[root@www data]# cat /backups/binlog.pos
FilePositionBinlog_Do_DBBinlog_Ignore_DB
mysql-bin.000005365
查看二进制日志文件mysql-bin.000005的具体内容
# mysqlbinlog --start-position=365 /mydata/binlogs/mysql-bin.000005
# at 365
#140412 22:55:48 server id 1 end_log_pos 403GTID 0-1-2176
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
/*!100001 SET @@session.server_id=1*//*!*/;
/*!100001 SET @@session.gtid_seq_no=2176*//*!*/;
......省略一些不甚重要的信息
# at 4857
#140412 22:55:51 server id 1 end_log_pos 4895GTID 0-1-2200
/*!100001 SET @@session.gtid_seq_no=2200*//*!*/;
# at 4895
#140412 22:55:51 server id 1 end_log_pos 5009Querythread_id=4exec_time=0error_code=0
SET TIMESTAMP=1397314551/*!*/;
DROP TABLE IF EXISTS `t5` /* generated by server */
/*!*/;
# at 5009
#140412 22:55:51 server id 1 end_log_pos 5047GTID 0-1-2201
/*!100001 SET @@session.gtid_seq_no=2201*//*!*/;
# at 5047
#140412 22:55:51 server id 1 end_log_pos 5245Querythread_id=4exec_time=0error_code=0
SET TIMESTAMP=1397314551/*!*/;
CREATE TABLE `t5` (
`ID` int(10) unsigned NOT NULL DEFAULT '0',
`Name` char(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!*/;
# at 5245
#140412 22:55:51 server id 1 end_log_pos 5283GTID 0-1-2202
借助二进制日志文件实现增量备份的恢复
现在我们需要将这些二进制日志信息导入到mysql服务器
法1:
# mysqlbinlog --start-position=365 /mydata/binlogs/mysql-bin.000005 >/tmp/incr.sql
# mysql </tmp/incr.sql 或 mysql> source /tmp/incr.sql
法2:
# mysqlbinlog --start-position=365 /mydata/binlogs/mysql-bin.000005 | mysql
在数据库查看mydb数据库是否已经恢复了
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| hellodb |
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.01 sec)
我们可以看到mydb数据库已成功恢复。
注:当数据库灾难恢复之后,我们要做的第一件事就是对当前数据库做一次完整备份,以备不时之需,有备无患
mylvbackup: perl脚本,快速基于lvm备份mysql