mysql增量恢复的一个实例操作

通过防火墙禁止web等应用向主库写数据或者锁表,让主库暂时停止更新,然后进行恢复

模拟整个场景

1、登录数据库

[root@promote 3306]# mysql -uroot -S /data/3306/mysql.sock

创建一个库,并创建一个表,里面适当的加入一些初始数据
insert into nima(id,name) values(4,'hahh');

2、将我本机的时间设置为早上0点 

[root@promote ~]# date -s '2017/7/27'
2017年 07月 27日 星期四 00:00:00 CST

3、完全备份

[root@promote 3306]# mysqldump -uroot -S /data/3306/mysql.sock -F -B --master-data=2 test >/opt/test.sql

[root@promote 3306]# ll
总用量 36
drwxr-xr-x. 5 mysql mysql 4096 7月  20 15:15 data
-rw-r--r--. 1 root  root  1897 7月  18 20:11 my.cnf
-rwx------. 1 root  root  1299 7月  18 20:29 mysql
-rw-rw----. 1 mysql mysql 1047 7月  27 00:02 mysql-bin.000002
-------------------------------------------------------------------------------备份点  //最好提前看一下从哪里开始备份的,就是查看新的bin-log
-rw-rw----. 1 mysql mysql  107 7月  27 00:02 mysql-bin.000003    --------------新内容
-rw-rw----. 1 mysql mysql   56 7月  27 00:02 mysql-bin.index
-rw-rw----. 1 mysql mysql    6 7月  20 15:15 mysqld.pid
-rw-r-----. 1 mysql root  4184 7月  20 15:15 mysql_oldboy3306.err
srwxrwxrwx. 1 mysql mysql    0 7月  20 15:15 mysql.sock

4、在创建的表中加入新的数据

没加入数据前
mysql> select * from nima;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 尼玛   |
| NULL | hahh   |
|    3 | hahh   |
|    4 | hahh   |
+------+--------+
4 rows in set (0.00 sec)



mysql> insert into nima(id,name) values(100,'hahh');
Query OK, 1 row affected (0.00 sec)

mysql> insert into nima(id,name) values(101,'hahh');

mysql> select * from nima;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 尼玛   |
| NULL | hahh   |
|    3 | hahh   |
|    4 | hahh   |
|  100 | hahh   |
|  101 | hahh   |
+------+--------+
6 rows in set (0.00 sec)

5、删除创建的数据库

mysql> drop database test;
Query OK, 1 row affected (0.07 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

6、此时就出现了问题,test库没有了,然后去查看bin-log  

[root@promote 3306]# mysqlbinlog mysql-bin.000003

# at 511
#170727  0:08:56 server id 1  end_log_pos 592 	Query	thread_id=3	exec_time=0	error_code=0
SET TIMESTAMP=1501085336/*!*/;
drop database test   <==发现了是此条语句的问题
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

7、此时刷新一下bin-log

 

[root@promote 3306]# mysqladmin -uroot -S /data/3306/mysql.sock flush-logs
[root@promote 3306]# ll
总用量 40
drwxr-xr-x. 4 mysql mysql 4096 7月  27 00:08 data
-rw-r--r--. 1 root  root  1897 7月  18 20:11 my.cnf
-rwx------. 1 root  root  1299 7月  18 20:29 mysql
-rw-rw----. 1 mysql mysql 1047 7月  27 00:02 mysql-bin.000002
-rw-rw----. 1 mysql mysql  635 7月  27 00:18 mysql-bin.000003
---------------------------------------------------------------------------需要恢复03的内容,然后04就是新内容
-rw-rw----. 1 mysql mysql  107 7月  27 00:18 mysql-bin.000004
-rw-rw----. 1 mysql mysql   84 7月  27 00:18 mysql-bin.index
-rw-rw----. 1 mysql mysql    6 7月  20 15:15 mysqld.pid
-rw-r-----. 1 mysql root  4184 7月  20 15:15 mysql_oldboy3306.err
srwxrwxrwx. 1 mysql mysql    0 7月  20 15:15 mysql.sock

8、开始恢复手续

  

[root@promote 3306]# cp mysql-bin.000003 /tmp
[root@promote 3306]# cd /tmp
[root@promote tmp]# ll
总用量 4
-rw-r-----. 1 root root 635 7月  27 00:20 mysql-bin.000003
drwx------. 2 root root  24 6月  22 13:45 ssh-sq615X9ctBqx
drwx------. 3 root root  16 6月  22 13:44 systemd-private-d13e6e6b8a2d4dc6a5a816c2cfd8a0be-colord.service-FFHLPi
drwx------. 3 root root  16 6月  22 13:44 systemd-private-d13e6e6b8a2d4dc6a5a816c2cfd8a0be-cups.service-jm0Csy
drwx------. 3 root root  16 6月  22 13:44 systemd-private-d13e6e6b8a2d4dc6a5a816c2cfd8a0be-rtkit-daemon.service-90fMAb
drwx------. 3 root root  16 6月  22 13:44 systemd-private-d13e6e6b8a2d4dc6a5a816c2cfd8a0be-vmtoolsd.service-HfIX2Y
[root@promote tmp]# mysqlbinlog -d test mysql-bin.000003 >bin.sql
[root@promote tmp]# vim bin.sql //删除有问题的语句

[root@promote tmp]# mysql -uroot -S /data/3306/mysql.sock < /opt/test.sql   //恢复全备
[root@promote tmp]# mysql -uroot -S /data/3306/mysql.sock test <bin.sql     //恢复增量

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from nima;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 尼玛   |
| NULL | hahh   |
|    3 | hahh   |
|    4 | hahh   |
|  100 | hahh   |
|  101 | hahh   |
+------+--------+
6 rows in set (0.00 sec)

mysql> 
恢复结束

  

 

原文地址:https://www.cnblogs.com/bill2014/p/7243832.html