MySQL全备增量备份(xtrabackup)

7 篇文章 0 订阅

MySQL通过xtrabackup增量全量备份

安装xbk( XtraBackup8.0开始不支持MySQL8.0之前的版本)
# 下载地址,可以下载rpm等包
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

# dnf或yum安装
dnf install percona-xtrabackup-80-8.0.14-1.el8.x86_64.rpm -y
xbk备份的核心功能
1、针对非innodb引擎表进行锁表备份,copy所有的非inndob的表文件
2、针对innodb引擎表会立即触发CKPT,copy所有inndob表的相关文件(ibdata1,idb,frm),并且将备份过程中产生新的数据变化中的部分redo一起备份。
3、在恢复时,xbk会调用innodb引擎的csr过程,会将数据和redo的lsn追平,然后进行一致性恢复
xbk全量增量备份脚本
#!/bin/bash
# xtrabackup 全量备份及增量备份脚本
# Author: lumia98@vip.qq.com
# xtrabackup8.0开始不支持MySQL8.0以下版本,切记,早期的xtrabackup版本备份命令不一样.
# xtrabackup下载地址: https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

# 数据库备份的存放目录
BaseDir="/backup/mysql-3306"

# 登录数据库的信息
SqlHost="localhost"
SqlUser="root"
SqlPass="123456"
SqlFile="/opt/app/mysql-3306/etc/my.cnf"		   # 多实例备份,单实例可以取消	
SqlSocket="/opt/app/mysql-3306/socket/mysql.sock"  # socket多实例备份必须
# --defaults-file 必须放在第一位
LoginCmd="--defaults-file=${SqlFile} --host=${SqlHost} --user=${SqlUser} --password=${SqlPass}  --socket=${SqlSocket}"

# 备份日期
# 备份后的格式/backup/mysql-3306/2020/1/1 表示2020年第1周,周一
year=`date +%Y` 		 # 年
week_number=`date +%U`   # 第几周
date_of_week=`date +%u`  # 星期几
week_dir=${BaseDir}/${year}/${week_number}  
date_dir=${week_dir}/${date_of_week}		

# 创建目录
[ -d ${week_dir} ] || mkdir -p ${week_dir}
[ -d ${date_dir} ] || mkdir -p ${date_dir}

# 备份
if [ ${date_of_week} -eq 1 ];then
 	 # 周1进行全备份
     xtrabackup ${LoginCmd} --backup --target-dir=${date_dir}
else
 	  # 周2-7,针对前一天的数据做增量备份
      let yesterday=$date_of_week-1
      # 如果没有前一天的备份数据,则退出
      [ -d ${week_dir}/$yesterday ] || { echo Not exist yesterday backup data !!!;exit 1; }
      # 开始增量备份,已昨天的备份数据为增量备份
      xtrabackup ${LoginCmd} --backup --target-dir=${date_dir} --incremental-basedir=${week_dir}/$yesterday
fi
xbk恢复数据
1、先恢复全量备份
# ${week_dir}/1 是全量备份目录
xtrabackup --prepare --apply-log-only --target-dir=${week_dir}/1
# --prepare 表示还原
# --apply-log-only 表示不回滚

2、将每个增量备份恢复到全量备份中,先把周二的数据恢复到全量备份中,以此类推.假如这里回复周一到周五的数据
xtrabackup --prepare --apply-log-only --target-dir=${week_dir}/1 --incremental-dir=${week_dir}/2
xtrabackup --prepare --apply-log-only --target-dir=${week_dir}/1 --incremental-dir=${week_dir}/3
xtrabackup --prepare --apply-log-only --target-dir=${week_dir}/1 --incremental-dir=${week_dir}/4
# 最后一个增量备份恢复不需要--apply-log-only ,需要将回滚的内容也准备进去。
xtrabackup --prepare --target-dir=${week_dir}/1 --incremental-dir=${week_dir}/5

3、数据恢复到MySQL
xtrabackup --copy-back --target-dir=${week_dir}/1

4、授权MySQL数据库目录
chown -R mysql.mysql /database/mysql-3306/data
MySQL忽然崩了恢复
1、先通过上面的 'xbk恢复数据',完成上面的步骤后,找到最后一个增量备份节点,找到binlog的最后计入位置.找到节点中的xtrabackup_binlog_info,如下:
[root@test 5]# more xtrabackup_binlog_info
mysql-bin.000005	196	703e19ab-12a6-11eb-ba43-000c29f7a041:1-2004
2、那么恢复binlog的起始位置就是703e19ab-12a6-11eb-ba43-000c29f7a041:2005-最后
3、终点的binlog位置找到数据库存放目录下的最大序号binlog日志
4、把binlog数据导出到sql,如下:
[root@test ]# mysqlbinlog --skip-gtids --include-gtids='703e19ab-12a6-11eb-ba43-000c29f7a041:2005-最后' /database/mysql-3306/binlog/mysql-bin.000031 > /tmp/binlog.sql
5、然后在MySQL系统中导入,记得关闭binlog记录,请查看MySQL的binlog恢复文件	
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:Uncaught ReferenceError: is not defined at HTMLAnchorElement.onclick 引用\[2\]:今天在用Vue.js写一个图片移入和点击效果时出现了以下错误: Uncaught ReferenceError: is not defined at HTMLAnchorElement.onclick 引用\[3\]:这里找不到deleteBill方法 因为我用的是单引号所以找不到 { field: "caozuo", title: "操作", with: 1, align: "left", halign: "left", formatter: function (v, row, i) {//row为当前行数据 // xbk 新增了一个设置单据类型的操作 var str = "'" + JSON.stringify(row) + "'";//str用来回显 var operStr = '<div class="edit_del" style="user-select: none;">' + '<span class="fr-table-modify fr-theme-color" style="vertical-align:middle;line-height: 18px;" onclick=editBusi("update",' + str + ")>修改</span>" + '<span class="fr-table-del fr-theme-color" style="vertical-align:middle;top:0" onclick=deleteBill(' + row.busi_type_id + ')>删除</span>' + "</div>"; return operStr; }, }, 问题:VM24395 main.html:1 Uncaught ReferenceError: selectCl is not defined at HTMLAnchorElement.onclick 回答: 这个错误提示是因为在HTMLAnchorElement的onclick事件中引用了一个未定义的函数selectCl。\[1\]这种错误通常是由于函数名拼写错误、函数未被定义或者函数定义在其他作用域中导致的。在你提供的引用中,也有类似的错误,比如在Vue.js代码中引用了一个未定义的变量isShow和一个未定义的函数deleteBill。\[2\]\[3\]要解决这个问题,你需要确保所引用的函数或变量已经正确定义,并且在当前作用域中可见。你可以检查函数或变量的拼写是否正确,并确保它们在正确的位置被定义。如果函数或变量定义在其他作用域中,你可能需要通过适当的方式将其引入到当前作用域中。 #### 引用[.reference_title] - *1* *2* [Uncaught ReferenceError: is not defined at HTMLAnchorElement.onclick](https://blog.csdn.net/shangguanliubei/article/details/109893583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Uncaught ReferenceError: <function> is not defined at HTMLSpanElement.onclick](https://blog.csdn.net/ping_lvy/article/details/125507982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值