在 Debian 上备份 MySQL(或 MariaDB)数据库,常用且推荐的方法有以下几种,按常用程度从高到低给你说明,并附示例。
一、使用 mysqldump(最常用 ✅)
1️⃣ 备份单个数据库
mysqldump -u root -p 数据库名 > backup_$(date +%F).sql
示例:
mysqldump -u root -p mydb > mydb_2026-01-21.sql
2️⃣ 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_$(date +%F).sql
3️⃣ 备份并压缩(推荐)
mysqldump -u root -p 数据库名 | gzip > backup_$(date +%F).sql.gz
4️⃣ 只备份结构(不含数据)
mysqldump -u root -p --no-data 数据库名 > schema.sql
5️⃣ 只备份数据(不含结构)
mysqldump -u root -p --no-create-info 数据库名 > data.sql
二、备份 InnoDB 并保持一致(推荐)
mysqldump -u root -p --single-transaction 数据库名 > backup.sql
✅ 适合 InnoDB
✅ 不锁表,适合线上数据库
三、自动定时备份(crontab)
1️⃣ 创建备份脚本
mkdir -p /backup/mysql
nano /backup/mysql_backup.sh
内容:
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mysqldump -u root -p密码 数据库名 | gzip > $BACKUP_DIR/db_$DATE.sql.gz
⚠️ 注意:直接写密码不安全,推荐用配置文件(见下方)
2️⃣ 加权限
chmod +x /backup/mysql_backup.sh
3️⃣ 添加定时任务
crontab -e
每天凌晨 2 点备份:
0 2 * * * /backup/mysql_backup.sh
四、使用 .my.cnf 避免明文密码(安全 ✅)
nano ~/.my.cnf
内容:
[client]
user=root
password=你的密码
chmod 600 ~/.my.cnf
然后备份时可以不用 -p。
五、物理备份(大型数据库)
✅ 使用 mariabackup(MariaDB)
mariabackup --backup --target-dir=/backup/mariadb
mariabackup --prepare --target-dir=/backup/mariadb
✅ 使用 Percona XtraBackup(MySQL)
适合 TB 级别数据库,支持热备。
六、恢复备份
恢复 SQL 备份
mysql -u root -p 数据库名 < backup.sql
恢复压缩文件
gunzip < backup.sql.gz | mysql -u root -p 数据库名
七、备份建议(最佳实践 ✅)
- ✅ 生产环境使用
--single-transaction - ✅ 定期清理旧备份
- ✅ 备份文件存放到远程或对象存储
- ✅ 定期测试恢复流程
如果你愿意,可以告诉我:
- MySQL 还是 MariaDB?
- 数据库大小?
- 是否需要热备、主从?
我可以帮你给出最适合你服务器环境的备份方案。
