10、mysql增量恢复实战
10.1、实验数据:
mysql> select * from test;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lc | 20 |
| 2 | lbd | 21 |
+----+------+------+
5 rows in set (0.00 sec)
10.2、备份库:
mysqldump -uroot -p123456 --single-transaction -F --master-data=1 -R -B lc >/tmp/lc_bak.sql
10.3、对库中的数据进行修改:
mysql> update lc.test set name=‘lc2‘ where id=2;
mysql> select * from test;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lc | 20 |
| 2 | lc2 | 21 |
+----+------+------+
10.4、误操作导致库丢失:
drop database lc;
10.5、恢复数据库:
1、停库操作(推荐),如果不锁库会导致数据一致性有问题;
1)关闭网络的方法:
[mysqld]
skip-networking
#开启该选项可以彻底关闭 MySQL 的 TCP/IP 连接方式;
2)重启mysql;
/data/3306/mysql restart
2、mysqladmin -uroot -p123456 flush-log #刷新binlog日志;
mysql -uroot -p123456 lc </tmp/lc_bak.sql
mysql> select * from test;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lc | 20 |
| 2 | lbd | 21 |
+----+------+------+
10.6、增量恢复:
1、查看lc_bak.sql内容找到binlog的备份时的pos点:
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000002‘, MASTER_LOG_POS=107;
2、导出lc库的数据:
只导出lc对应的库的binlog日志,使用-d参数,防止还原时还原所有的库,数据重复而报错,导致恢复无法进行;
mysqlbinlog -d lc /application/mysql/data/mysql-bin.000002 >/tmp/lc_add.sql
3、恢复:
mysql -uroot -p123456 lc </tmp/lc_add.sql
4、数据查看:
mysql> select * from test;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | lc | 20 |
| 2 | lc2 | 21 |
+----+------+------+
10.7、知识点补充:
指定恢复的库和恢复的位置生成sql文件:
[ data]# mysqlbinlog /application/mysql/data/mysql-bin.000014 -d lc --start-position=107 --stop-position=351 -r /tmp/lc_bin.log
#--start-position=107 --stop-position=351 :按照位置点取sql语句:
#--start-datetime=‘2019-2-26 13:25:28‘ --stop-datetime=‘2019-2-26 19:55:32‘ :按照时间点取出sql语句,是一个时间范围,比较模糊,可能一秒钟有多条的修改的语句;
#使用该方法可以跳过故障点,按要求进行恢复数据库;
#如果不给开始和结尾,开始点是binlog文件的开头,结尾点是binlog文件的结尾;
#如果只给了开头不给结尾,则结尾点是binlog文件的结尾处;