xtrabackup是由percona提供的mysql备份工具,它是一款物理备份工具,通过连接数据库把数据库的数据备份出来。对于innodb存储引擎其支持全量备份和增量备份。对于myisam存储引擎只支持增量备份。因为xtrabackup对innodb的增量备份是基于表空间的LSN进行的,所谓LSN即:表空间分成多个数据块,每个数据块都有相应的序列号,当数据块数据发生变化则更新序列号。全量备份即备份所有数据块,则增量备份则基于全量备份最后一个数据块的序列号到最新的数据块序列号进行备份。因为myisam不支持表空间,所以不能进行增量备份。

xtrabackup备份出来的数据包括:

  • 表空间
  • 数据文件
  • 二进制日志
  • 事务日志

    ...

xtrabackup在进行数据恢复之前需要注意如下要点:

  1. 如果有增量备份则需要在恢复之前先进行增量备份和全备份的合并再恢复;
  2. 如果是支持事务的表的备份,则恢复之前需要先进行事务日志的回滚和提交操作;
  3. 如果是多个连续的备份操作,则只需要提交事务日志,不需要回滚,只有在全部备份操作合成之后再进行事务的回滚;

此文通过详细的实验步骤来演示xtrabackup的使用方法。

实验步骤

  1. 一台centos7虚拟机,安装mariadb-5.5.52版本的数据库,首先通过sql脚本导入hellodb测试库,其包括一个students数据表,此实验在students表中进行操作,命令如下:

    mysql -uroot < hellodb.sql
  2. 安装xtrabackup,可以从官方网站下载安装包,然后通过yum进行安装,下载站点为:https://www.percona.com/downloads/XtraBackup/LATEST/,此处不再演示安装过程
  3. xtrabackup的主要命令为innobackupex,通过innobackupex --help或者man手册可以获取到帮助信息;
  4. 数据库已经导入,此时可以进行数据库的备份操作,先进行数据库的全量备份和恢复:
    1. 首先确保数据库已经开启二进制日志,通过show global variables like 'log_bin';命令可以看到是否已经开启,通过show binary logs;可以看到目前正在使用的二进制日志是哪一个;
    2. 通过xtrabackup进行备份,数据备份到/data/backup目录下,备份完成会在指定目录下生成一个以当前时间命名的文件夹:

      innobackupex -u root /data/backup
    3. 文件夹内容如下:

      • xtrabackup_binlog_info:记录二进制日志的内容;
      • xtrabackup_checkpoints:记录备份类型,开始和结束的lsn编号等备份信息;
      • xtrabackup_info:记录更详细的备份信息,如是否为所有库备份,是否压缩,备份执行的命令等信息;
      • xtrabackup_logfile:记录的是事务日志,为二进制文件,不可查看;
    4. 此时就备份成功了,然后演示数据库的恢复操作。注意:恢复之前需要首先停止数据库服务:

      innobackupex --apply-log 2017-07-13_21-02-07/ #首先进行事务日志的提交和回滚 innobackupex --copy-back 2017-07-13_21-02-07/ #进行数据恢复,会自动把数据恢复到mysql的数据目录下
    5. 恢复成功之后所有已经恢复数据的属主和属组都是root用户,需要修改成mysql用户才能登陆数据库;
    6. 此时登陆数据库即可看到所有数据都已经恢复了。
  5. 这次演示增量备份和恢复操作:
    1. 往数据库中插入几条新的信息,然后进行数据库的增量备份;
    2. 通过如下命令进行数据库的增量备份,备份成功之后还是会在/data/backup目录下生成一个新的以时间命名的文件夹:

      innobackupex -u root -p 1234567a --incremental --incremental-basedir=/data/backup/2017-07-13_21-07-23/ /data/backup/
    3. 然后停掉数据库服务,删除数据库目录下的所有数据,进行数据恢复操作,步骤如下:

      innobackupex --apply-log --redo-only 2017-07-13_22-16-19/ #进行全量备份的事务提交,但是不回滚未提交事务,因为未提交事务可能在下次的增量备份中提交 innobackupex --apply-log --redo-only 2017-07-13_22-16-19/ --incremental-dir=2017-07-13_22-18-34/ #进行增量备份和全备份的合成已经事务提交工作 innobackupex --apply-log 2017-07-13_22-16-19/ #对于全备份也没有完成的事务进行回滚操作 innobackupex --copy-back 2017-07-13_22-16-19/ #此时采用全备份即可恢复数据,不再需要增量备份,因为已经进行了备份的合成操作
    4. 同样需要修改恢复完成数据的属主和属组,然后登陆数据库即可看到完整是数据,此时实验演示完成。

      注意:

      • 生产环境建议二进制日志和数据文件分开放在不同磁盘,因为二进制文件可以用来进行时间点恢复,可以尽可能保证丢失更少的数据,如果二进制文件也丢失,则可能会丢失大量数据;
      • 在数据恢复操作完成之后一定要再进行一次数据的全备份,保证数据安全;

