为了防止删库跑路或者mysql主机存储坏掉的问题,我们一般需要对数据进行备份,备份普遍采用:
全量备份+增量备份的方式。
全量备份
备份此时间点内中数据库的所有数据,可以采用逻辑备份或物理备份两种方式。
逻辑备份:
备份数据库的逻辑内容,每个表的内容都采用insert语句的方式进行备份。
采用下面命令备份:
mysqldump -A --single-transaction > backup.sql
-A 标识备份所有数据库;--single-transaction表示进行一致性备份,一定要加防止备份数据不一致失去意义。
还有些常用命令:
#备份所有数据库,密码直接写在命令行里面不建议
mysqldump -uroot -proot --all-databases >/tmp/all.sql
#备份指定数据库库,
mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql
# 不生成创建语句
--no-create-info
# 只导出表结构不导出数据
--no-data
#将 192.168.80.137的test数据库导入到192.168.80.133 的test库中,后者要存在
mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test
恢复
mysql -uroot -proot < backup.sql
另外命令:
mysqlpump -A --single-transaction --default-parallelism=4 > backup.sql
以四个线程方式备份(在MySQL 5.7.11此版本后安全),且可以看备份的进度,mysqlpump 命令类似mysqldump,mysqlpump的并行是表级别的,如果是很大的表,也只能单线程备份,建议采用:mydumper ,一个开源工具:地址:https://github.com/maxbube/mydumper
好处:支持一致性备份;支持记录级别的多线程备份,可以指定单表多线程恢复。
# -r 100000 表示每100000 条方式备份记录
#--trx-consistency-only 一致性,-t 8 开8个线程
mydumper -o /bak -r 100000 --trx-consistency-only -t 8
物理备份
物理备份直接备份数据库的物理表空间文件和重做日志,物理备份的备份速度和恢复速度都快。
物理备份只能恢复整个实例的数据,而不能按指定表进行恢复。MySQL 8.0 的物理备份工具可以选择官方的 Clone Plugin,需要单独安装此插件:
[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT
命令如下:
mysql> CLONE LOCAL DATA DIRECTORY = '/path/to/clone_dir';
还可以进行远程物理备份:
CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];
8.0以前版本,物理备份工具建议:https://github.com/percona/percona-xtrabackup。
增量备份
增量备份就是对日志文件进行备份,在 MySQL 数据库中就是二进制日志文件。日志里面保存了所有的mysql的变更记录,可以通过全量+增量恢复任意时间点的数据。
如果有删除误操作,可以跳过这些二进制日志,再重放剩下的二进制日志。
实时增量备份命令:
mysqlbinlog --read-from-remote-server --host=host_name --raw --stop-never binlog.000001
--read-from-remote-server从远处服务器上拉取日志,--raw 表示采用二进制方式进行拉取;
--stop-never 表示永远不要停止,一直拉取;binlog.000001表示从这个文件开始拉取。
增量恢复命令:
mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
备份策略
- 每周进行一次全量备份;
- 双副本,两台机器上存储,定期检查。
网友评论