要求mysql版本大于5.6.6
MYSQL版本 | innodb_file_per_table | 难易程度(共5级) |
|---|---|---|
> 5.6.6 | true | 3 |
要备份部分表, 部分表中有个别表很大. 比如5000W行
备份大致分为两种: 物理备份和逻辑备份.
物理备份: 速度快, 但是不支持异构恢复
逻辑备份: 速度慢, 支持异构恢复, 方便备份部分表.
所以整体使用逻辑备份(mysqldump), 个别大表使用物理备份(导出表空间)
mysql备份部分表, 比较简单, 直接参考如下命令即可
mysqldump -h127.0.0.1 -P3308 -uroot -p123456 \
--set-gtid-purged=off \
--quick \
--single-transaction \
--master-data=2 db1 \
--tables t1 t2 > backup_db1_20230524.sql--set-gtid-purged 不含gtid信息
--quick 不缓存查询
--single-transaction 以事务模式备份数据
--master-data=2 含change master信息, 并注释掉(可选)
--tables 指定的表, 表之间用空格隔开
恢复也比较简单, 参考如下命令
mysql -h127.0.0.1 -uroot -P3308 -p123456 -D db1 < backup_db1_20230524.sql注意备份的时候指定了数据库的, 但是.sql文件里面没得use db信息, 所以导入的时候要指定数据库
本次使用官方的表空间导出导入.
分区表也是支持的. 本文只演示非分区表(不建议使用分区表....)
注意: 备份导出的时候目标表是只读的状态
mysql> flush table t1 for export; -- 窗口不要关, 不然锁(metadata lock)就释放了
shell> mkdir -p /backup/t20230524/
shell> cp -ra /data/mysql_3308/mysqldata/db1/t1.ibd /backup/t20230524/
shell> cp -ra /data/mysql_3308/mysqldata/db1/t1.cfg /backup/t20230524/ #flush for export产生的
mysql> unlock tables; -- 释放锁, 退出会话也会自动释放mysql> ALTER TABLE t1 DISCARD TABLESPACE; -- 移除表空间
shell> cp -ra /backup/t20230524/t1.ibd /data/mysql_3308/mysqldata/db1 #拷贝回去
shell> cp -ra /backup/t20230524/t1.cfg /data/mysql_3308/mysqldata/db1
shell> chown mysql:mysql /data/mysql_3308/mysqldata/db1/t1.* #记得修改权限
mysql> ALTER TABLE t1 IMPORT TABLESPACE; -- 导入表空间校验
checksum table t1; -- 对比下和备份的时候校验值是否一样. 可选.注: ddl发生变化之后, 会导入失败
mysql备份工具很多, 根据自己的需求搭配使用. 还可以备份下binlog. 都是为了需要的时候能恢复数据,
空间比较充足的还是建议全备. 当然也可以只备份部分重要的表(部分表可能会破坏事务的完整性).
定时任务参考
30 23 * * 6 /usr/bin/sh /path/backup_dbn.sh #每周六23:30备份原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。