MySQL备份一般采取全备份加日志备份的方式,比如每天执行一次全备份,每小时执行一次二进制日志备份。这样在MySQL Server故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意位置或时间。用来进行全备和日志备的工具各种各样,各有其特色,在这里不做描述。本文主要讲解一下在回复完全备份后,如何应用备份的二进制日志来将数据恢复到指定的位置或时间点。
这里有个十分重要的工具——mysqlbinlog,专门用来查看二进制日志。我们以一些列子来说明问题:
先看看如何在MySQL Server中直接查看有哪些二进制日志文件及文件中包含哪些事件。
首先,查看正在使用的binlog日志
mysql> show master status;
mysql> show binlog events in "mysql-bin.000002";
这条命令查看记录在binlog日志中执行的sql命令。
例如:先创建一个数据库,在库中建一个表,表中添加数据。
mysql> create database user_test;
Query OK, 1 row affected (0.00 sec)
mysql> use user_test;
Database changed
mysql> create table test(id char(3),name varchar(20),age varchar(3));
Query OK, 0 rows affected (0.36 sec)
mysql> insert into test values(1,'wangdi',27);
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | wangdi | 27 |
+------+--------+------+
1 row in set (0.00 sec)
这时删除数据库:
mysql> drop database user_test;
Query OK, 1 row affected (0.08 sec)
数据库删除之后,想要恢复查看binlog中的信息
mysql> show binlog events in "mysql-bin.000002";
找到文件中的sql语句,执行即可。
也可以应用mysqlbinlog工具
[root@master data]# /usr/local/mysql/bin/mysqlbinlog --start-position=4797 --stop-position=5425 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p
4797 是我创建数据库的节点,执行完命令后恢复数据库,但是这里只是恢复一个库,里面的表数据没有
[root@master data]# /usr/local/mysql/bin/mysqlbinlog --start-position=4954 --stop-position=5425 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p
4954 是我创建表的节点,执行完命令后恢复表结构,但是表里的数据没有
[root@master data]# /usr/local/mysql/bin/mysqlbinlog --start-position=5224 --stop-position=5425 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p
5224 是插入数据的语句,这样被删除的数据库就恢复了。
重新查看一下:
mysql> select * from test;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | wangdi | 27 |
+------+--------+------+