使用shell脚本编写MySQL备份脚本,先备份一个全量,然后每周一、三、五做增量备份。
时间: 2024-09-06 21:05:57 浏览: 55
使用shell脚本编写MySQL数据库的备份脚本是一个常见任务,可以通过组合使用`mysqldump`工具和`mysql`命令来实现。首先,你可以编写一个脚本来执行全量备份,然后根据日期判断是否执行增量备份。
以下是一个简单的脚本示例,用于实现您的需求:
1. 全量备份脚本
```bash
#!/bin/bash
# 数据库配置信息
DB_USER="root"
DB_PASS="password"
DB_NAME="your_database"
FULL_BACKUP_PATH="/path/to/full_backup"
# 获取当前日期作为备份的唯一标识
DATE=`date +%Y%m%d`
FULL_BACKUP_FILE="${FULL_BACKUP_PATH}/full_backup_${DATE}.sql"
# 执行全量备份
mysqldump -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${FULL_BACKUP_FILE}
echo "Full backup completed."
```
2. 增量备份脚本(每周一、三、五执行)
```bash
#!/bin/bash
# 数据库配置信息
DB_USER="root"
DB_PASS="password"
DB_NAME="your_database"
INCREMENTAL_BACKUP_PATH="/path/to/incremental_backup"
# 获取当前日期作为备份的唯一标识
DATE=`date +%Y%m%d`
INCREMENTAL_BACKUP_FILE="${INCREMENTAL_BACKUP_PATH}/incremental_backup_${DATE}.sql"
# 检查是否是周一、三、五
if [ "$(date +%u)" -eq 1 -o "$(date +%u)" -eq 3 -o "$(date +%u)" -eq 5 ]; then
# 根据上一次全量备份的日期来获取最新的二进制日志文件名
LAST_FULL_BACKUP_DATE=$(ls -1 ${FULL_BACKUP_PATH}/full_backup_* | sort -r | head -n 1 | grep -oE '[0-9]{8}')
LAST_BINLOG_NAME=$(mysql -u${DB_USER} -p${DB_PASS} -e"SHOW BINARY LOGS;" | tail -n1 | awk '{print $1}')
LAST_BINLOG_DATE=$(echo ${LAST_BINLOG_NAME} | cut -d'_' -f3)
if [ "${LAST_FULL_BACKUP_DATE}" != "${LAST_BINLOG_DATE}" ]; then
# 执行增量备份
mysqldump -u ${DB_USER} -p${DB_PASS} --master-data=2 --single-transaction ${DB_NAME} > ${INCREMENTAL_BACKUP_FILE}
echo "Incremental backup completed."
else
echo "Incremental backup skipped because binary log has not changed."
fi
else
echo "Incremental backup skipped. Today is not Monday, Wednesday or Friday."
fi
```
请注意,为了使这些脚本正常工作,您需要确保有足够的权限来访问MySQL数据库,以及写入备份文件的权限。同时,您需要手动创建备份文件夹,并确保`DB_USER`和`DB_PASS`等变量与您的MySQL服务器配置匹配。
为了自动化备份过程,您可以使用`cron`作业来安排这些脚本的定期执行。