以下是在Ubuntu上安装XtraBackup的步骤:
-
添加Percona的软件仓库:
sudo add-apt-repository 'deb http://repo.percona.com/apt $(lsb_release -sc) main' -
添加Percona的公钥并安装
percona-release工具:wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb sudo apt-get update -
安装XtraBackup:
sudo apt-get install percona-xtrabackup-24如果安装过程中出现依赖关系错误,可以运行以下命令来修复:
sudo apt --fix-broken install -
验证安装: 安装完成后,可以使用以下命令验证XtraBackup的版本:
xtrabackup --version -
创建备份目录(如果需要):
sudo mkdir -p /backup/mysql
通过以上步骤,就可以在Ubuntu上成功安装XtraBackup,并用于备份MySQL数据库。
XtraBackup实战:MySQL数据库备份与恢复
一、项目背景
在企业级应用中,数据的安全性和完整性至关重要。为了应对数据库故障、人为误操作、硬件损坏等意外情况,我们需要定期对MySQL数据库进行备份,并制定完善的备份策略和恢复方案。本项目将使用Percona XtraBackup工具,为一个生产环境中的MySQL数据库实例制定一套完整的备份与恢复方案,包括全量备份、增量备份、备份文件压缩与传输、以及数据恢复等操作。
二、环境准备
-
服务器信息
-
数据库服务器(生产环境):192.168.1.100(运行MySQL数据库)
-
备份服务器:192.168.1.101(用于存储备份文件)
-
操作系统:Ubuntu Server 20.04 LTS
-
MySQL版本:5.7.33
-
-
安装MySQL数据库
sudo apt update sudo apt install mysql-server sudo mysql_secure_installation -
安装Percona XtraBackup
sudo add-apt-repository 'deb http://repo.percona.com/apt $(lsb_release -sc) main' wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb sudo percona-release setup ps57 sudo apt update sudo apt install percona-xtrabackup-24
三、备份策略制定
1. 全量备份
每周日凌晨0点进行一次全量备份,确保拥有完整的数据库副本。
2. 增量备份
每天凌晨2点进行增量备份,仅备份自上次全量备份或增量备份以来发生更改的数据,减少备份数据量和备份时间。
3. 备份文件压缩与传输
每次备份完成后,将备份文件压缩并传输至备份服务器,节省存储空间并确保数据安全。
四、备份操作步骤
(一)全量备份
-
创建备份目录
sudo mkdir -p /backup/mysql/full -
执行全量备份
sudo xtrabackup --user=root --password=your_password --backup --target-dir=/backup/mysql/full/full_backup_$(date +%F) --socket=/var/run/mysqld/mysqld.sock-
--user和--password:指定具有备份权限的MySQL用户及其密码 -
--backup:表示执行备份操作 -
--target-dir:指定备份文件的存储目录,使用$(date +%F)动态生成带有日期的目录名,便于区分不同时间的备份 -
--socket:指定MySQL的socket文件路径,用于本地连接
-
-
准备备份(使备份文件可用于恢复)
sudo xtrabackup --prepare --target-dir=/backup/mysql/full/full_backup_$(date +%F)
以下是一个将XtraBackup全量备份操作写入的Shell脚本:
#!/bin/bash
# 定义变量
BACKUP_DIR="/backup/mysql"
FULL_BACKUP_DIR="${BACKUP_DIR}/full"
DATE=$(date +%F)
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"
SOCKET="/var/run/mysqld/mysqld.sock"
# 创建备份目录
mkdir -p ${FULL_BACKUP_DIR}
# 执行全量备份
echo "开始全量备份..."
xtrabackup \
--user=${MYSQL_USER} \
--password=${MYSQL_PASSWORD} \
--backup \
--target-dir=${FULL_BACKUP_DIR}/full_backup_${DATE} \
--socket=${SOCKET}
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "全量备份完成: ${FULL_BACKUP_DIR}/full_backup_${DATE}"
else
echo "全量备份失败"
exit 1
fi
# 准备备份(使备份文件可用于恢复)
echo "准备备份文件..."
xtrabackup \
--prepare \
--target-dir=${FULL_BACKUP_DIR}/full_backup_${DATE}
# 检查准备是否成功
if [ $? -eq 0 ]; then
echo "备份文件准备完成"
else
echo "备份文件准备失败"
exit 1
fi
脚本说明
-
变量定义:
-
BACKUP_DIR:备份文件的根目录。 -
FULL_BACKUP_DIR:全量备份文件的存储目录。 -
DATE:当前日期,用于动态生成备份目录名。 -
MYSQL_USER和MYSQL_PASSWORD:具有备份权限的MySQL用户及其密码。 -
SOCKET:MySQL的socket文件路径,用于本地连接。
-
-
创建备份目录:
-
确保备份目录存在,如果不存在则创建。
-
-
执行全量备份:
-
使用
xtrabackup命令进行全量备份,并将备份文件存储在指定目录。 -
--target-dir指定备份文件的存储路径,动态生成带有日期的目录名,便于区分不同时间的备份。
-
-
准备备份:
-
使用
xtrabackup --prepare命令对备份文件进行准备,使其可用于恢复。
-
-
错误处理:
-
检查每个步骤的执行结果,如果失败则输出错误信息并退出脚本。
-
使用方法
-
将上述脚本保存为文件,例如
full_backup.sh。 -
赋予脚本执行权限:
chmod +x full_backup.sh
-
运行脚本:
./full_backup.sh
定时任务设置
可以将该脚本添加到cron中,实现定期自动备份。例如,每周日凌晨0点执行全量备份:
crontab -e
添加以下内容:
0 0 * * 0 /path/to/full_backup.sh
(二)增量备份
-
创建备份目录
sudo mkdir -p /backup/mysql/incremental -
首次增量备份
sudo xtrabackup --user=root --password=your_password --backup --target-dir=/backup/mysql/incremental/inc_backup_$(date +%F) --incremental-basedir=/backup/mysql/full/full_backup_$(date -d "last sunday" +%F) --socket=/var/run/mysqld/mysqld.sock-
--incremental-basedir:指定基于哪个全量备份进行增量备份(这里以每周日的全量备份为基准)
-
-
后续增量备份 每天执行增量备份时,基于上一次的增量备份目录:
sudo xtrabackup --user=root --password=your_password --backup --target-dir=/backup/mysql/incremental/inc_backup_$(date +%F) --incremental-basedir=/backup/mysql/incremental/inc_backup_$(date -d "yesterday" +%F) --socket=/var/run/mysqld/mysqld.sock -
准备备份
sudo xtrabackup --prepare --target-dir=/backup/mysql/incremental/inc_backup_$(date +%F)
(三)备份文件压缩与传输
-
压缩备份文件
# 对全量备份进行压缩 tar -czvf full_backup_$(date +%F).tar.gz /backup/mysql/full/full_backup_$(date +%F) # 对增量备份进行压缩 tar -czvf inc_backup_$(date +%F).tar.gz /backup/mysql/incremental/inc_backup_$(date +%F) -
传输至备份服务器
scp /backup/mysql/full_backup_$(date +%F).tar.gz root@192.168.1.101:/backup/mysql/ scp /backup/mysql/inc_backup_$(date +%F).tar.gz root@192.168.1.101:/backup/mysql/
五、恢复操作步骤
(一)全量恢复
-
停止MySQL服务
sudo systemctl stop mysql -
删除原数据目录(请确保已备份重要数据)
sudo rm -rf /var/lib/mysql/* -
解压备份文件并恢复
tar -xzvf /backup/mysql/full_backup_$(date +%F).tar.gz -C /backup/mysql/full/ sudo xtrabackup --copy-back --target-dir=/backup/mysql/full/full_backup_$(date +%F) -
调整数据目录权限并启动MySQL服务
sudo chown -R mysql:mysql /var/lib/mysql sudo systemctl start mysql
(二)基于增量备份的恢复
-
停止MySQL服务并删除原数据目录(同全量恢复步骤1-2)
-
合并增量备份到全量备份
sudo xtrabackup --prepare --apply-log-only --target-dir=/backup/mysql/full/full_backup_$(date -d "last sunday" +%F) sudo xtrabackup --prepare --apply-log-only --target-dir=/backup/mysql/full/full_backup_$(date -d "last sunday" +%F) --incremental-dir=/backup/mysql/incremental/inc_backup_$(date +%F) -
恢复数据
sudo xtrabackup --copy-back --target-dir=/backup/mysql/full/full_backup_$(date -d "last sunday" +%F) -
调整权限并启动服务(同全量恢复步骤4)
六、自动化与监控
1. 自动化脚本编写
创建一个备份脚本mysql_backup.sh:
#!/bin/bash
# 定义变量
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
FULL_BACKUP_DIR="${BACKUP_DIR}/full/full_backup_${DATE}"
INCREMENTAL_BACKUP_DIR="${BACKUP_DIR}/incremental/inc_backup_${DATE}"
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"
SOCKET="/var/run/mysqld/mysqld.sock"
BACKUP_SERVER="192.168.1.101"
# 创建备份目录
mkdir -p ${FULL_BACKUP_DIR}
mkdir -p ${INCREMENTAL_BACKUP_DIR}
# 执行全量备份
xtrabackup --user=${MYSQL_USER} --password=${MYSQL_PASSWORD} --backup --target-dir=${FULL_BACKUP_DIR} --socket=${SOCKET}
xtrabackup --prepare --target-dir=${FULL_BACKUP_DIR}
# 执行增量备份(基于上次全量备份)
xtrabackup --user=${MYSQL_USER} --password=${MYSQL_PASSWORD} --backup --target-dir=${INCREMENTAL_BACKUP_DIR} --incremental-basedir=${FULL_BACKUP_DIR} --socket=${SOCKET}
xtrabackup --prepare --target-dir=${INCREMENTAL_BACKUP_DIR}
# 压缩并传输备份文件
tar -czvf ${FULL_BACKUP_DIR}.tar.gz ${FULL_BACKUP_DIR}
tar -czvf ${INCREMENTAL_BACKUP_DIR}.tar.gz ${INCREMENTAL_BACKUP_DIR}
scp ${FULL_BACKUP_DIR}.tar.gz root@${BACKUP_SERVER}:/backup/mysql/
scp ${INCREMENTAL_BACKUP_DIR}.tar.gz root@${BACKUP_SERVER}:/backup/mysql/
# 清理本地备份文件(可选,根据磁盘空间需求调整)
# find ${BACKUP_DIR} -type f -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
赋予脚本执行权限:
chmod +x mysql_backup.sh
2. 定时任务设置
编辑crontab文件,设置定时备份任务:
crontab -e
添加以下内容:
# 每周日凌晨0点执行全量备份
0 0 * * 0 /path/to/mysql_backup.sh --full
# 每天凌晨2点执行增量备份
0 2 * * * /path/to/mysql_backup.sh --incremental
3. 监控与告警
-
监控备份任务执行状态:通过检查备份日志文件(如
/var/log/xtrabackup.log)中的返回码和错误信息,判断备份是否成功。 -
设置告警通知:当备份失败时,使用邮件、短信或即时通讯工具发送告警通知给运维人员,以便及时处理问题。
七、注意事项
-
备份权限管理:确保备份使用的MySQL用户仅具有必要的备份权限,遵循最小权限原则,避免因权限过高导致的安全风险。
-
备份文件存储安全:备份服务器应采取适当的安全措施,如防火墙限制、数据加密等,防止备份文件被未授权访问或篡改。
-
定期测试恢复过程:定期进行恢复演练,验证备份文件的完整性和可恢复性,确保在真正需要恢复时能够顺利进行,避免因长期未测试导致的问题。
-
监控磁盘空间使用情况:密切关注生产服务器和备份服务器的磁盘空间,避免因空间不足导致备份失败或数据丢失,及时清理过期的备份文件或扩展存储容量。
-
记录备份与恢复操作日志:详细记录每次备份和恢复操作的时间、执行人员、操作类型、结果等信息,便于后续审计和问题追溯,为数据库的运维管理提供数据支持。
1048

被折叠的 条评论
为什么被折叠?



