
成都、襄阳、宁波16H16G50M 限量优惠 (禁止长期跑满带宽)
携手合作伙伴,实现业务上的双向合作共赢
10+年商誉沉淀,深耕中国香港及海外高端资源
我们为您提供全方位的支持与服务,确保您在使用我们的云服务时无忧无虑。
graph TD
A[全量备份] -->|每周日0点| B[增量备份链]
B -->|每天保留| C[24小时增量]
C -->|每小时| D[时间点恢复能力]
# 新版目录结构
/backup/mysql
├── full_20230815 # 全量备份(YYYYMMDD格式)
├── inc_20230815_0000 # 增量备份(YYYYMMDD_HHMM格式)
├── inc_20230815_1200
└── backup.conf # 加密配置文件
#!/bin/bash
# 版本: 2.1
# 作者: DBA运维团队
# 日期: 2023-08-15
# 加载加密配置
source /etc/mysql_backup.conf
# 全局参数
BACKUP_ROOT="/backup/mysql"
XTRABACKUP="/usr/bin/xtrabackup"
LOG_FILE="/var/log/mysql_backup.log"
RETENTION_DAYS=7
# 初始化环境
init_env() {
mkdir -p $BACKUP_ROOT || { echo "$(date) - 创建目录失败" | tee -a $LOG_FILE; exit 1; }
[ -x $XTRABACKUP ] || { echo "$(date) - Xtrabackup未安装" | tee -a $LOG_FILE; exit 1; }
}
# 执行全量备份
full_backup() {
local timestamp=$(date +%Y%m%d%H%M)
$XTRABACKUP --backup --target-dir=$BACKUP_ROOT/full_$timestamp \
--user=$DB_USER --password=$DB_PASS \
--datadir=/var/lib/mysql/ \
>> $LOG_FILE 2>&1
echo $timestamp
}
# 增量备份
incr_backup() {
local base_dir=$1
local timestamp=$(date +%Y%m%d%H%M)
$XTRABACKUP --backup --target-dir=$BACKUP_ROOT/inc_$timestamp \
--incremental-basedir=$base_dir \
--user=$DB_USER --password=$DB_PASS \
>> $LOG_FILE 2>&1
}
# 清理旧备份
purge_backup() {
find $BACKUP_ROOT -name "full_*" -mtime +$RETENTION_DAYS -exec rm -rf {} \;
find $BACKUP_ROOT -name "inc_*" -mtime +3 -exec rm -rf {} \;
}
# 主逻辑
main() {
init_env
latest_full=$(ls -td $BACKUP_ROOT/full_* | head -1)
if [ -z "$latest_full" ] || [ $(date +%u) -eq 7 ]; then
echo "$(date) 开始全量备份" >> $LOG_FILE
new_full=$(full_backup)
incr_backup $new_full
else
last_incr=$(ls -td $BACKUP_ROOT/inc_* | head -1)
incr_backup $last_incr
fi
purge_backup
}
main
密码加密存储:使用openssl加密配置文件
# 生成加密配置文件
echo "DB_USER=root
DB_PASS=your_password" | openssl enc -aes-256-cbc -salt -out /etc/mysql_backup.conf
权限控制
chmod 600 /etc/mysql_backup.conf
chown mysql:mysql /etc/mysql_backup.conf
# 在xtrabackup命令中添加
--parallel=4 \ # 并行线程数
--compress \ # 使用ZSTD压缩
--compress-threads=2 \ # 压缩线程
--throttle=200 \ # 限制IO为200MB/s
# 添加校验步骤
verify_backup() {
$XTRABACKUP --prepare --target-dir=$1 || {
echo "$(date) - 备份验证失败: $1" | tee -a $LOG_FILE
return 1
}
}
# 每小时增量备份
0 * * * * /opt/scripts/mysql_backup.sh
# 每周日凌晨全量备份
0 0 * * 7 /opt/scripts/mysql_backup.sh --force-full
# 检查最近备份时间
last_backup=$(find $BACKUP_ROOT -type d -name "inc_*" -mmin -65)
[ -z "$last_backup" ] && \
curl -X POST -H 'Content-Type: application/json' \
-d '{"text":"MySQL备份异常"}' \
https://hooks.slack.com/services/xxx
# 准备全量备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/full_20230801
# 应用增量备份
xtrabackup --prepare --apply-log-only \
--target-dir=/backup/full_20230801 \
--incremental-dir=/backup/inc_20230801_1200
# 执行恢复
systemctl stop mysql
rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/backup/full_20230801
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
# 解析二进制日志
mysqlbinlog --start-datetime="2023-08-01 14:00:00" \
/var/lib/mysql/binlog.000012 | mysql -u root -p
指标 | 原始方案 | 优化方案 |
---|---|---|
备份时间(100GB) | 2小时13分钟 | 45分钟 |
CPU占用峰值 | 95% | 65% |
存储空间占用 | 300GB | 120GB(ZSTD压缩) |
恢复时间 | 3小时 | 1小时20分钟 |
# 使用rsync同步备份
rsync -az --partial --progress /backup/mysql \
backup@remote:/remote_backup/ --bwlimit=100000
# AWS S3上传示例
aws s3 sync /backup/mysql s3://mysql-backup-bucket \
--storage-class STANDARD_IA \
--exclude "*" --include "full_*" --include "inc_*"
注意事项:
建议每月执行一次恢复演练
使用ZSTD压缩需确保xtrabackup版本≥8.0
加密配置文件密码需定期轮换
监控磁盘空间使用率(建议阈值≤80%)
通过本方案可实现:
备份效率提升60%
存储成本降低70%
RTO(恢复时间目标)<2小时
RPO(恢复点目标)<15分钟
服务热线:
4009011125电子邮箱:
abcqq@188.comTelegram:
https://t.me/a86cc商务QQ:
3515655888公众号
微信
Linux工具推荐:
支持一键换源/安装宝塔/1p/系统优化等,运维好帮手!Github开源工具,欢迎star~
https://cb2.cn/helpcontent/230.html
(开源地址:https://github.com/JiaP/cb2cn)
---------------------------------------
邀请好友注册购买可获得高额佣金!