一、执行备份操作
xtrabackup --default-file=/data/mysql/conf/my.cnf -u'ccj' -p'ccj1' --backup --target-dir=/root/alldata/ --socket=/tmp/mysql.sock
二、备份数据分析
XtraBackup备份过程中会生成多个文件,这些文件在备份和恢复过程中起着重要的作用。以下是这些文件的内容和功能说明:
xtrabackup_binlog_info
-
内容:记录备份完成时的binlog文件名和位点。
-
功能:用于在恢复备份后,确定从哪个binlog位点开始进行增量恢复。
xtrabackup_binlog_pos_innodb
-
内容:记录InnoDB的binlog位点信息。
-
功能:与xtrabackup_binlog_info类似,但更侧重于InnoDB相关的binlog信息。
xtrabackup_checkpoints
-
内容:记录备份的类型(如全量备份或增量备份)和LSN(日志序列号)信息。
-
功能:用于确定备份的范围和状态,以便在恢复时能够正确地应用日志。
xtrabackup_info
-
内容:记录备份的详细信息,包括备份时间、备份方式、备份目录等。
-
功能:提供备份的元数据信息,方便在恢复时了解备份的背景和配置。
xtrabackup_logfile
-
内容:保存备份过程中拷贝的redo log。
-
功能:在准备备份阶段,用于将数据文件恢复到备份结束时的一致性状态。
xtrabackup_slave_info
-
内容:如果备份的是从库,该文件会记录主节点的位点信息,包括Relay_Master_Log_File和Exec_Master_Log_Pos。
-
功能:用于在恢复备份后,设置从库的复制位点。
backup-my.cnf
-
内容:记录了一些InnoDB引擎的参数,如innodb_data_home_dir、innodb_data_file_path等。
-
功能:在准备备份阶段,这些参数会被用来正确地恢复InnoDB数据文件。
三、把备份传到目标机器
scp -r /root/alldata/ 101.201.246.223:/root/alldata/
四、执行 prepare 操作
xtrabackup --prepare --target-dir=/root/alldata
五、清空目标实例
/etc/init.d/mysql.server stop
cd /data/mysql
mkdir /data/mysql_bak
mv /data/mysql/data/ /data/mysql_bak/
mv /data/mysql/binlog/ /data/mysql_bak/
mv /data/mysql/log/ /data/mysql_bak/
mkdir /data/mysql/log
touch /data/mysql/log/mysql.err
chown -R mysql:mysql /data/mysql
六、恢复数据并启动MySQL
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=/root/alldata
chown -R mysql:mysql /data/mysql
/etc/init.d/mysql.server start
七、压缩备份和恢复
xtrabackup --default-file=/data/mysql/conf/my.cnf -u'ccj' -p'ccj1' --backup --compress --target-dir=/root/alldata_compress/ --socket=/tmp/mysql.sock
scp -r /root/alldata_compress/ 101.201.246.223:/root/alldata_compress/
- 安装qpress
wget https://github.com/PierreLvx/qpress/archive/refs/tags/20230507.zip
yum install unzip
unzip qpress-20230507.zip
cd qpress-20230507
sudo yum groupinstall "Development Tools"
sudo yum install gcc-c++
make
make install
qpress -v
- 解压
xtrabackup --decompress --target-dir=/root/alldata_compress/
- prepare
xtrabackup --prepare --target-dir=/root/alldata_compress/
- 停止目标MySQL实例
/etc/init.d/mysql.server stop
cd /data/mysql
mkdir /data/mysql_bak
mv /data/mysql/data/ /data/mysql_bak/
mv /data/mysql/binlog/ /data/mysql_bak/
mv /data/mysql/log/ /data/mysql_bak/
mkdir /data/mysql/log
touch /data/mysql/log/mysql.err
chown -R mysql:mysql /data/mysql
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=/root/alldata_compress/
chown -R mysql:mysql /data/mysql
/etc/init.d/mysql.server start
八、定时备份脚本
#!/bin/bash
# 备份目录
BACKUP_DIR="/data/mysql_bak"
# 当前时间戳
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 备份目标目录
TARGET_DIR="${BACKUP_DIR}/bak_${TIMESTAMP}"
# xtrabackup 配置文件路径
CONFIG_FILE="/data/mysql/conf/my.cnf"
# MySQL 用户名和密码
MYSQL_USER="ccj"
MYSQL_PASSWORD="ccj1"
# MySQL 套接字文件路径
SOCKET="/tmp/mysql.sock"
# 创建备份目录
mkdir -p "${TARGET_DIR}"
# 执行备份
xtrabackup \
--defaults-file="${CONFIG_FILE}" \
--user="${MYSQL_USER}" \
--password="${MYSQL_PASSWORD}" \
--backup \
--compress \
--target-dir="${TARGET_DIR}" \
--socket="${SOCKET}"
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份成功: ${TARGET_DIR}"
else
echo "备份失败"
exit 1
fi
# 删除 3 天前的备份目录
find "${BACKUP_DIR}" -maxdepth 1 -name "bak_*" -type d -mtime +3 -exec rm -rf {} \;
echo "已删除 3 天前的备份目录"