mysqldump 是 MySQL 提供的一个用于备份数据库的命令行工具,它可以将数据库中的数据和结构导出为 SQL 脚本文件,方便进行数据库恢复、迁移或存档。
基本语法
mysqldump [选项] 数据库名 > 备份文件.sql
常用选项
选项 | 描述 |
---|---|
-u 用户名 | 指定连接数据库的用户名。 |
-p[密码] | 输入密码(可选)。如果直接跟在 -p 后不加空格,则会将密码明文显示在命令中(不推荐)。如果不加密码,系统会提示输入密码。 |
-h 主机名 | 指定数据库所在的主机地址(默认为本地主机 localhost)。 |
--databases | 备份多个指定数据库,后面跟数据库名(如 --databases db1 db2)。 |
--all-databases | 备份所有数据库。 |
--no-data | 只备份表结构,不备份数据。 |
--single-transaction | 对于支持事务的存储引擎(如 InnoDB),确保数据一致性备份。 |
--lock-tables | 在备份过程中锁定所有表,防止数据变动(适用于 MyISAM 引擎)。 |
--add-drop-table | 在每个 CREATE TABLE 前添加一条 DROP TABLE IF EXISTS 语句。 |
--routines | 导出存储过程和函数。 |
--events | 导出事件调度器中的任务。 |
--triggers | 导出触发器。 |
示例
1. 备份单个数据库
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql
运行后会提示输入密码。
2. 备份多个数据库
mysqldump -u 用户名 -p --databases 数据库1 数据库2 > 备份文件.sql
3. 备份所有数据库
mysqldump -u 用户名 -p --all-databases > 全部备份.sql
如果需要排除部分数据库
可以通过 --ignore-database 选项来实现。以下是具体用法和示例:
基本语法
mysqldump -u 用户名 -p --all-databases --ignore-database=数据库1 --ignore-database=数据库2 > 备份文件.sql
示例
1. 排除单个数据库
假设你需要备份所有数据库,但不想包含名为 test 的数据库:
mysqldump -u 用户名 -p --all-databases --ignore-database=test > 全部备份.sql
2. 排除多个数据库
假设你需要排除 test 和 performance_schema 两个数据库:
mysqldump -u 用户名 -p --all-databases --ignore-database=test --ignore-database=performance_schema > 全部备份.sql
3. 排除系统数据库
通常在备份时,我们可能不需要备份系统数据库(如 information_schema、performance_schema 和 mysql),可以这样写:
mysqldump -u 用户名 -p --all-databases \--ignore-database=information_schema \--ignore-database=performance_schema \--ignore-database=mysql > 全部备份.sql
注意事项
- 权限问题:确保执行 mysqldump 的用户有对目标数据库的访问权限。
- 数据库名称大小写敏感:MySQL 数据库名称在 Linux 系统上是大小写敏感的,请确保输入正确的名称。
- 排除的数据库仍会出现在输出中:即使使用了 --ignore-database,备份文件中可能会保留一些与被忽略数据库相关的元数据信息(如创建语句)。不过这些数据库的数据不会被导出。
4. 只备份表结构
mysqldump -u 用户名 -p --no-data 数据库名 > 表结构.sql
5. 使用事务一致性备份(适合 InnoDB)
mysqldump -u 用户名 -p --single-transaction 数据库名 > 备份文件.sql
6. 备份时压缩数据
mysqldump -u 用户名 -p 数据库名 | gzip > 备份文件.sql.gz