使用xtrabackup备份mysql数据库(全备,增量, 差异备份)

使用xtrabackup备份mysql数据库(全备,增量, 差异备份)

1、数据库备份 —xtrabackup

​ 创建的目录

[root@localhost ~]# mkdir -p /xtrabackup/{full,increment,difference}

(1)完全备份
①数据的备份

[root@localhost ~]# cd /xtrabackup/full
##语法:innobackupex --user=数据库用户名(root或授权用户) --password=数据库密码  备份数据要存的目录
[root@localhost full]# innobackupex --user=root --password=Mysql..1113  /xtrabackup/full
[root@localhost full]# ls    #备份的数据以时间戳创建备份目录
2019-11-15_21-50-19

#对数据库进行更改,可在进行备份,同上。

②数据的恢复(–redo-only 表示只回滚已提交的事务, 忽略未提交的事务)
步骤(6步):停止数据库 —> 清理环境 —> 重演回滚 —> 恢复数据 —> 修改权限 —> 启动数据库

##语法:innobackupex --apply-log --redo-only /要恢复的版本目录/     #重演回滚
##语法:innobackupex --copy-back --redo-only /要恢复的版本目录/     #恢复数据
[root@localhost full]# systemctl stop mysqld
[root@localhost full]# rm -rf /var/lib/mysql/*
[root@localhost full]# innobackupex --apply-log --redo-only /要恢复的版本目录/ 
[root@localhost full]# innobackupex --copy-back --redo-only /要恢复的版本目录/  
[root@localhost full]# chown mysql.mysql -R /var/mysql/mysql/
[root@localhost full]# systemctl start mysqld
## 进数据库查看即可看到恢复的数据

(2)增量备份(在完全备份的基础上做)
①数据的备份

[root@localhost ~]# cd /xtrabackup/increment
##语法:innobackupex --user=数据库用户名(root或授权用户) --password=数据库密码  --increateal 增量备份数据存放的目录 --incremental-basedir=/基于的完全备份数据目录/

[root@localhost increment]# innobackupex --user=root --password=Mysql..1113 --incremental /xtrabackup/increment  --incremental-basedir=/xtrabackup/full/2019-11-15_21-50-19
[root@localhost increment]# ls 
2019-11-15_22-03-27
## 在数据库进行修改并进行第二次增量备份(基于上一次增量备份而不是完全备份)
[root@localhost increment]# innobackupex --user=root --password=Mysql..1113 --incremental /xtrabackup/increment  --incremental-basedir=/xtrabackup/increment/2019-11-15_22-03-27
[root@localhost increment]# ls 
2019-11-15_22-03-27  2019-11-15_22-13-14 
## 在数据库进行修改并进行第三次增量备份(基于上一次增量备份而不是完全备份)
[root@localhost increment]# innobackupex --user=root --password=Mysql..1113 --incremental /xtrabackup/increment  --incremental-basedir=/xtrabackup/increment/2019-11-15_22-13-14 
[root@localhost increment]# ls 
2019-11-15_22-03-27  2019-11-15_22-13-14  2019-11-15_22-16-42

②数据的恢复(在此我们操作回滚到第二次增量备份的数据)
步骤(6步):停止数据库 —> 清理环境 —> 重演回滚 —> 恢复数据 —> 修改权限 —> 启动数据库

##语法:innobackupex --apply-log --redo-only /完全备份的目录/ --incremental-dir=/增量的版本依次回滚/    #重演回滚
##语法:innobackupex --copy-back --redo-only /完全备份的目录/     #恢复数据

[root@localhost increment]# systemctl stop mysqld
[root@localhost increment]# rm -rf /var/lib/mysql/*
[root@localhost increment]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-11-15_21-50-19  #先回滚到完全备份 
[root@localhost increment]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-11-15_21-50-19 --incremental-dir=/xtrabackup/increment/2019-11-15_22-03-27  #再回滚到第一次的增量备份
[root@localhost increment]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-11-15_21-50-19 --incremental-dir=/xtrabackup/increment/2019-11-15_22-13-14  #再回滚到第二次的增量备份
[root@localhost increment]# innobackupex --copy-back --redo-only /xtrabackup/full/2019-11-15_21-50-19    #恢复数据
[root@localhost increment]# chown mysql.mysql -R /var/mysql/mysql/
[root@localhost increment]# systemctl start mysqld
## 进数据库查看即可看到恢复的数据

(3)差异备份
①数据的备份

[root@localhost ~]# cd /xtrabackup/difference
##语法:innobackupex --user=数据库用户名(root或授权用户) --password=数据库密码  --increateal 差异备份数据存放的目录 --incremental-basedir=/基于的完全备份数据目录/

