如何通过rsync同步实现MySQL数据库跨地域的灾备备份?
- 内容介绍
- 文章标签
- 相关推荐
本文共计964个文字,预计阅读时间需要4分钟。
直接使用 rsync 命令同步 MySQL 的 /var/lib/mysql 目录时,若出现失败,通常是 InnoDB 表空间处于活跃状态,文件内容不一致。恢复后,大约有 50% 的几率报错 Tablespace is missing for table... 或启动失败。只有 MySQL 完全停止时才可能成功,但生产环境无法接受停机。
正确做法是先生成逻辑备份文件:
-
mysqldump --single-transaction --routines --triggers --databases db1 db2 > /backup/full_$(date +\%Y\%m\%d).sql(适合中小库,--single-transaction保证一致性) - 大库(>50GB)建议用
mysqlpump(支持并行导出)或mydumper(需额外安装),避免单线程卡死 - 备份前加
FLUSH LOGS(可选),便于后续 binlog 恢复定位起点
rsync 同步备份文件时必须加 --delete 和 --checksum
只用 rsync -avz 同步会导致异地备份目录不断膨胀:旧的 .sql 文件不会被清理,磁盘迟早占满;且默认按修改时间+大小判断是否跳过,若因网络中断导致文件写半截、大小未变但内容损坏,rsync 就会跳过,灾备失效。
本文共计964个文字,预计阅读时间需要4分钟。
直接使用 rsync 命令同步 MySQL 的 /var/lib/mysql 目录时,若出现失败,通常是 InnoDB 表空间处于活跃状态,文件内容不一致。恢复后,大约有 50% 的几率报错 Tablespace is missing for table... 或启动失败。只有 MySQL 完全停止时才可能成功,但生产环境无法接受停机。
正确做法是先生成逻辑备份文件:
-
mysqldump --single-transaction --routines --triggers --databases db1 db2 > /backup/full_$(date +\%Y\%m\%d).sql(适合中小库,--single-transaction保证一致性) - 大库(>50GB)建议用
mysqlpump(支持并行导出)或mydumper(需额外安装),避免单线程卡死 - 备份前加
FLUSH LOGS(可选),便于后续 binlog 恢复定位起点
rsync 同步备份文件时必须加 --delete 和 --checksum
只用 rsync -avz 同步会导致异地备份目录不断膨胀:旧的 .sql 文件不会被清理,磁盘迟早占满;且默认按修改时间+大小判断是否跳过,若因网络中断导致文件写半截、大小未变但内容损坏,rsync 就会跳过,灾备失效。

