mysqldump 是最常用逻辑备份方式,导出 sql 语句,支持跨版本跨平台恢复;推荐使用 –single-transaction、–routines、–triggers 等参数保障一致性与完整性,并建议通过 配置文件 管理密码、管道压缩及 cron 定时备份。

MySQL 使用 mysqldump 是最常用、最灵活的逻辑备份方式,它导出的是 SQL 语句(CREATE + INSERT),可跨版本、跨平台恢复,适合中小规模 数据库 或需要可读性、可审计的场景。
基础备份命令
最简单的全库备份:
mysqldump -u root -p database_name > backup.sql
执行后会提示输入密码,导出结果为纯文本 SQL 文件。注意:该命令默认不包含创建数据库的语句(CREATE DATABASE),恢复前需手动建库或加 --databases 参数。
推荐的生产级备份参数
实际使用中建议加上这些关键选项,提升一致性、兼容性和恢复可靠性:
- –single-transaction:对 InnoDB 表启用一致性快照(不锁表),避免备份过程中数据被修改;MyISAM 不支持,需配合
--lock-all-tables - –routines:导出存储过程和函数
- –triggers:导出触发器
- –events:导出 事件 调度器定义
- –set-gtid-purged=OFF:若用 GTID 复制且不打算在新实例启用 GTID,避免恢复时报错
- –default-character-set=utf8mb4:显式指定字符集,防止乱码(尤其含 emoji 或中文时)
示例(备份单库并保证结构 + 数据 + 逻辑 对象 完整):
mysqldump -u root -p --single-transaction --routines --triggers --events --default-character-set=utf8mb4 myapp > myapp_$(date +%F).sql
多库与排除表备份
备份多个库:
mysqldump -u root -p --databases db1 db2 db3 > multi_db_backup.sql
(--databases 会让输出包含 CREATE DATABASE if NOT EXISTS 语句)
跳过某些大表(如日志表)节省空间和时间:
mysqldump -u root -p myapp --ignore-table=myapp.access_log --ignore-table=myapp.tmp_data > myapp_clean.sql
压缩与定时备份建议
直接管道压缩,减少磁盘占用:
mysqldump -u root -p --single-transaction myapp | gzip > myapp_$(date +%F_%H-%M).sql.gz
搭配 cron 定时(如每天凌晨 2 点):
0 2 * * * /usr/bin/mysqldump -u backup_user -p'pass' --single-transaction --routines myapp | gzip > /backup/myapp_$(date +%F).sql.gz
⚠️ 注意:密码写在命令行存在泄露风险,建议改用 配置文件(~/.my.cnf)并设权限 chmod 600
逻辑备份恢复也很简单:mysql -u root -p database_name,前提是目标库已存在且字符集匹配。