mysql如何只备份指定数据库_mysql单库备份技巧

MySQL单库备份最常用可靠方式是mysqldump,推荐命令:mysqldump -u root -p --single-transaction --routines --triggers --set-gtid-purged=OFF --default-character-set=utf8mb4 myapp > myapp_$(date +%F).sql,需检查权限、磁盘空间并验证备份有效性。

MySQL 单库备份最常用、最可靠的方式是使用 mysqldump 命令,配合数据库名直接导出。只要权限正确、服务正常,一条命令就能完成干净的逻辑备份。

只备份指定数据库(基础命令)

执行以下命令即可仅备份某个数据库(例如 myapp):

mysqldump -u root -p myapp > myapp_backup.sql

系统会提示输入密码,成功后生成纯 SQL 文件,包含建库、建表、插入数据等完整语句。注意:不要在命令中写 USE myapp; 或额外加 --databases 参数——后者会多包一层 CREATE DATABASEUSE,对单库备份反而冗余。

推荐加上的实用参数

为提升兼容性与恢复可靠性,建议加上这几个关键选项:

  • --single-transaction:对 InnoDB 表做一致性快照,避免锁表(备份时业务可继续读写)
  • --routines:一并导出存储过程和函数
  • --triggers:导出触发器
  • --set-gtid-purged=OFF:若用 GTID 且不打算跨实例恢复,关掉该选项可避免导入报错
  • --default-character-set=utf8mb4:显式指定字符集,防止中文乱码

组合示例:
mysqldump -u root -p --single-transaction --routines --triggers --set-gtid-purged=OFF --default-character-set=utf8mb4 myapp > myapp_$(date +%F).sql

备份前检查与避坑提醒

执行前快速确认几件事,能省去后续很多麻烦:

  • 确保用户有该数据库的 SELECT 权限,以及 LOCK TABLES(除非用了 --single-transaction
  • 磁盘空间是否足够?mysqldump 输出的是文本,通常比实际数据文件大 1.2–1.5 倍
  • 避免在从库上用 --master-data,除非你明确需要记录主库 binlog 位置
  • 不要用 mysqlhotcopy 或直接拷贝 .frm/.ibd 文件来“单库备份”——它不是原子操作,极易损坏,也不支持 InnoDB 通用表空间

快速验证备份有效性

备份不是目的,能恢复才是关键。简单验证方法:

  • head -20 myapp_backup.sql 看开头是否有 CREATE DATABASEUSE myapp(有则说明是单库格式)
  • grep -c "INSERT INTO" myapp_backup.sql 确认数据行存在
  • 挑一个测试库,执行 mysql -u root -p -e "CREATE DATABASE myapp_test;",再导入:mysql -u root -p myapp_test ,观察是否报错

不复杂但容易忽略。