暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

xtrabackup全备增备以及恢复脚本

chu 2024-05-31
43



1.全量备份脚本

[root@localhost mysql]# more xtrabackupfull.sh
#!/bin/bash
#远程备份IP地址
#back_ip="127.0.0.1"

#主机ip
#数据库信息
mysql_data_dir="/data/data"
mysql_user="root"
mysql_password="mysql"
mysql_host="127.0.0.1"
mysql_port=3306

#定义备份目录
backup_dir="/home/mysql/back_full"

echo "执行全量备份..."
# 获取当前时间戳
timestamp=$(date +'%Y%m%d%H%M%S')
back_dir="${backup_dir}/${timestamp}"
# 创建备份目录
mkdir -p "$back_dir"


#获取最新的全量备份目录
new_backup_dir=$(ls -1t "$backup_dir" | head -1)

#全量备份目录
full_dir="${backup_dir}/${new_backup_dir}"

#本地打包备份目录
#tar_backup="/home/mysql/full_mysqlbackup"
#mkdir -p $tar_backup
# 执行全量备份
xtrabackup --backup --target-dir="${back_dir}" --user="$mysql_user" --password="$mysql_password" --host="$mysql_host" --port="$mysql_port"

#echo "压缩最新的全量备份..."
#cd $full_dir
#tar -cvf "${tar_backup}/${timestamp}.tar.gz" $full_dir
#scp ${tar_backup}/${timestamp}.tar.gz $back_ip:$tar_backup




2.增备脚本

[root@localhost mysql]# more xtrabackupinc.sh
#!/bin/bash
# 远程备份IP地址
#back_ip="192.168.40.112"

# 数据库信息
mysql_user="root"
mysql_password="mysql"
mysql_host="127.0.0.1"
mysql_port=3306

# 定义增量备份目录
backup_dir="/home/mysql/back_inc"

# 获取上一次的增量备份目录
last_backup_dir=$(ls -1t "$backup_dir" | head -1)

# 如果没有上一次的增量备份目录,那么使用最新的全量备份目录
if [ -z "$last_backup_dir" ]; then
full_back_dir="/home/mysql/back_full/"
last_backup_dir=$(ls -1t "$full_back_dir" | head -1)
backup_type="full_inc"
else
backup_type="inc"
fi

# 获取当前时间戳
timestamp=$(date +'%Y%m%d%H%M%S')
back_dir="${backup_dir}/${timestamp}"

# 创建增量备份目录
mkdir -p "$back_dir"

# 本地打包备份目录
#tar_backup="/opt/${backup_type}_mysqlbackup"
#mkdir -p "$tar_backup"

# 根据备份类型设置备份目录
if [ "$backup_type" = "full_inc" ]; then
backup_basedir="$full_back_dir"
else
backup_basedir="$backup_dir"
fi

# 执行增量备份
xtrabackup --backup --target-dir="${back_dir}" --user="$mysql_user" --password="$mysql_password" --host="$mysql_host" --port="$mysql_port" --incremental-basedir="${backup
_basedir}/${last_backup_dir}"

#echo "压缩最新的${backup_type}备份..."
#cd $back_dir
#tar -cvf "${tar_backup}/${timestamp}.tar.gz" $back_dir
#scp ${tar_backup}/${timestamp}.tar.gz $back_ip:$tar_bakup


3.定时任务

0 22 * * 0 sh /root/xtrabackupfull.sh
0 22 * * 1-5 sh /root/xtrabackupinc.sh
50 21 * * 0 rm -rf /home/mysql/back_full/*
50 21 * * 0 rm -rf /home/mysql/back_inc/*



4.全量增量恢复步骤

4.1查看xtrabackup_checkpoints文件

全备开始lsn=0到lsn=28803598
[root@localhost 20240531135933]# pwd
/home/mysql/back_full/20240531135933
[root@localhost 20240531135933]# more xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 28803598
last_lsn = 28803598
flushed_lsn = 28803598
redo_memory = 0
redo_frames = 0

第一次增备 开始lsn=28802751到lsn=28802761
[root@localhost mysql]# cd back_inc/20240531135943/
[root@localhost 20240531135943]# more xtrabackup_checkpoints
backup_type = incremental
from_lsn = 28802751
to_lsn = 28802761
last_lsn = 28802761
flushed_lsn = 28802761
redo_memory = 0
redo_frames = 0

第二次增备 开始lsn=28802761=28803598
[root@localhost 20240531140220]# more xtrabackup_checkpoints
backup_type = incremental
from_lsn = 28802761
to_lsn = 28803598
last_lsn = 28803598
flushed_lsn = 28803598
redo_memory = 0
redo_frames = 0

4.2预备完整备份
xtrabackup --prepare --apply-log-only --target-dir=/home/mysql/back_full/20240531135933

4.3预备增量备份

合并第一个增量备份到完整备份
xtrabackup --prepare --apply-log-only --target-dir=/home/mysql/back_full/20240531135933 --incremental-dir=/home/mysql/back_inc/20240531135943


合并第二个增量备份新的完整备份(注意:最后一次合并我没有加–apply-log-only

xtrabackup --prepare --target-dir=/home/mysql/back_full/20240531135933 --incremental-dir=/home/mysql/back_inc/20240531140220

注意:--apply-log-only 此参数的目的是未提交的事务不回滚,在存在多个增量备份时,准备阶段的最后一个增量备份时,不要加此参数

4.4停数据库备份目录
service mysqld stop

cd /data
cp -r data dababak 备份数据库目录

cd /data/data

rm -rf * 删除原来数据目录文件


4.5恢复最新的完整备份到数据库

xtrabackup --host=127.0.0.1 --user=root --password='mysql' --port=3306 --datadir=/data/data --copy-back --target-dir=/home/mysql/back_full/20240531135933

4.6修改恢复文件权限启动数据库

cd /data
chown -R mysql.mysql data

service mysqld start

恢复完成!


5.异机恢复

新服务器上完成同版本的数据库的安装,数据库目录也是/data/data

已经完成了4.1-4.3的步骤

将合并后的/home/mysql/back_full/20240531135933 全备文件拷贝到新服务器上

rsync -avrP /home/mysql/back_full/20240531135933 root@新服务器ip:/data/mysql/

修改权限

启动数据库

完成迁移!!!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论