MySQL 备份必学:mysqldump 命令超全详解(单库 / 多库 / 热备一网打尽) 一、命令简介mysqldump 是 MySQL 数据库官方提供的逻辑备份工具。它能够将一个或多个 MySQL 数据库的结构和数据以标准的 SQL 语句形式导出到一个文本文件中。这个文件可以用于数据备份、迁移、在不同 MySQL 服务器之间复制数据库或者作为版本控制的数据库结构快照。 其核心原理是通过连接 MySQL 服务器执行查询来读取数据库元数据和表数据然后生成相应的 CREATE 和 INSERT 等 SQL 语句。二、语法格式plaintextmysqldump [options] [db_name [tbl_name ...]]参数说明 [options] 用于控制备份行为的各种选项例如指定用户名、密码、备份模式等。这是最常用的部分。 [db_name] 指定要备份的数据库名称。 [tbl_name ...] 可选。在指定了 db_name 后可以进一步指定要备份的该数据库中的特定表。不指定则备份整个数据库。更通用的调用形式是结合选项来指定数据库plaintextmysqldump [options] --databases db_name1 [db_name2 ...] mysqldump [options] --all-databases三、常用选项及说明mysqldump 选项繁多以下分类列出最常用和关键的选项。连接选项表格选项简写说明--useruser_name-u用于连接 MySQL 服务器的用户名。--password[password]-p连接 MySQL 服务器的密码。安全建议在命令行中使用 -p 而不直接跟密码执行后会提示输入可避免密码泄露。--hosthost_name-hMySQL 服务器主机名或 IP 地址。默认为 localhost。--portport_num-PMySQL 服务器监听的 TCP/IP 端口号。默认为 3306。输出内容控制选项表格选项说明--all-databases备份 MySQL 实例中的所有数据库。--databases db1 db2备份一个或多个指定的数据库。--tables覆盖 --databases 选项使其后的参数被解释为表名。需与数据库名配合使用。--no-data-d 只导出数据库表结构CREATE 语句不导出数据。--no-create-info-t 只导出数据INSERT 语句不导出表结构CREATE 语句。--no-create-db-n 在 --databases 或 --all-databases 模式下抑制 CREATE DATABASE 语句。--skip-triggers不导出触发器。--routines-R 导出存储过程和函数。--events-E 导出事件调度器事件。--compact产生更简洁的输出省略一些注释和选项适用于调试或需要最小化输出时。--skip-comments在导出结果中不添加注释。数据导出与一致性选项表格选项说明--single-transaction重要在导出数据之前启动一个事务需要表支持事务如 InnoDB。这可以确保在导出过程中得到一个一致性的数据快照而无需锁定表。是进行在线热备的常用方式。--lock-tables-l 为每个被导出的数据库锁定其所有表。在 --single-transaction 禁用时默认启用。对于 MyISAM 表或需要跨数据库一致性时可能有用。--skip-lock-tables不锁定表。警告这可能导致导出的数据不一致例如在导出过程中有数据写入。仅在可以接受不一致性或确定无写入时使用。--lock-all-tables-x 一次性锁定所有数据库的所有表保证整个导出期间全局一致性。会导致所有表只读。--add-locks在输出的每个表数据周围添加 LOCK TABLES 和 UNLOCK TABLES 语句。这可以在导入时加快速度。--master-data[value]用于主从复制。将二进制日志文件名和位置CHANGE MASTER TO 语句写入输出。value 为 1 时以注释形式写入为 2 时以可执行语句形式写入。启用此选项会自动启用 --lock-all-tables除非同时使用 --single-transaction。--flush-logs-F 在开始导出前刷新 MySQL 服务器的日志文件。与 --master-data 或 --all-databases 结合使用便于做全量备份后的增量恢复。输出格式选项表格选项说明--complete-insert-c 使用完整的 INSERT 语句包含列名。这使导出文件更具可读性且在表结构发生变化后可能更易于导入。--extended-insert-e 使用多值列表语法INSERT INTO ... VALUES (...), (...), ...。这是默认行为可以显著减少导出文件大小并加快导入速度。使用 --skip-extended-insert 来禁用。--add-drop-database在每个 CREATE DATABASE 语句前添加 DROP DATABASE 语句。--add-drop-table在每个 CREATE TABLE 语句前添加 DROP TABLE 语句。默认启用。使用 --skip-add-drop-table 来禁用。--hex-blob使用十六进制格式导出二进制字段如 BLOB, BINARY, VARBINARY, BIT。避免因特殊字符导致数据损坏。--result-filefile_name-r 将输出直接定向到指定文件。在 Windows 系统上此选项可以避免换行符被转换。通常用输出重定向 即可。四、示例用法备份单个数据库包含结构和数据到文件plaintextmysqldump -u root -p mydatabase mydatabase_backup.sql执行后会提示输入 root 密码只备份数据库结构不包含数据plaintextmysqldump -u root -p -d mydatabase mydatabase_schema.sql只备份数据库中的数据不包含结构plaintextmysqldump -u root -p -t mydatabase mydatabase_data.sql备份多个数据库plaintextmysqldump -u root -p --databases db1 db2 db3 multi_db_backup.sql备份所有数据库完整实例备份plaintextmysqldump -u root -p --all-databases all_databases_backup.sql使用事务保证一致性并记录二进制日志位置InnoDB 热备plaintextmysqldump -u root -p --single-transaction --master-data2 --databases mydatabase mydatabase_hotbackup.sql此命令适合 InnoDB 表在备份期间不锁表并记录备份时刻的 binlog 位置便于搭建主从或做基于时间点的恢复。五、注意事项备份策略mysqldump 是逻辑备份适合中小型数据库。对于超大型数据库TB 级备份和恢复时间可能很长需要考虑物理备份工具如 Percona XtraBackup或文件系统快照。密码安全避免在命令行或 shell 脚本中直接使用 -pYourPassword这会暴露密码。推荐使用 -p 交互式输入或在配置文件中指定如/.my.cnf并设置严格的文件权限。字符集一致性如果源数据库使用了非默认字符集建议在备份时使用 --default-character-setutf8mb4根据实际情况调整选项确保导出的 SQL 文件字符集正确避免乱码。大表处理默认的 --extended-insert 选项会生成包含大量数据的单条 INSERT 语句。在导入时如果这条语句出错可能导致整个导入失败。对于特别大的表可以考虑使用 --skip-extended-insert 选项但会显著增大备份文件。恢复测试定期测试备份文件的恢复流程至关重要以确保备份是真正有效且可用的。切勿等到灾难发生时才第一次尝试恢复备份。

本月热点