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文件的结尾处;

相关推荐