mysql备份恢复(一)

 

 

 

 

 

mysqldump备份所有库

mysqldump -uroot -p -A -R --single-transaction >dump.sql

 

mysqldump备份指定库

mysqldump -uroot -p -B zhh -R --single-transaction >zhh.sql

 

恢复数据库

mysql -uroot  -p    < zhh.sql

或者

mysql> source /root/zhh.sql

mysqldump 不支持增量备份,若要实现增量备份 需要开启binlog。binlog会记录 所有对数据库更改的操作。

mysql开启binglog

vim /etc/my.cnf

server-id = 1
log-bin = mysql-bin
binlog_format = ROW

 

 

完整备份

mysqldump -uroot -p -R --single-transaction --flush-logs --master-data=2  -B  zhh > zhh.sql

-R   导出存储过程和自定义函数--routines

--single-transaction  保证导出的一致性

--flush-logs     关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1

--master-data   将当前服务器的binlog的位置和文件名追加到输出文件 相当于执行 show master status,状态(file,position)的值。

                         等于1 输出change master 命令   等于2  输出change master命令 并在前面加注释

vim zhh.sql

......

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;

......

...

 

模拟备份完后新 更改一些数据

打开一张表查看现有数据

 

 

 

删除一条数据

 

 

新增一些数据

 

 

 

现在模拟数据库出现故障

 

 

mysqldump 做了完整备份 zhh.sql。但备份之后更新的数据需要通过binlog 做增量恢复

1  恢复完整备份

 

 

[root@zhh73 mysql]# mysql -uroot -p < zhh.sql 
Enter password: 

 

 

查看rt_airport_device表

 

 没有新增的数据

 

2 通过 binlog 恢复数据

查看binlog的内容

binlog 会对存储的内容进行base64编码的处理  ,通过base64解码  来查看binlog内容

[root@zhh73 mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000002 > b.sql

 

 binlog会存储具体的sql语句  传入的参数通过@ 进行存储

 

 

在binlog里 找到最后的删除库的语句位置,和最近的position位置

 

 

 

 

 

基于二进制日志恢复 可以通过时间点 和position位置 两种方式

 

1)通过position位置来恢复

离 drop database zhh 最近的两个position是1669 和1580 。我们需要的是drop database zhh 语句 之前的所有操作。 所以 positon点里如果包含了drop database zhh 相当于通过这个点还原的数据 已经删除了zhh库

所以查看这两个点的sql语句,不含drop语句的 才是我们需要还原的位置。

root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1669 >> bb.sql
[root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1580 >> cc.sql

 

[root@zhh73 mysql]# grep "drop database zhh" bb.sql cc.sql 
bb.sql:drop database zhh

 

bb.sql里含有drop语句  说明我们要还原的positon点是1580

还原数据

[root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1580 |mysql -uroot -p
Enter password: 

 

再查看rt_airport_device表 数据已增量恢复

 

 

2)通过时间点来恢复

[root@zhh73 mysql]# mysqlbinlog --stop-datetime='2021-10-21 19:19:59' /var/lib/mysql/mysql-bin.000002 |mysql -uroot -p
Enter password: 

 

 

查看binlog日志   show binary  logs;

 

 

查看binlog文件内容  show binlog events in 'mysql-bin-000002' \G

 

 

参考 https://www.cnblogs.com/chenmh/p/5300370.html

posted @ 2021-10-21 17:40  xihuxiangri  阅读(27)  评论(0编辑  收藏  举报