5️⃣
|
| 值 | 含义 |
|---|---|
| AUTO | 默认值,如果源库开启了GTID,则可能写入GTID信息 |
| ON | 强制写入 GTID 信息 |
| OFF | 不写入 GTID 信息(最安全) |
👉 跨环境恢复(例如从生产库导出的数据恢复到测试库),一律使用 OFF,避免因GTID冲突导致数据无法恢复。
--no-data # 只导出表结构
--no-create-info # 只导出数据,不包含 CREATE TABLE 语句
--ignore-table=db_name.big_table
👉 必须写 完整库名.表名。
--routines --events --triggers
⚠️ 默认情况下:
--extended-insert(默认开启)--extended-insert
将多行数据合并到一条 INSERT 语句中。
INSERT INTO t VALUES (...),(...),(...);
✅ 优点:显著减小生成的 SQL 文件体积,加快恢复速度。
❌ 缺点:如果其中一行数据有问题,可能导致整条 INSERT 语句失败。
--skip-comments--skip-comments
diff 等工具进行比较。--compress(远程导出时使用)--compress
--default-character-set--default-character-set=utf8mb4
强烈建议在导出时明确指定与数据库一致的字符集,utf8mb4 是目前最通用的选择。
--add-drop-table--add-drop-table
恢复前会自动在 CREATE TABLE 语句前添加:
DROP TABLE IF EXISTS ...
⚠️ 生产环境慎用,避免在恢复时误删除现有表。
--databases vs --all-databases--databases db1 db2
--all-databases
主要区别:
使用这两个参数导出的文件会包含 CREATE DATABASE 和 USE database 语句,方便直接恢复到同名库。而直接指定库名 mysqldump db_name 则不会包含这些语句。
这是一个兼顾了一致性、安全性和完整性的通用命令模板,非常适合 MySQL数据备份 场景。
mysqldump \
-u backup -p \
--single-transaction \
--quick \
--lock-tables=false \
--master-data=2 \
--set-gtid-purged=OFF \
--routines --events --triggers \
--default-character-set=utf8mb4 \
db_name > db_name.sql
mysqldump \
--databases db1 db2 \
--single-transaction \
--set-gtid-purged=OFF \
> multi_db.sql
mysqldump db_name table_name > table.sql
--single-transaction👉 导致导出期间数据状态不一致,无法获得一个逻辑时间点上的完整快照。
👉 即使使用了 --single-transaction,其中的 MyISAM 表依然会被锁,影响线上业务。
👉 在主从复制环境中,如果源库有 GTID 而导出时未使用 --set-gtid-purged=OFF,可能导致备份文件无法在另一个开启了 GTID 的实例上恢复。
👉 一定要进行恢复验证! 定期将备份文件在测试环境进行恢复演练,是保证备份有效性的关键 运维实践。
本文由云栈社区整理发布,旨在提供清晰实用的技术指南。