一:大体介绍
MySQL通过在全备份基础上保证完整的二进制日志文件来达到增量备份的目的。
Ø 备份
1 开启二进制日志
2 全备(可以利用mysqldump)
Ø 恢复
1 利用全备进行恢复
2 利用全备以来的所有二进制日志进行完全恢复
二:具体实验步骤
已经开启二进制日志的,可以忽略步骤2.1,2.2。
2.1:开启二进制日志
---- mysql默认没有启二进制日志。
vi my.cnf
在[mysqld]下添加: log-bin=mysql-bin
--linux版本是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf,/usr/my.cnf
--winows下的是my.ini,一般会在安装目录的根目录
2.2:重启mysql服务
[root@target_pc mysql]# service mysql restart
Shutting down MySQL.. [ OK ]
Starting MySQL. [ OK ]
--然后可以在mysql data目录下看到“mysql-bin.数字编号”的文件,如mysql-bin.000001
2.3:准备测试数据
现有测试数据如下:
mysql> use dba;
Database changed
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2.4:对当前数据库dba做个全备
mysqldump -u root -pbeijing dba > /backup/mysql/dba_201511160534.bak
2.5 flush logs
生成一个新的二进制日志,记录备份后的DML操作,方便后续恢复
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000007 | 3398 |
+------------------+-----------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.09 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000007 | 3445 |
| mysql-bin.000008 | 120 |
+------------------+-----------+
2 rows in set (0.00 sec)
2.6:模拟在全备后,进行新的DML操作
mysql> insert into t1(id) values(3);
Query OK, 1 row affected (0.00 sec)
2.7:用全备恢复
恢复前,先flush logs,将利用全备恢复的信息记录到新的日志中。假如不进行该步骤,利用全备恢复的信息(删除t1表,并重建,插入id为1,2两条记录)会记录到当前的二进制日志(mysql-bin.000008)中,在后续恢复二进制日志mysql-bin.000008时,会执行全备恢复的步骤,相当于没有恢复该二进制日志。
mysql> flush logs;
Query OK, 0 rows affected (0.09 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000007 | 3445 |
| mysql-bin.000008 | 375 |
| mysql-bin.000009 | 120 |
+------------------+-----------+
3 rows in set (0.00 sec)
[root@pc mysql]# mysql -u root -pbeijing dba < /backup/mysql/dba_201511160534.bak
Warning: Using a password on the command line interface can be insecure.
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
2.8:利用二进制日志恢复
恢复全备后的所有二进制日志(除了最后一个记录备份恢复信息的二进制日志)
[root@pc mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000008 | mysql -u root -pbeijing
Warning: Using a password on the command line interface can be insecure.
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.01 sec)
---------------------------------华丽的分割线-------------------------------------
-----------下面的与本实验测试数据无关,但也是一种恢复案例------------------
---- 假如要恢复之前误删的表-------------------------------------------
DROP TABLE `iqe_ftpkpi`这个命令的end_log_pos为161349913。
于是恢复全量备份后运行以下命令:
mysqlbinlog --stop-position="161349912" “E:\MySQL Server5.5\data\log-bin.000022” \mysql -u root -pgoogle
mysqlbinlog --start-position="161349914" “E:\MySQL Server5.5\data\log-bin.000022” \mysql -u root -pgoogle
第一个命令将恢复到位置161349912为止的所有事务,
第二个命令将恢复从位置161349914直到二进制日志结束的所有事务,
由此可以跳过删除表操作恢复到当前时间的数据库。
--本文参考http://wenku.baidu.com/view/665ec743a417866fb84a8eaf.html