面向 DBA 与开发运维的“mysqldump 逻辑备份”实操手册
                           
天天向上
发布: 2025-07-06 11:36:48

原创
1000 人浏览过

下面是一份面向 DBA 与开发运维的“mysqldump 逻辑备份”实操手册,涵盖核心概念、常用/高级选项、压缩与自动化、恢复验证,以及生产环境最佳实践。所有命令均基于 MySQL 5.7/8.0 官方文档 和社区权威资料整理,可直接在 Linux/macOS(Bash)、Windows PowerShell 下使用。


一、逻辑备份 vs 物理备份

方式工具内容典型用途
逻辑备份mysqldumpmysqlpump生成 SQL 语句(DDL + DML)小中型库迁移、跨版本升级、表级导入导出
物理备份mysqlbackup (Enterprise)、xtrabackup (社区)拷贝数据文件 / InnoDB 页TB 级热备、Point‑in‑time 恢复、快速回滚

二、基础命令:全库导出

mysqldump -u root -p -h 127.0.0.1 \
  --databases mydb1 mydb2 \
  --single-transaction --master-data=2 \
  --routines --events --triggers \
  --default-character-set=utf8mb4 \
  --hex-blob \
  > alldb_$(date +%F).sql
  • --single-transaction:在线热备,避免锁表(仅适用 InnoDB)。
  • --master-data=2:在备份文件内写入 CHANGE MASTER TO,便于复制恢复。
  • --routines --events --triggers:连同存储过程、事件、触发器。
  • --hex-blob:二进制 / BLOB 列安全转储。
  • > xxx.sql:重定向输出;亦可 | gzip > xxx.sql.gz 立即压缩。

三、表级/条件备份示例

指定表

mysqldump -u backup -p --databases sales --tables orders order_items > sales_orders.sql

排除表(≥8.0.29)

mysqldump --databases sales \
  --ignore-table=sales.logs \
  --ignore-table=sales.temp_data \
  > sales_without_logs.sql

WHERE 过滤(仅支持单表导出)

mysqldump test orders --where="created_at >= '2025-01-01'" > orders_2025.sql

四、使用配置文件隐藏密码

~/.my.cnf 中存储凭据并限制 600 权限:

[client]
user=backup
password="S3cr3tP@ss"
host=127.0.0.1

执行时可省略 -u/-p,防止密码泄露到 ps 列表或 shell 历史。


五、压缩与分卷

mysqldump mydb | gzip | split -b 2G - mydb_$(date +%F).sql.gz.part-
  • split -b 2G:按 2 GB 分卷,适合跨平台复制。
  • 恢复:cat mydb_2025-07-06.sql.gz.part-* | gunzip | mysql mydb

六、恢复数据

mysql -u root -p < alldb_2025-07-06.sql     # 全量恢复
mysql --database=mydb < mydb_schema.sql     # 单库
mysql mydb < orders_2025.sql                # 表或行过滤文件

如果备份包含 DROP DATABASE / TABLE 语句,务必先在测试库验证再导入生产。


七、自动化调度 (Cron 示例)

/etc/cron.d/mysqldump-nightly

0 2 * * * backup /usr/bin/mysqldump --defaults-file=/home/backup/.my.cnf \
  --single-transaction --quick --databases prod | gzip > /backup/prod_$(date +\%F).sql.gz
  • --quick:行流式输出,降低内存占用。
  • 建议配合 离线复制到对象存储(S3、OSS)或异地服务器。

八、大库/高并发环境加固

技巧说明
--chunk-size=N把 InnoDB 表分块导出(mysqlpump 提供)。
只导出从库主库高并发场景避免影响。
禁用 binlogSET sql_log_bin=0; 内嵌到 dump,可减少恢复时 binlog 膨胀。
确认 GTID--set-gtid-purged=ON 方便 GTID 复制。

九、校验与演练

  1. 校验文件完整性
   sha256sum *.sql.gz > backup.sha
  1. 在隔离环境恢复并跑集成测试
  • Docker:docker run --name testdb -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -d mysql:8
  • 导入备份:docker exec -i testdb mysql < alldb.sql
  1. 定期灾难演练(至少季度一次)。

🔗 参考文档


更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *