mysqldump 是 MySQL 自带的逻辑备份工具,用于导出数据库结构和数据,生成 .sql 文件,适用于数据迁移、备份恢复等场景。它支持全库备份、单库备份、单表备份,并可以结合 gzip 压缩以减少存储空间。
1. mysqldump 基本语法
mysqldump [选项] 数据库名 [表名] > 备份文件.sql
常用选项
| 选项 | 说明 |
|---|---|
-u | 指定 MySQL 用户名(如 -uroot) |
-p | 提示输入密码(-p密码 直接输入密码,不安全) |
-h | 指定 MySQL 服务器地址(默认 localhost) |
-P | 指定 MySQL 端口(默认 3306) |
--databases | 备份多个数据库 |
--all-databases | 备份所有数据库 |
--no-data | 只备份表结构,不备份数据 |
--no-create-info | 只备份数据,不备份表结构 |
--single-transaction | 使用事务保证数据一致性(InnoDB) |
--lock-tables | 锁定表(MyISAM 适用) |
--where | 按条件备份数据(如 --where="id>100") |
--skip-add-drop-table | 不生成 DROP TABLE 语句 |
--skip-comments | 不生成注释 |
--result-file | 指定输出文件(避免 Windows 换行符问题) |
2. 备份示例
(1)备份单个数据库
mysqldump -u root -p 数据库名 > backup.sql
示例:
mysqldump -u root -p mydb > mydb_backup.sql
(执行后会提示输入密码)
(2)备份多个数据库
mysqldump -u root -p --databases db1 db2 > multi_db_backup.sql
(3)备份所有数据库
mysqldump -u root -p --all-databases > all_db_backup.sql
(4)备份单个表
mysqldump -u root -p 数据库名 表名 > table_backup.sql
示例:
mysqldump -u root -p mydb users > users_backup.sql
(5)只备份表结构(不含数据)
mysqldump -u root -p --no-data mydb > schema_only.sql
(6)只备份数据(不含表结构)
mysqldump -u root -p --no-create-info mydb > data_only.sql
(7)按条件备份数据
mysqldump -u root -p mydb users --where="age > 18" > adults.sql
(8)压缩备份(减少存储空间)
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz
恢复压缩备份:
gunzip < mydb_backup.sql.gz | mysql -u root -p mydb
(9)远程备份
mysqldump -h 192.168.1.100 -P 3306 -u root -p mydb > remote_backup.sql
(10)增量备份(结合 binlog)
- 先全量备份:
mysqldump -u root -p --flush-logs --master-data=2 mydb > full_backup.sql - 后续用 binlog 恢复增量数据:
mysqlbinlog mysql-bin.000123 | mysql -u root -p
3. 恢复数据库
(1)恢复整个数据库
mysql -u root -p mydb < mydb_backup.sql
(2)恢复单个表
mysql -u root -p mydb < users_backup.sql
(3)恢复所有数据库
mysql -u root -p < all_db_backup.sql
4. 高级用法
(1)排除某些表
mysqldump -u root -p mydb --ignore-table=mydb.logs --ignore-table=mydb.tmp > partial_backup.sql
(2)生成 CSV 格式备份
mysqldump -u root -p --tab=/tmp --fields-terminated-by=, --fields-enclosed-by='"' mydb
(每张表生成 .sql 和 .txt 文件)
(3)定时备份(cron 任务)
0 3 * * * /usr/bin/mysqldump -u root -p密码 mydb | gzip > /backup/mydb_$(date +\%Y\%m\%d).sql.gz
(4)备份时忽略错误
mysqldump -u root -p --force mydb > backup.sql
5. 注意事项
--single-transaction适用于 InnoDB,保证备份一致性。--lock-tables适用于 MyISAM,但会锁表影响写入。- 大数据库备份 可能耗时较长,建议在低峰期进行。
- 密码安全 避免直接在命令行输入
-p密码,建议交互式输入。 - 恢复前检查 确保备份文件完整,避免数据损坏。
6. 总结
mysqldump是 MySQL 逻辑备份工具,生成.sql文件。- 常用备份方式:
- 全库备份
--all-databases - 单库备份
mysqldump dbname - 单表备份
mysqldump dbname tablename
- 全库备份
- 恢复方式:
mysql -u root -p dbname < backup.sql
- 高级技巧:
- 压缩备份
gzip - 条件备份
--where - 远程备份
-h IP
- 压缩备份
掌握 mysqldump 可以轻松实现 MySQL 数据备份与恢复!🚀