在MySQL中进行本地备份和双机相互备份,可以使用mysqldump
工具来导出数据库,并使用scp
命令将备份文件传输到另一台服务器,以下是一个简单的脚本示例,用于实现这些功能:
本地备份脚本
#!/bin/bash 配置参数 DB_USER="your_db_user" DB_PASSWORD="your_db_password" DB_NAME="your_db_name" BACKUP_DIR="/path/to/backup/dir" DATE=$(date +%Y%m%d%H%M) BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$DATE.sql" 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR 执行备份 mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE 检查备份是否成功 if [ $? -eq 0 ]; then echo "Backup successful: $BACKUP_FILE" else echo "Backup failed!" fi
双机相互备份脚本
假设有两台服务器:Server A 和 Server B,我们将从 Server A 备份数据库,并将备份文件传输到 Server B。
Server A 的备份脚本
#!/bin/bash 配置参数 DB_USER="your_db_user" DB_PASSWORD="your_db_password" DB_NAME="your_db_name" BACKUP_DIR="/path/to/backup/dir" DATE=$(date +%Y%m%d%H%M) BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_$DATE.sql" REMOTE_USER="remote_user" REMOTE_HOST="server_b_ip_or_hostname" REMOTE_DIR="/path/to/remote/backup/dir" 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR 执行备份 mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE 检查备份是否成功 if [ $? -eq 0 ]; then echo "Backup successful: $BACKUP_FILE" # 传输备份文件到远程服务器 scp $BACKUP_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR if [ $? -eq 0 ]; then echo "Backup file transferred to Server B successfully." else echo "Failed to transfer backup file to Server B." fi else echo "Backup failed!" fi
Server B 的接收脚本(可选)
如果你希望 Server B 也自动处理接收到的备份文件,可以设置一个 cron job 定期检查新文件并进行相应处理,将接收到的备份文件移动到特定目录或进行其他操作。
#!/bin/bash 配置参数 REMOTE_DIR="/path/to/remote/backup/dir" LOCAL_DIR="/path/to/local/backup/dir" LOG_FILE="/path/to/log/file.log" 创建本地目录(如果不存在) mkdir -p $LOCAL_DIR 查找新的备份文件并移动到本地目录 find $REMOTE_DIR -type f -name "*.sql" -newermt '1 minute ago' -exec mv {} $LOCAL_DIR \; 记录日志 echo "$(date): Moved new backup files from $REMOTE_DIR to $LOCAL_DIR" >> $LOG_FILE
注意事项
1、安全性:确保你的数据库密码和其他敏感信息不会暴露在脚本中,可以考虑使用配置文件或环境变量来存储这些信息。
2、权限:确保运行脚本的用户对相关目录和文件具有适当的读写权限。
3、网络连接:确保两台服务器之间的网络连接正常,SSH 服务可用。
4、定时任务:可以使用cron
来定时执行这些脚本,以实现自动化备份,编辑crontab
文件:
crontab -e
添加以下行以每天凌晨2点执行备份脚本:
0 2 * * * /path/to/backup_script.sh