📞 09318539889 📧 yxp@gansuwangzhan.cn

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