前言
生产中数据库数据量比较大,为了数据安全及快速备份恢复,选择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_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
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
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
| sudo systemctl stop 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
sudo systemctl start mysql
mysql -u root -p -e "SHOW DATABASES;"
|