当前位置: 首页 > news >正文

xtrabackup备份和还原

Xtrabackup备份原理:
物理备份,不锁表,那么怎么保证现有的数据(备份过程中有尚未提交或已经提交但未同步事务)与复制出来的数据一致呢?
我们知道MySQL修改操作都会先记录在ib_logfile日志文件,再同步到磁盘,这个文件并重复使用。在复制期间会开启一个线程用来监控ib_logfile日志文件,如果有修改就从上次记录的日志序列号(checkpoins)开始复制新增内容到Logfile文件。复制结束后,把logfile事务日志进行回滚,把未完成的事务同步到ibdata1和ibd里面,来保证数据一致性。这与Mysql崩溃后恢复基本操作一样。

测试前准备:
1 、CentOS6.8安装mysql
[root@Paul ~]# yum install -y mysql-server mysql-client

2、在percona官网下载percona-xtrabackup,并安装
[root@Paul ~]# rpm -ivh percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm
3、用RPM包安装mysql默认sql_log_bin是关闭,我们需要开启二进制日志
4、在mysql中创建好数据库和表,并插入好数据以及备份目录。

测试用xtrabackup做完全备份和还原

1、完全备份
[root@Paul backup]# innobackupex --user=root --password=123456 /root/backup
[root@Paul backup]# ls /root/backup/2018-04-23_13-45-50/
backup-my.cnf ibdata1 jiaowu mysql test xtrabackup_binary xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_logfile

备份后生成文件解释:
backup-my.cnf --------------备份命令用到的配置选项信息
xtrabackup_binary ------备份中用到的xtrabackup的可执行文件
xtrabackup_binlog_info ---- mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置
xtrabackup_checkpoints -----备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息

2、准备(prepare)一个完全备份
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可会
含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍
处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事
务至数据文件也使得数据文件处于一致性状态。
[root@Paul ~]# innobackupex --apply-log /root/backup/2018-04-23_13-45-50/

3、使用完全备份恢复数据
[root@Paul backup]# rm -rf /var/lib/mysql/* 删掉数据库所有文件,模拟数据库宕机
[root@Paul backup]# innobackupex --copy-back /root/backup/2018-04-23_13-45-50/
[root@Paul backup]# chown -R mysql.mysql /var/lib/mysql

测试用xtrabackup做一次完全备份,一次差异备份,一次增量备份,然后mysql服务宕
机,通过事务日志做及时点还原。

做完全备份
[root@Paul backup]# innobackupex --user=root --password=123456 /root/backup
[root@Paul backup]# innobackupex --apply-log /root/backup/2018-04-23_14-22-11/

在tutors表中插入数据做增量:
mysql> update tutors set Tname='apple' where TID=1;

做差异备份,以/root/backup/2018-04-23_14-22-11/为基表
[root@Paul backup]# innobackupex --user=root --password=123456 --incremental /root/backup --incremental-basedir=/root/backup/2018-04-23_14-22-11/

再往tutors表中插入数据:
mysql> update tutors set Tname='banana' where TID=2;

做增量备份,以/root/backup/2018-04-23_14-41-15/
[root@Paul backup]# innobackupex --user=root --password=123456 --incremental /root/backup/ --incremental-basedir=/root/backup/2018-04-23_14-41-15/

增量备份的恢复
增量备份的恢复需要有3个步骤

  1. 恢复完全备份
  2. 恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)
  3. 最整理完全备份做恢复,回滚未提交数据

#准备一个全备#
root@Paul backup]# innobackupex --apply-log --redo-only /root/backup/2018-04-23_14-22-11/

#将差异备份应用到全备#
[root@Paul backup]# innobackupex --apply-log --redo-only /root/backup/2018-04-23_14-22-11/ --incremental-dir=/root/backup/2018-04-23_14-41-15/
#将增量备份应用到全备#
[root@Paul backup]# innobackupex --apply-log --redo-only /root/backup/2018-04-23_14-22-11 --incremental-dir=/root/backup/2018-04-23_14-48-22/
#把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据#
[root@Paul backup]# innobackupex --apply-log /root/backup/2018-04-23_14-22-11

#最后做一次增量更新#
mysql> update tutors set Tname='orange' where TID=3;

模拟测试:
记录最后一次增量更新二进制日志位置
[root@Paul 2018-04-23_14-48-22]# more xtrabackup_binlog_info
mysql-bin.000001 517
备份二进制文件
[root@Paul ~]# mysqlbinlog -j 517 /var/lib/mysql/mysql-bin.000001 > /root/backup/mysql-bin.sql
[root@Paul ~]# cp /root/backup/mysql-bin.sql /tmp/

#删掉/var/lib/mysql/中所有文件#
[root@Paul ~]# rm -rf /var/lib/mysql/*

全备恢复
[root@Paul ~]# innobackupex --copy-back /root/backup/2018-04-23_14-22-11
root@Paul ~]# chown -R mysql.mysql /var/lib/mysql
[root@Paul ~]# service mysqld stop
[root@Paul ~]# service mysqld start

二进制及时点还原
mysql> set sql_log_bin=0;
mysql> SOURCE /tmp/mysql-bin.sql
mysql> set sql_log_bin=1

转载于:https://blog.51cto.com/437549/2106843

相关文章:

  • 什么时候使用HashMap?它有什么特点?
  • html中表格td的宽度如何设置
  • 关于form表单提交ajaxForm和ajaxSubmit的用法与区别
  • content属性为中文时导致html页面乱码问题
  • redis简单操作命令
  • To be or not
  • 工信部:全力做强软件和信息技术服务业
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • 不用到处找了,Coding Dojo全攻略奉上
  • 发一个 storm 小分代码 kafka
  • Windows系统基本设置
  • MySQL单机多实例配置实战
  • Java获取泛型T的类型 T.class
  • OSChina 周六乱弹 —— 他曾经是个王者,后来出车祸了
  • 环境搭建,8种基本类型,Static,package和import,log4j
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • java8 Stream Pipelines 浅析
  • Java深入 - 深入理解Java集合
  • java小心机(3)| 浅析finalize()
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 工作手记之html2canvas使用概述
  • 基于axios的vue插件,让http请求更简单
  • 驱动程序原理
  • 深度学习中的信息论知识详解
  • 时间复杂度与空间复杂度分析
  • 实习面试笔记
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (30)数组元素和与数字和的绝对差
  • (9)STL算法之逆转旋转
  • (搬运以学习)flask 上下文的实现
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 微服务 服务保护 自动重试 Polly
  • .NET大文件上传知识整理
  • .net的socket示例
  • .NET分布式缓存Memcached从入门到实战
  • .NET开发人员必知的八个网站
  • .NET连接MongoDB数据库实例教程
  • .net与java建立WebService再互相调用
  • .Net中的设计模式——Factory Method模式
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @Service注解让spring找到你的Service bean
  • @Transaction注解失效的几种场景(附有示例代码)
  • @拔赤:Web前端开发十日谈