xtrabackup备份mysql数据库的使用方法的更多相关文章

  1. 利用xtrabackup备份mysql数据库

    利用xtrabackup备份mysql数据库 一.安装1.直接下载二进制文件wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2. ...

  2. 使用Xtrabackup 备份mysql数据库

    ##创建逻辑卷 [root@node1 ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully create ...

  3. 使用xtrabackup备份mysql数据库

    数据在一个企业里非常重要,因此经常需要备份数据库,确保出线故障时,可以立刻恢复数据到最新状态,目前常见的备份工具有mysqldump和xtrabackup,数据量较少时可以使用mysqldump,但随 ...

  4. xtrabackup备份mysql数据库方法

    1.安装 xtrabackup 工具包 下载percona yum源 https://www.percona.com/redir/downloads/percona-release/redhat/pe ...

  5. 配置xtrabackup备份mysql数据库

    下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/ 为了方便起见本次安装使用yum源安装方式 1    安装yum源:yum insta ...

  6. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)     文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 inno ...

  7. Linux 每天自动备份mysql数据库的方法

    Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载   linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤.   /usr/bin为my ...

  8. linux下使用crontab定时备份MYSQL数据库的方法:

    摘要 linux下使用crontab定时备份MYSQL数据库的方法: 只需按照下面3步做,一切都在你的掌控之下: 第一步:在服务器上配置备份目录代码: ------------------------ ...

  9. Linux服务器自动备份压缩MySQL数据库的实用方法

    <?php$server = 'localhost'; $link = mysql_connect($server, 'root', 'haven'); $result = mysql_quer ...

随机推荐

  1. CentOS上安装NodeJs

    (1)参照:http://www.cnblogs.com/zhangqingsh/archive/2013/04/15/3022583.html  安装Python2.7 (2)安装Nodejs yu ...

  2. Sampling Distributions and Central Limit Theorem in R(转)

    The Central Limit Theorem (CLT), and the concept of the sampling distribution, are critical for unde ...

  3. 关于用css实现文本和图片垂直水平居中

    关于用css实现文本和图片垂直水平居中   一直相信好记性不如烂笔头,最近遇到很多用到垂直居中的,整理一下以便日后查阅. 一.文本垂直水平居中 1.水平居中: 文字水平居中没什么好说的,用text-a ...

  4. js添加多个样式属性cssText

    document.getElementById("box").style.cssText += ";color:red;font-size:20px"; 代码分 ...

  5. Postgres Linux 维护 随笔1(启动篇)

    关于postgres 起停操作随笔 Linux 环境下,对Postgres 起停常用代码 Postgres 启动 : pg_ctl start Postgres 停止 : pg_ctl stop Po ...

  6. Mybatis配置(一)

    1.导入Mybatis包 2.得到SqlSession来访问数据库 /** * 访问数据库 */public class DBAccess {          public SqlSession g ...

  7. JavaScript中的数组

    数组 (1).数组的定义 数组是值的有序集合 javascript数组是无类型的:数组元素可以是任意类型,并且同一个数组的不同元素也可能有不同的类型. 每个值叫做一个元素,而每个元素在数组中有一个位置 ...

  8. Vulkan Tutorial 17 Rendering and presentation

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Setup 这一章节会把之前的所有内容进行整合.我们将会编写drawFrame函数, ...

  9. Asp.net MVC 如何对所有用户输入的字符串字段做Trim处理

    经常需要对用户输入的数据在插入数据库或者判断之前做Trim处理,针对每个ViewModel的字段各自做处理是我们一般的想法.最近调查发现其实也可以一次性实现的. MVC4.6中实现方式 1,实现IMo ...

  10. C# servicestack.redis 互通 java jedis

    拥抱变化,如今也走上了.net/java通吃的时代,下面就讲讲如何让.net/java都能正常访问分片的redis吧. 有几个关键点:一致性环哈希.哈希算法.序列化.反序列化 后两个都比较直接,只要选 ...