mysqldump备份的时候先进行一次完整备份,mysqldump恢复日志的方法是完整备份+二进制日志。二进制恢复的时候是定义希望恢复的位置,或者定义想要恢复的那个状态的时间。

1、对MySQL先做个完整备份,备份放在/tmp下

[[email protected] data]# mysqldump --all-databases --lock-all-tables  --flush-logs --master-data=2 > /tmp/global.sql

参数说明:

--all-databases    指定所有的数据库   --lock-all-tables  表示锁定所有的表

--flush-logs      表示日志滚动一次

--master-data=2   将当前二进制日志的位置记录在备份文件中 “1”表示不注释掉 “2”表示注释掉

2、为了演示备份恢复的效果,模拟场景就是我在jiaowu当中的scores插入了一行,这个是我想要的结果,但是我插入完这行以后不小心把整个scores表删除了。
[[email protected] data]# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jiaowu             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
 
mysql> use jiaowu;
Database changed
mysql> show tables;
+------------------+
| Tables_in_jiaowu |
+------------------+
| courses          |
| scores           |
| students         |
| tutors           |
+------------------+
mysql> select * from scores;
+----+-----+-----+-------+
| ID | SID | CID | Score |
+----+-----+-----+-------+
|  1 |   2 |   2 |    67 |
|  2 |   2 |   3 |    71 |
|  3 |   1 |   2 |    90 |
|  4 |   1 |   7 |    45 |
|  5 |   3 |   6 |    32 |
|  6 |   3 |   1 |    99 |
|  7 |   4 |   8 |    95 |
|  8 |   4 |  10 |    36 |
+----+-----+-----+-------+
 
插入一行信息
mysql> insert into scores (ID,SID,CID,Score) values (11,11,11,11);
mysql> select * from scores;
+----+-----+-----+-------+
| ID | SID | CID | Score |
+----+-----+-----+-------+
|  1 |   2 |   2 |    67 |
|  2 |   2 |   3 |    71 |
|  3 |   1 |   2 |    90 |
|  4 |   1 |   7 |    45 |
|  5 |   3 |   6 |    32 |
|  6 |   3 |   1 |    99 |
|  7 |   4 |   8 |    95 |
|  8 |   4 |  10 |    36 |
| 11 |  11 |  11 |    11 |
 
不小心删除了scores整张表
mysql> DROP tables scores;
Query OK, 0 rows affected (0.01 sec)
 
mysql> show tables;
+------------------+
| Tables_in_jiaowu |
+------------------+
| courses          |
| students         |
| tutors           |
+------------------+
 
mysql> \q
 
 
3、查看此时的二进制日志文件,我们想要恢复到删除scores表之前,插入那条语句之后的状态。如下图所示可以看到在327或300之前,177之后是我们想要的状态,而在437的时候DROP这个语句已经执行完毕了。
[[email protected] data]# mysqlbinlog mysql-bin.000004
 
mysqlbinlog是一个专门用于查看二进制日志文件的命令

MySQL备份与恢复————用mysqldump恢复

这里选择对177—300这段日志做备份放置在/tmp目录下命名为004.sql,用于做二进制日志回复
[[email protected] data]# mysqlbinlog --start-position=177 --stop-position=300 /mysql/data/mysql-bin.000004 > /tmp/004.sql 
 
参数说明:--start-position 用于定义从哪个位置开始恢复
          --stop-position  用于定义恢复至哪个位置
 
4、在用备份恢复之前,我们暂时要关闭二进制日志记录,因为我们不需要记录我们备份恢复的过程.
 
mysql> show global variables like '%log%';
mysql> set global sql_log_bin=off;
mysql> set sql_log_bin=off;
 
         sql_log_bin 这个参数on就表示记录二进制日志off即是不记录二进制日志
 
5、备份恢复
1)先恢复完整的日志
[[email protected] data]# mysql < /tmp/global.sql 
[[email protected] data]# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jiaowu             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
   查看恢复的结果,可以看到scores表已经恢复了,并且表中的没有我们插入的那行数据,这说明我们的完成备份恢复是成功的。
 
mysql> use jiaowu;
Database changed
mysql> show tables;
+------------------+
| Tables_in_jiaowu |
+------------------+
| courses          |
| scores           |
| students         |
| tutors           |
+------------------+
mysql> select * from scores;
+----+-----+-----+-------+
| ID | SID | CID | Score |
+----+-----+-----+-------+
|  1 |   2 |   2 |    67 |
|  2 |   2 |   3 |    71 |
|  3 |   1 |   2 |    90 |
|  4 |   1 |   7 |    45 |
|  5 |   3 |   6 |    32 |
|  6 |   3 |   1 |    99 |
|  7 |   4 |   8 |    95 |
|  8 |   4 |  10 |    36 |
+----+-----+-----+-------+
2)恢复二进制日志,将那段二进制日志导入到我们的数据库。
 
[[email protected] data]# mysql < /tmp/004.sql 
 
   查看scores表中我们之前插入的那条数据恢复了
 
[[email protected] data]# mysql
mysql> use jiaowu;
Database changed
mysql> select * from scores;
+----+-----+-----+-------+
| ID | SID | CID | Score |
+----+-----+-----+-------+
|  1 |   2 |   2 |    67 |
|  2 |   2 |   3 |    71 |
|  3 |   1 |   2 |    90 |
|  4 |   1 |   7 |    45 |
|  5 |   3 |   6 |    32 |
|  6 |   3 |   1 |    99 |
|  7 |   4 |   8 |    95 |
|  8 |   4 |  10 |    36 |
| 11 |  11 |  11 |    11 |
+----+-----+-----+-------+
mysql> \q
 
补充说明:二进制日志文件也可以通过定义时间点,定义恢复至什么状态。
mysqlbinlog --start-datetime='2012-11-30  20:54:39' --stop-datetime='2012-11-30 20:55:41 ' /mysql/data/mysql-bin.000004 > /tmp/004.sql
--start-datetime 定义从哪一时刻开始恢复
--start-datetime 定义恢复至哪一时刻