数据安全重要性无需多言,本文讲解如何进行MySQL的备份与恢复
全量备份
逻辑备份
可以使用mysqldump
直接备份所有库或者某一个库或者某一个库中的某个表
备份所有库
1 | mysqldump -uroot -p --lock-all-tables --all-databases > all.sql |
备份某一个库(test
库)
1 | mysqldump -uroot -p --lock-all-tables --databases test > test.sql |
备份某一个库(test
)中某一张(hy_express
)表
1 | mysqldump -uroot -p --lock-all-tables test hy_express > test.press.sql |
--lock-all-tables
保证在导出过程中整个mysql实例加全局读锁,操作线上数据库谨慎添加该参数
增量备份
增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件
增量备份是使用bin-log日志进行备份的,所以需要开启bin-log日志
开启bin-log
1 | [mysqld] |
log_bin
日志路径,注意此路径必须mysql
用户拥有读写权限server-id
服务唯一标识,可以随机填写,但不要重复max_binlog_size
单文件大小,超过此设置,生成新的文件。同时当MySQL数据库重启时,也会生成新的日志文件,文件序号递增binlog_format
设置记录模式。
binlog的一些常用操作
1 | show master logs; #查看数据库所有日志文件 |
1 | show binlog events in 'mysql-bin.000015'; #查看某个binlog文件信息 |
1 | flush logs; #将缓存中的日志写磁盘,保存到当前binlog文件中,并产生一个新的binlog文件 |
1 | flush logs; reset master; #删除所有binlog,并重新开始记录 |
实例
准备全量数据
1 | create database t1; |
全量数据备份
备份前,数据库加读锁,防止数据在备份时写入
1
flush tables with read lock;
将binlog刷盘,写入当前binlog(mysql-bin.000001),再生成一个新的binlog
1
flush logs;
全量备份
1
[root] mysqldump -uroot -p --lock-all-tables --databases t1 > t1.sql
解除读锁
1
unlock tables;
至此,全量备份结束。将全量数据文件t1.sql
保存即可。数据库再有新的数据更新,会记录在mysql-bin.000002
文件中
准备增量数据
1 | create database t2; |
将第一份增量数据进行备份
备份前,数据库加读锁,防止数据在备份时写入
1
flush tables with read lock;
将binlog刷盘,写入当前binlog(mysql-bin.000002),再生成一个新的binlog
1
flush logs;
将增备文件(mysql-bin.000002)直接复制保存即可
解除读锁
1
unlock tables;
准备第二份增量数据
1 | use t2; |
将第二份增量数据备份
步骤同上一步,生成mysql-bin.000003
文件,复制保存
模拟故障
删除t1
和t2
库
1 | drop database t1; |
数据恢复
还原全量备份数据
1 | mysql -uroot -p < t1.sql; |
此时,查看数据,恢复成功
还原增量备份数据
1 | mysqlbinlog mysql-bin.000002 | mysql -uroot -p |
查看结果,恢复成功
还原第二份增量
方法同上,查看数据
至此数据全部还原成功!
mysqlbinlog按照时间点和位置点恢复
按位置点恢复
1 | mysqlbinlog --start-position=500 --stop-position=716 mysql-bin.000002 | mysql -uroot -p |
按时间点恢复
1 | mysqlbinlog --start-datetime='2022-07-29 15:45:59' --stop-datetime='2022-07-29 15:46:24' mysql-bin.000002 | mysql -uroot -p |
生产中建议定期使用全量备份,然后搭配增量备份的方式来保证数据的安全性。附上全量备份脚本,在进行全量备份后对binlog进行刷盘,这样方便搭配恢复。
1 | !/bin/bash |