一、xtrabackup介绍
xtrabackup是由Percona公司开发的一个用于MySQL数据库物理热备的工具,开源免费。目前最新的xtrabbackup 8.3版本可以备份MySQL 8.3 servers上的InnoDB, XtraDB, MyISAM, MyRocks表,Percona Server for MySQL with XtraDB, Percona Server for MySQL 8.3,Percona XtraDB Cluster 8.3。xtrabackup工具执行InnoDB和XtraDB数据库的非阻塞备份。它具有如下优点: (1)备份速度快,物理备份可靠 (2)在备份期间不间断地处理事务 (3)支持备份压缩,节约磁盘空间和网络带宽 (4)自动校验备份 xtrabackup支持流式输出、压缩、增量备份、加密,是目前各个厂商普遍使用的MySQL备份工具。二、xtrabackup备份原理
1、xtrabackup开始,记录lsn ,同时启动后台进程监控redo日志的变化,且将变化实时记录到xtrabackup_logfile中 2、复制ibdata1,.ibd数据文件 3、全局读锁,执行LOCK INSTANCE FOR BACKUP(8.0取代了 FLUSH TABLES WITH READ LOCK) 4、复制非InnoDB的表和文件 5、获取binlog位置信息 6、停止复制redo log,即停止记录xtrabackup_logfile 7、执行UNLOCK INSTANCE释放锁 8、复制buffer pool 9、备份完成三、xtrabackup下载
下载网址:https://www.percona.com/downloads 选择和数据库相匹配的xtrabackup版本下载,我这里数据库版本是8.0.35,下载界面如下: 四、xtrabackup安装1、安装依赖包
# 安装如下依赖包,不然备份会报错 # yum install -y libaio libaio-devel zstd libev perl-DBD-MySQL perl-Digest-MD52、安装部署xtrabackup
tar -xvf percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz
mv percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17 xtrabackup
echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >>/etc/profile
source /etc/profile
which xtrabackup
3、查看xtrabackup版本
xtrabackup --version
四、使用xtrabackup备份数据库
1、创建备份目录并授权
mkdir /home/mysql_backup_xtrabackup
chown -R mysql:mysql /home/mysql_backup_xtrabackup
2、全备数据库
创建专用备份账号:CREATE USER 'backupuser'@'%' IDENTIFIED WITH mysql_native_password by 'XXXXX' PASSWORD EXPIRE DEFAULT;
GRANT BACKUP_ADMIN, PROCESS, RELOAD, SELECT ON *.* TO 'backupuser'@'%';
1、数据库全备的简单应用
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/home/mysql_backup_xtrabackup/db_`date +%F` --databases="aa,bb" --user=backupuser --password=260ciep#T9evC --port=3306 --socket=/home/mysql/mysql.sock --compress >/home/mysql_backup_xtrabackup/db_full_`date +%F`.log 2>&1
注意:--socket要与my.cnf中的配置保持一致,--databases="ehs_device,ehs_hazard"可以根据实际情况选择备份部分库
基本参数:
- --backup:指定执行备份。
- --target-dir=<dir>:指定备份数据存放的目标目录。
- --user=<username>:数据库用户名。
- --password=<password>:数据库密码。
- --host=<hostname>:数据库主机名。
- --port=<port>:数据库端口。
- --copy-back:将备份文件复制回数据目录。
- --datadir=<dir>:指定数据目录(用于恢复)。
- --compress:启用压缩。
- --encrypt:启用加密。
#!/bin/bash
# 设置数据库配置
USER="backupuser"
PASSWORD="XXXXX"
DEFAULTS_FILE="/etc/my.cnf" # 指定你的配置文件
#DATADIR="/var/lib/mysql"
BASE_BACKUP_DIR="/mysql_backup_xtrabackup"
SOCKET_FILE="/var/lib/mysql/mysql.sock"
# 获取当前日期
CURRENT_DATE=$(date +%Y-%m-%d)
FULL_BACKUP_DIR="$BASE_BACKUP_DIR/full_$CURRENT_DATE"
FULL_BACKUP_LOG="$BASE_BACKUP_DIR/log_full_$CURRENT_DATE.log"
INCREMENTAL_BACKUP_DIR="$BASE_BACKUP_DIR/incremental_$CURRENT_DATE"
INCREMENTAL_BACKUP_LOG="$BASE_BACKUP_DIR/log_incremental_$CURRENT_DATE.log"
# 检查是否为周日
if [ "$(date +%u)" -eq 7 ]; then
# 周日进行全量备份
echo "Starting full backup..."
xtrabackup --defaults-file="$DEFAULTS_FILE" --backup --target-dir="$FULL_BACKUP_DIR" --user="$USER" --password="$PASSWORD" --socket="$SOCKET_FILE" --compress > "$FULL_BACKUP_LOG" 2>&1
echo "Full backup completed."
else
# 其他天进行增量备份
LAST_FULL_DIR=$(ls -d "$BASE_BACKUP_DIR/full_"* | sort | tail -n 1)
LAST_INCREMENTAL_DIR=$(ls -d "$BASE_BACKUP_DIR/incremental_"* | sort | tail -n 1)
if [ -z "$LAST_FULL_DIR" ]; then
echo "No previous full backup found. Exiting."
exit 1
fi
if [ -z "$LAST_INCREMENTAL_DIR" ]; then
echo "No previous incremental backup found. Using the last full backup for the base."
LAST_INCREMENTAL_DIR="$LAST_FULL_DIR"
fi
echo "Starting incremental backup based on $LAST_INCREMENTAL_DIR..."
xtrabackup --defaults-file="$DEFAULTS_FILE" --backup --no-lock --target-dir="$INCREMENTAL_BACKUP_DIR" --incremental-basedir="$LAST_INCREMENTAL_DIR" --user="$USER" --password="$PASSWORD" --socket="$SOCKET_FILE" --compress > "$INCREMENTAL_BACKUP_LOG" 2>&1
echo "Incremental backup completed."
fi
标签:--,backup,备份,xtrabackup,使用指南,BACKUP,DIR
From: https://blog.csdn.net/eaglesstone/article/details/142795017