编写一个MySQL数据库备份脚本。要求:每周日做一次全备,周一到周六做增量备份
时间: 2024-02-16 21:02:39 浏览: 89
以下是一个MySQL数据库备份脚本,满足每周日做一次全备,周一到周六做增量备份的要求:
```bash
#!/bin/bash
# MySQL登录信息
MYSQL_USER="your_mysql_username"
MYSQL_PASSWORD="your_mysql_password"
# 备份目录信息
BACKUP_DIR="/path/to/backup/directory"
FULL_BACKUP_DIR="$BACKUP_DIR/full"
INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/incremental"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
# 当天星期几(0表示星期日,1表示星期一,以此类推)
DAY_OF_WEEK=$(date +%w)
# 全备
if [ $DAY_OF_WEEK -eq 0 ]; then
# 创建全备目录
mkdir -p $FULL_BACKUP_DIR/$DATE
# 备份所有数据库
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > $FULL_BACKUP_DIR/$DATE/db_all_$DATE.sql.gz
fi
# 增量备份
if [ $DAY_OF_WEEK -ne 0 ]; then
# 创建增量备份目录
mkdir -p $INCREMENTAL_BACKUP_DIR/$DATE
# 获取上个完整备份的时间
LAST_FULL_BACKUP=$(ls -td $FULL_BACKUP_DIR/*/ | head -n 1)
LAST_FULL_BACKUP_TIME=$(basename $LAST_FULL_BACKUP)
# 备份所有数据库的增量部分
innobackupex --user=$MYSQL_USER --password=$MYSQL_PASSWORD --incremental $INCREMENTAL_BACKUP_DIR/$DATE --incremental-basedir=$LAST_FULL_BACKUP
# 合并增量备份到上个完整备份中
innobackupex --apply-log --redo-only $LAST_FULL_BACKUP
for i in $(ls -d $INCREMENTAL_BACKUP_DIR/$DATE/*/); do
innobackupex --apply-log --redo-only $LAST_FULL_BACKUP --incremental-dir=$i
done
innobackupex --apply-log $LAST_FULL_BACKUP
# 压缩完整备份目录
gzip -r $LAST_FULL_BACKUP
fi
```
脚本的流程如下:
1. 获取MySQL登录信息和备份目录信息;
2. 获取当天星期几的信息;
3. 如果当天是周日(星期日),则创建全备目录并备份所有数据库;
4. 如果当天不是周日,则创建增量备份目录;
5. 获取上个完整备份的时间;
6. 备份所有数据库的增量部分;
7. 合并增量备份到上个完整备份中;
8. 压缩上个完整备份目录。
需要注意的是,该脚本使用了`innobackupex`工具进行备份,因此需要先安装该工具。同时,为了使备份更加安全,建议将MySQL登录信息保存在一个单独的配置文件中,并在脚本中引用该配置文件。
阅读全文