MySQL使用PXB备份及恢复

前言

生产中数据库数据量比较大,为了数据安全及快速备份恢复,选择PXB工具

备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash

# MySQL 连接信息
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_SOCKET="/tmp/mysql.sock" # 根据实际情况修改
BACKUP_DIR="/data/backup/mysql/backup"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="full_backup_$DATE"

# 检查备份目录是否存在,如果不存在则创建
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
fi

# 使用 percona-xtrabackup 进行全库备份
echo "Starting MySQL full backup..."
xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --socket=$MYSQL_SOCKET --target-dir=$BACKUP_DIR/$BACKUP_NAME

# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "MySQL full backup completed successfully."
else
echo "MySQL full backup failed!"
exit 1
fi

# 压缩备份文件
echo "Compressing backup..."
tar -czf $BACKUP_DIR/$BACKUP_NAME.tar.gz -C $BACKUP_DIR $BACKUP_NAME

# 删除未压缩的备份目录
rm -rf $BACKUP_DIR/$BACKUP_NAME

# 保留最近 7 个备份,删除旧的备份
echo "Cleaning up old backups..."
cd $BACKUP_DIR
ls -t | grep full_backup_.*\.tar\.gz | tail -n +8 | xargs rm -f

echo "Backup and cleanup completed."

#计划任务
0 2 * * * /data/backup/mysql/pxb_backup.sh >> /var/log/mysql_backup.log 2>&1

恢复数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 停止 MySQL 服务
sudo systemctl stop mysql

# 清理 MySQL 数据目录
sudo rm -rf /var/lib/mysql/*

# 准备备份文件
xtrabackup --prepare --target-dir=/backup/mysql/full_backup

# 恢复备份文件
xtrabackup --copy-back --target-dir=/backup/mysql/full_backup
--target-dir:指定备份文件的路径。
--copy-back:将备份文件复制到 MySQL 数据目录(保留原始备份文件)。

# 设置文件权限
sudo chown -R mysql:mysql /var/lib/mysql

# 启动 MySQL 服务
sudo systemctl start mysql

# 验证数据
mysql -u root -p -e "SHOW DATABASES;"

MySQL使用PXB备份及恢复
http://example.com/2025/04/25/MySQL使用PXB/
作者
种田人
发布于
2025年4月25日
许可协议