[root@localhost difference]# innobackupex --user=root --password=Mysql..1113 --incremental /xtrabackup/increment --incremental-basedir=/xtrabackup/full/2019-11-15_21-50-19
[root@localhost difference]# ls 
2019-11-15_22-43-21
## 在数据库进行修改并进行第二次差异备份(基于完全备份)
[root@localhost difference]#  innobackupex --user=root --password=Mysql..1113 --incremental /xtrabackup/increment --incremental-basedir=/xtrabackup/full/2019-11-15_21-50-19
[root@localhost difference]# ls 
2019-11-15_22-43-21  2019-11-15_22-45-14 
## 在数据库进行修改并进行第三次增量备份(基于完全备份)
[root@localhost difference]# innobackupex --user=root --password=Mysql..1113 --incremental /xtrabackup/increment --incremental-basedir=/xtrabackup/full/2019-11-15_21-50-19
[root@localhost difference]# ls 
2019-11-15_22-43-21  2019-11-15_22-45-14  2019-11-15_22-50-37

②数据的恢复(在此我们操作回滚到第二次差异备份的数据)
步骤(6步):停止数据库 —> 清理环境 —> 重演回滚 —> 恢复数据 —> 修改权限 —> 启动数据库

##语法:innobackupex --apply-log --redo-only /要恢复的版本目录/ --incremental-dir=/要恢复到的差异版本/    #重演回滚
##语法:innobackupex --copy-back --redo-only /完全备份的目录/     #恢复数据

[root@localhost difference]# systemctl stop mysqld
[root@localhost difference]# rm -rf /var/lib/mysql/*
[root@localhost difference]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-11-15_21-50-19  #先回滚到完全备份 
[root@localhost difference]# innobackupex --apply-log --redo-only /xtrabackup/full/2019-11-15_21-50-19 --incremental-dir=/xtrabackup/increment/2019-11-15_22-45-14  #再回滚到要恢复的差异备份
[root@localhost difference]# innobackupex --copy-back --redo-only /xtrabackup/full/2019-11-15_21-50-19    #恢复数据
[root@localhost difference]# chown mysql.mysql -R /var/mysql/mysql/
[root@localhost difference]# systemctl start mysqld
## 进数据库查看即可看到恢复的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个自动化全备增量备份MySQL8的脚本,基于您之前的要求进行修改: ``` #!/bin/bash # 设置备份相关的变量 MYSQL_USER="your_username" MYSQL_PASSWORD="your_password" BACKUP_DIR="/path/to/backup/directory" DATE=$(date +%F_%H-%M-%S) FULL_BACKUP_INTERVAL=7 # 满备份间隔(天) LAST_FULL_BACKUP=$(find $BACKUP_DIR -maxdepth 1 -name "full_backup*" | sort -nr | head -n 1) # 上一次的全量备份 INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/incremental_backup_$DATE" LATEST_INCREMENTAL_BACKUP=$(find $BACKUP_DIR -maxdepth 1 -name "incremental_backup_*" | sort -nr | head -n 1) # 最新的增量备份 # 创建增量备份目录 mkdir -p $INCREMENTAL_BACKUP_DIR # 运行增量备份命令 if [ -z "$LAST_FULL_BACKUP" ]; then # 如果没有全量备份,则进行全量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR else # 如果已有全量备份,则进行增量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR --incremental-basedir=$LATEST_INCREMENTAL_BACKUP fi # 判断是否需要进行全量备份 if [ -z "$LAST_FULL_BACKUP" ] || [ $(expr $(date +%s) - $(date -d $(basename $LAST_FULL_BACKUP | cut -d '_' -f 3) +%s)) -ge $(expr $FULL_BACKUP_INTERVAL \* 86400) ]; then # 如果没有全量备份或者距离上次全量备份已经超过满备份间隔,则进行全量备份 FULL_BACKUP_DIR="$BACKUP_DIR/full_backup_$DATE" mkdir -p $FULL_BACKUP_DIR xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$FULL_BACKUP_DIR fi # 删除过期的备份 find $BACKUP_DIR -maxdepth 1 -name "full_backup*" -mtime +$FULL_BACKUP_INTERVAL -exec rm -rf {} \; find $BACKUP_DIR -maxdepth 1 -name "incremental_backup_*" -mtime +$FULL_BACKUP_INTERVAL -exec rm -rf {} \; ``` 该脚本与之前的脚本基本相同,但增加了一个判断来确定是运行全备份还是增量备份: ``` if [ -z "$LAST_FULL_BACKUP" ]; then # 如果没有全量备份,则进行全量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR else # 如果已有全量备份,则进行增量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR --incremental-basedir=$LATEST_INCREMENTAL_BACKUP fi ``` 请将`your_username`和`your_password`替换为您的MySQL用户名和密码,将`/path/to/backup/directory`替换为您希望存储备份的目录。运行脚本时,将其保存为`.sh`文件并添加执行权限,然后在命令行中运行即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值