Linux服务器MySql数据库备份
作者:杨锦龙时间:2025-12-22点击量:0次
一、使用 mysqldump 手动备份
1. 备份单个数据库
mysqldump -u 用户名 -p 数据库名 > /path/to/backup/数据库名_$(date +%Y%m%d).sql
示例:
mysqldump -u mkszyxy -p mkszyxy > /home/wwwroot/mkszyxy/wwwroot/mkszyxy _$(date +%Y%m%d).sql
2. 备份所有数据库
mysqldump -u root -p --all-databases > /backups/all_databases_$(date +%Y%m%d).sql
3.. 备份多个指定数据库
mysqldump -u root -p --databases db1 db2 db3 > /backups/multi_db_$(date +%Y%m%d).sql
4. 压缩备份(节省空间)
mysqldump -u root -p mydb | gzip > /backups/mydb_$(date +%Y%m%d).sql.gz
二、自动化备份脚本(带日期和压缩)
创建脚本 /usr/local/bin/mysql_backup.sh:
#!/bin/bash
# 配置
USER="root"
PASSWORD="your_password" # 建议使用配置文件或 .my.cnf 更安全
BACKUP_DIR="/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DATABASES=("db1" "db2" "mydb") # 要备份的数据库列表
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 逐个备份数据库
for DB in "${DATABASES[@]}"; do
mysqldump -u"$USER" -p"$PASSWORD" "$DB" | gzip > "$BACKUP_DIR/${DB}_$DATE.sql.gz"
done
# 可选:删除7天前的备份
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
echo "MySQL backup completed at $(date)"设置权限并定时任务
chmod +x /usr/local/bin/mysql_backup.sh
添加到 crontab(每天凌晨2点执行):
crontab -e
加入:
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
三、更安全的方式:使用 .my.cnf 配置文件避免明文密码
在用户家目录下创建 ~/.my.cnf:
[client] user=root password=your_password host=localhost
设置权限(非常重要!):
chmod 600 ~/.my.cnf
然后备份命令可简化为:
mysqldump mydb | gzip > /backups/mydb_$(date +%Y%m%d).sql.gz
四、恢复数据库
从 .sql 恢复
mysql -u root -p mydb < backup_file.sql
从 .sql.gz 恢复
gunzip < backup_file.sql.gz | mysql -u root -p mydb
五、注意事项
权限:确保运行备份的用户有足够权限读取数据库。
磁盘空间:定期清理旧备份,防止磁盘爆满。
加密/远程备份:如需异地备份,可结合 rsync、scp 或云存储工具。
锁表问题:对于大库或高并发场景,考虑使用 --single-transaction(仅适用于 InnoDB):
mysqldump --single-transaction -u root -p mydb > backup.sql