在Linux系统中,可以通过编写备份脚本并结合cron定时任务来实现MySQL数据库的每日自动备份。以下是详细实现步骤:
#!/bin/bash
# 配置参数
DB_USER="your_username" # MySQL用户名
DB_PASS="your_password" # MySQL密码
DB_NAME="your_database" # 要备份的数据库名,或用--all-databases备份所有
BACKUP_DIR="/path/to/backup" # 备份文件存储目录
DATE=$(date +%Y%m%d_%H%M%S) # 当前日期时间
KEEP_DAYS=7 # 保留最近几天的备份
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 执行备份
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql
# 压缩备份文件
gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql
# 删除旧备份
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -type f -mtime +$KEEP_DAYS -delete
chmod +x /path/to/your/backup_script.sh
编辑cron表:
crontab -e
添加以下内容(每天凌晨2点执行):
0 2 * * * /path/to/your/backup_script.sh
如果是MySQL企业版用户,可以使用mysqlbackup工具:
#!/bin/bash
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d_%H%M%S)
mysqlbackup --user=root --password=your_password --backup-dir=$BACKUP_DIR/$DATE backup
保护密码安全:
加密备份:
mysqldump -u user -p database | gzip | openssl enc -aes-256-cbc -salt -out backup.sql.gz.enc
远程备份: 考虑将备份文件自动传输到远程服务器或云存储
如果需要从备份恢复:
# 解压(如果是压缩的)
gzip -d backup.sql.gz
# 恢复
mysql -u username -p database_name < backup.sql
建议在脚本中添加日志记录功能:
LOG_FILE="/var/log/mysql_backup.log"
echo "[$(date)] Starting backup..." >> $LOG_FILE
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql 2>> $LOG_FILE
echo "[$(date)] Backup completed" >> $LOG_FILE
以上方案可以根据实际需求进行调整,如备份频率、保留策略等。