以下是一个基本的MySQL 8.0.27增量备份脚本,其中使用了mysqldump命令。
#!/bin/bash
定义MySQL数据库名称、用户名和密码
DB_NAME=“your_database_name” DB_USER=“your_username” DB_PASS=“your_password”
定义备份目录
BACKUP_DIR=“/backup”
获取当前时间
DATETIME=$(date +%Y%m%d-%H%M%S)
定义完整备份文件名和增量备份目录名
FULL_BACKUP_FILE=”\(BACKUP_DIR/\)DB_NAME-full-\(DATETIME.sql.gz" INCREMENTAL_DIR="\)BACKUP_DIR/incremental-$DATETIME”
创建增量备份目录
mkdir -p $INCREMENTAL_DIR
执行mysqldump命令进行完整备份,并压缩输出文件
mysqldump –single-transaction –quick –lock-tables=false –user=\(DB_USER --password=\)DB_PASS \(DB_NAME | gzip > \)FULL_BACKUP_FILE
记录上一次备份的binlog文件和偏移量
LAST_BINLOG=\((mysql --user=\)DB_USER –password=\(DB_PASS --skip-column-names -e "SHOW MASTER STATUS;" | awk '{print \)1}‘) LAST_POSITION=\((mysql --user=\)DB_USER –password=\(DB_PASS --skip-column-names -e "SHOW MASTER STATUS;" | awk '{print \)2}’)
执行FLUSH LOGS命令生成新的binlog文件
mysql –user=\(DB_USER --password=\)DB_PASS -e “FLUSH LOGS;”
使用rsync命令将新增的binlog文件从MySQL服务器同步到增量备份目录
rsync -avz –exclude=’.pid’ –exclude=’.err’ –exclude=’.status’ –exclude=‘auto.cnf’ –exclude=‘ib_logfile’ –exclude=‘mysql’ –exclude=‘performance_schema’ –exclude=‘sys’ \(MYSQL_HOME/data/ \)INCREMENTAL_DIR/
生成增量备份文件名
INCREMENTAL_FILE=”\(BACKUP_DIR/\)DB_NAME-incremental-\(LAST_BINLOG-\)LAST_POSITION.sql.gz”
将新增的binlog日志应用于增量备份目录中的MySQL实例,生成增量备份文件
mysqlbinlog –user=\(DB_USER --password=\)DB_PASS –start-position \(LAST_POSITION \)INCREMENTAL_DIR/mysql-bin.* | gzip > $INCREMENTAL_FILE
删除过期的备份文件和目录(保留最近7天的完整备份文件和最近5个增量备份目录)
find \(BACKUP_DIR -name "*.gz" -type f -mtime +6 -exec rm {} \; find \)BACKUP_DIR -name “incremental*” -type d -mtime +4 -exec rm -r {} \;
echo “Backup complete!”