Xtrabackup是一个开源的免费的热备工具,在Xtrabackup包中主要有Xtrabackup和innobackupex两个工具。其中Xtrabackup只能备份InnoDB和XtraDB两种引擎; innobackupex则是封装了Xtrabackup,同时增加了备份MyISAM引擎的功能。

  Xtrabackup备份时不能备份表结构、触发器等等,也不能智能区分.idb数据文件。另外innobackupex还不能完全支持增量备份,需要和xtrabackup结合起来实现全备的功能。

(1).安装xtrbackup

1)下载安装包

  网址是https://www.percona.com/downloads/,然后网页查找Xtrabackup,下载自己需要的版本,就是下载速度有点慢。我这里使用的是2.4.14版本。

  然后下载依赖包,网址是http://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm

  这两个可以下载好上传到CentOS服务器,也可以使用wget直接在服务器上下载。

2)解压安装

[root@youxi1 ~]# ls
anaconda-ks.cfg mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
libev-4.04-2.el6.x86_64.rpm Percona-XtraBackup-2.4.14-ref675d4-el7-x86_64-bundle.tar
Mysql
[root@youxi1 ~]# rpm -ivh libev-4.04-2.el6.x86_64.rpm
警告:libev-4.04-2.el6.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID 66534c2b: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:libev-4.04-2.el6 ################################# [100%]
[root@youxi1 ~]# tar -xf Percona-XtraBackup-2.4.14-ref675d4-el7-x86_64-bundle.tar
[root@youxi1 ~]# ls
anaconda-ks.cfg Percona-XtraBackup-2.4.14-ref675d4-el7-x86_64-bundle.tar
libev-4.04-2.el6.x86_64.rpm percona-xtrabackup-24-2.4.14-1.el7.x86_64.rpm
Mysql percona-xtrabackup-24-debuginfo-2.4.14-1.el7.x86_64.rpm
mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar percona-xtrabackup-test-24-2.4.14-1.el7.x86_64.rpm
[root@youxi1 ~]# yum -y install percona-xtrabackup-24-2.4.14-1.el7.x86_64.rpm  //这里用yum安装,因为还有其他的依赖包

3)配置文件

  修改配置文件/etc/my.cnf,保证[mysqld]模块存在参数datadir=/var/lib/mysql(指向数据目录),因为xtrbackup是根据/etc/my.cnf配置文件来获取需要备份的文件。然后重启mysqld。

(2).xtrbackup的使用

  一般使用的是innobackupex脚本,因为innobackupex是perl脚本对xtrbackup的封装和功能扩展。

1)用户权限说明

  在备份数据库时会涉及到两个用户:系统用户与数据库内部的用户。

  系统用户需要在datadir(配置文件内设置的目录)上具有读写执行权限(rwx)。而数据库内部用户需要:RELOAD和LOCK TABLES权限,为了执行FLUSH TABLES WITH READ LOCK;REPLICATION CLIENT权限,为了获取binary log(二进制日志文件)位置;CREATE TABLESPACE权限,为了导入表,用户表级别的恢复;SUPER权限,为了在slave环境下备份用来启动和关闭slave线程。

2)常用命令格式和常用参数

  命令格式:

  innobackupex [参数] [目的地址|源地址]

  常用参数:

--user=[数据库用户]    以什么用户身份进行操作
--password=[密码] 数据库用户的密码
--port=[端口号] 数据库的端口号,默认3306
--stream=[tar|xbstream]  打包(数据流)
--defaults-file=[配置文件]  指定默认配置文件,默认读取/etc/my.cnf
--no-timestamp  不创建时间戳文件,而改用目的地址(可以自动创建)
--copy-back  备份还原的主要选项
--incremental  使用增量备份,默认使用的完整备份
--incremental-basedir=[地址]  与--incremental选项联合使用,该参数指定上一级备份的地址来做增量备份

3)完整备份和还原

  完整备份

[root@youxi1 ~]# innobackupex --user=root --password=123456 ./db_backup/  //这个会有大量输出信息
[root@youxi1 ~]# innobackupex --user=root --password=123456 ./db_backup/ 2>>./db_backup/backup.log  //如果不想要输出信息,可以将输出信息重定向到指定文件或黑洞文件中
[root@youxi1 ~]# ls ./db_backup/
2019-06-16_15-49-44 2019-06-16_15-51-23 backup.log
[root@youxi1 ~]# ls ./db_backup/2019-06-16_15-49-44/
backup-my.cnf ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
ib_buffer_pool mysql sys xtrabackup_info
[root@youxi1 ~]# innobackupex --user=root --password=123456 --no-timestamp ./db_backup/test/ 2>>./db_backup/backup.log  //不使用时间戳创建目录,可自动创建目的地址
[root@youxi1 ~]# ls ./db_backup/
2019-06-16_15-49-44 2019-06-16_15-51-23 backup.log test
[root@youxi1 ~]# ls ./db_backup/test/
backup-my.cnf ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
ib_buffer_pool mysql sys xtrabackup_info

  还原,注意:innobackupex -copy-back不会覆盖已存在的文件。而且还原时需要先关闭服务,如果服务是启动的,那么就不能还原到datadir

[root@youxi1 ~]# systemctl stop mysqld
[root@youxi1 ~]# rm -rf /var/lib/mysql/*  //危险操作,请在测试环境测试
[root@youxi1 ~]# innobackupex --copy-back ./db_backup/2019-06-16_15-49-44/ 2>>./db_backup/copyback.log
[root@youxi1 ~]# ll /var/lib/mysql
总用量 12324
-rw-r----- 1 root root 292 6月 16 17:08 ib_buffer_pool
-rw-r----- 1 root root 12582912 6月 16 17:08 ibdata1
drwxr-x--- 2 root root 4096 6月 16 17:08 mysql
drwxr-x--- 2 root root 8192 6月 16 17:08 performance_schema
drwxr-x--- 2 root root 8192 6月 16 17:08 sys
-rw-r----- 1 root root 423 6月 16 17:08 xtrabackup_info
[root@youxi1 ~]# chown -R mysql:mysql /var/lib/mysql  //重新授权,否则mysqld无法启动
[root@youxi1 ~]# systemctl start mysqld
[root@youxi1 ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

4)增量备份和还原

  增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN<日志序列号>之后的所有数据页。

  查看完整备份的LSN

[root@youxi1 ~]# cat ./db_backup/2019-06-16_15-49-44/xtrabackup_checkpoints
backup_type = full-backuped  //代表完整备份
from_lsn = 0
to_lsn = 2525919
last_lsn = 2525928
compact = 0
recover_binlog_info = 0
flushed_lsn = 2525928

  创建一些数据,然后以2019-06-16_15-49-44时间戳创建第一个增量备份,并查看LSN

[root@youxi1 ~]# mysql -uroot -p123456
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec) mysql> use test_db;
Database changed
mysql> create table user_tb(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec) mysql> insert into user_tb values(1,'zhangsan');
Query OK, 1 row affected (0.00 sec) mysql> exit
Bye
[root@youxi1 ~]# innobackupex -uroot -p123456 --incremental --incremental-basedir=./db_backup/2019-06-16_15-49-44/ ./db_backup/ 2>>./db_backup/backup.log
[root@youxi1 ~]# ls db_backup/
2019-06-16_15-49-44 2019-06-16_15-51-23 2019-06-16_17-26-54 backup.log copyback.log test
[root@youxi1 ~]# cat db_backup/2019-06-16_17-26-54/xtrabackup_checkpoints
backup_type = incremental  //表示增量备份
from_lsn = 2525919
to_lsn = 2530689
last_lsn = 2530698
compact = 0
recover_binlog_info = 0
flushed_lsn = 2530698

  再创建一些数据,以上一个增量备份创建新的增量备份,并查看LSN

[root@youxi1 ~]# mysql -u root -p123456
mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> insert into user_tb values(2,'lisi');
Query OK, 1 row affected (0.00 sec) mysql> exit
Bye
[root@youxi1 ~]# innobackupex --user=root --password=123456 --incremental --incremental-basedir=db_backup/2019-06-16_17-26-54/ ./db_backup/ 2>>./db_backup/backup.log
[root@youxi1 ~]# ls db_backup/
2019-06-16_15-49-44 2019-06-16_17-26-54 backup.log test
2019-06-16_15-51-23 2019-06-16_17-40-13 copyback.log
[root@youxi1 ~]# cat db_backup/2019-06-16_17-40-13/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2530689
to_lsn = 2530892
last_lsn = 2530901
compact = 0
recover_binlog_info = 0
flushed_lsn = 2530901

  增量备份的还原就比较麻烦了:

    第一步,从完整备份一步步升上来。首先是完整备份,innobackupex --apply-log --redo-only [完整备份的地址]。接着是除了想要还原到的增量备份,都需要innobackupex --apply-log --redo-only [完整备份的地址] --incremental-dir=[第1次到第n-1次增量备份地址],一个个执行过去。然后想要还原的增量备份innobackupex --apply-log [完整备份的地址] --incremental-dir=[第n次增量备份地址]。这时所有需要的日志就到了完整备份目录下,最后执行innobackupex --apply-log [完整备份的地址],将未完成的日志执行。

    第二步、停止mysqld,恢复数据,恢复目录及文件权限,启动mysqld,检查是否正常。

  还原实例:

[root@youxi1 ~]# innobackupex --apply-log --redo-only db_backup/2019-06-16_15-49-44/ 2>>db_backup/copyback.log
[root@youxi1 ~]# innobackupex --apply-log --redo-only db_backup/2019-06-16_15-49-44/ --incremental-dir=db_backup/2019-06-16_17-26-54/ 2>>db_backup/copyback.log
[root@youxi1 ~]# innobackupex --apply-log db_backup/2019-06-16_15-49-44/ --incremental-dir=db_backup/2019-06-16_17-40-13/ 2>>db_backup/copyback.log
[root@youxi1 ~]# innobackupex --apply-log db_backup/2019-06-16_15-49-44/ 2>>db_backup/copyback.log
[root@youxi1 ~]# systemctl stop mysqld
[root@youxi1 ~]# rm -rf /var/lib/mysql/*  //危险操作
[root@youxi1 ~]# innobackupex --copy-back db_backup/2019-06-16_15-49-44/ 2>db_backup/copyback.log
[root@youxi1 ~]# chown -R mysql:mysql /var/lib/mysql/
[root@youxi1 ~]# systemctl start mysqld
[root@youxi1 ~]# mysql -uroot -p123456
mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from user_tb;
+------+----------+
| id | name |
+------+----------+
| 1 | zhangsan |
| 2 | lisi |
+------+----------+
2 rows in set (0.00 sec)

5)--stream选项,数据流压缩

  注意:使用--stream选项时,会输出打包的数据流,并不会直接生成打包文件,此时需要使用重定向或其他命令对数据流进行处理。

  例如1:使用重定向生成压缩文件

[root@mhaSpareMaster22 ~]# mkdir /db_backup
//将标准输出重定向为tar文件,将标准错误重定向到日志文件
[root@mhaSpareMaster22 ~]# innobackupex --databases=test_db --user=root --password=123456 --stream=tar /db_backup/
>/db_backup/`date +%F`.tar 2> /db_backup/backup.log
[root@mhaSpareMaster22 ~]# ls /db_backup/
2019-09-29.tar backup.log
[root@mhaSpareMaster22 ~]# cd /db_backup/
//注意:解压的时候是散的,没有文件夹
[root@mhaSpareMaster22 db_backup]# tar xf 2019-09-29.tar
[root@mhaSpareMaster22 db_backup]# ls
2019-09-29.tar ib_buffer_pool xtrabackup_binlog_info xtrabackup_logfile
backup.log ibdata1 xtrabackup_checkpoints
backup-my.cnf test_db xtrabackup_info

  例如2:使用ssh和cat组合命令,直接备份到其他服务器上

[root@mhaSpareMaster22 ~]# ssh-keygen
[root@mhaSpareMaster22 ~]# ssh-copy-id 192.168.5.70
[root@mhaSpareMaster22 ~]# innobackupex --databases=test_db --user=root --password=123456 --stream=tar 2> /db_backup/backup.log
| ssh 192.168.5.70 "cat - > /`date +%F`.tar "
[root@mhaSpareMaster22 ~]# ssh 192.168.5.70
[root@Zabbix70 ~]# ls /  //可以看到确实存在打包文件了
2019-09-29.tar boot etc lib media opt root sbin sys usr
bin ceph dev home lib64 mnt proc run srv tmp var
[root@Zabbix70 ~]# mkdir /db
[root@Zabbix70 /]# tar xf /2019-09-29.tar -C /db/  //解压下来看看
[root@Zabbix70 /]# ls /db
backup-my.cnf ibdata1 xtrabackup_binlog_info xtrabackup_info
ib_buffer_pool test_db xtrabackup_checkpoints xtrabackup_logfile
[root@Zabbix70 ~]# exit
登出
Connection to 192.168.5.70 closed.

  例如3:使用gzip再压缩一下

[root@mhaSpareMaster22 ~]# rm -rf /db_backup/*
[root@mhaSpareMaster22 ~]# innobackupex --databases=test_db --user=root --password=123456 --stream=tar /db_backup/
2> /db_backup/backup.log | gzip > /db_backup/`date +%F`.tar.gz
[root@mhaSpareMaster22 ~]# ls /db_backup/
2019-09-29.tar.gz backup.log
[root@mhaSpareMaster22 ~]# tar zxf /db_backup/2019-09-29.tar.gz -C /db_backup/
[root@mhaSpareMaster22 ~]# ls /db_backup/  //可以看到也能正常解压
2019-09-29.tar.gz ib_buffer_pool xtrabackup_binlog_info xtrabackup_logfile
backup.log ibdata1 xtrabackup_checkpoints
backup-my.cnf test_db xtrabackup_info

  

Mysql备份工具Xtrabackup的更多相关文章

  1. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  2. MySQL备份工具之mysqldump使用

    MySQL备份工具之mysqldump使用说明 一.备份分类 根据能否停用数据库,将备份类型分为: 1. 冷备:数据库服务停止后备份 2. 温备:只能对数据库进行读操作,不能进行写操作 3. 热备:在 ...

  3. mysql备份工具innobackupex,xtrabackup-2.1的原理和安装

    mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1. ...

  4. Mysql备份工具xtraback全量和增量测试

    Mysql备份工具xtraback全量和增量测试   xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表) 官方网址http:// ...

  5. Mysql备份工具比较

    Mysql备份工具比较 大 | 中 | 小 [ 2012/12/25 12:10 | by Sonic ] 1. 使用automysqlbackup http://sourceforge.net/pr ...

  6. mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)

    简介 xtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...

  7. mysql数据库备份工具xtrabackup

    1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介:  Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...

  8. shell编写mysql备份工具

    如需转载,请经本人同意. 这是之前写的一个备份脚本,调用的备份工具是xtrabackup 编写思路是:每周一全备份,备份后提取lSN号,对备份文件进行压缩,其余时候在LSN的基础上进行增量备份,并对3 ...

  9. MySQL备份恢复工具Xtrabackup

    参考文档https://www.cnblogs.com/youkanyouxiao/p/8335173.html Xtrabackup介绍  Xtrabackup是由percona开源的免费数据库热备 ...

随机推荐

  1. TOMCAT 请求HTTP原理

    一.Tomcat是什么?Tomcat是一个Web应用服务器,同时也是一个Servlet/JSP容器.Tomcat作为Servlet容器,负责处理客户端请求,把请求传送给Servlet,并将Servle ...

  2. sql server if exists和 if not exists 的关键字用法

    if exists和if not exists关键字用法   1.介绍  if not exists 即如果不存在,if exists 即如果存在 2.使用  a.判断数据库不存在时  if not ...

  3. sql server in和exists 的区别

    如图,现在有两个数据集,左边表示#tempTable1,右边表示#tempTable2.现在有以下问题: 1.求两个集的交集? 2.求tempTable1中不属于集#tempTable2的集?   先 ...

  4. bzoj 4319: cerc2008 Suffix reconstruction 贪心

    如果字符集无限大的话直接按照 $sa$ 的顺序依次填即可. 由于字符集非常小,所以要尽量填相同的字符. 我们知道 $sa$ 数组,也就知道了 $rank$ 数组. 那么考虑添加排名为 $i$ 的字符: ...

  5. 三个方法(apply、call、bind)

    一.apply()和call() 方法中如果没传入参数,或者是null,那么调用该方法的函数对象中的this就是默认的window <script> function f1(x,y){ c ...

  6. 斐波那契数列 矩阵乘法优化DP

    斐波那契数列 矩阵乘法优化DP 求\(f(n) \%1000000007​\),\(n\le 10^{18}​\) 矩阵乘法:\(i\times k\)的矩阵\(A\)乘\(k\times j\)的矩 ...

  7. LOJ2541. 「PKUWC2018」猎人杀 [概率,分治NTT]

    传送门 思路 好一个神仙题qwq 首先,发现由于一个人死之后分母会变,非常麻烦,考虑用某种方法定住分母. 我们稍微改一改游戏规则:一个人被打死时只打个标记,并不移走,也就是说可以被打多次但只算一次.容 ...

  8. LG5492 [PKUWC2018]随机算法

    题意 有一种贪心求最大独立集的算法: 随机一个排列 按顺序加入独立集,如果一个点能加入,就加入\({S}\) 给出一张图,问得出正确答案的概率. \(n \leq 20\) 传送门 思路 用 \(dp ...

  9. (转)外网如何访问docker容器

    借鉴:https://blog.csdn.net/lvshaorong/article/details/69950694 Docker容器非常轻量,系统开销非常少,比VMware或者VirtualBo ...

  10. Js 之生成二维码插件(jquery.qrcode.js)

    一.下载 链接:https://pan.baidu.com/s/1cMjaCYQ_buZNT5XRRjuNTA提取码:myqm 二.效果图 三.代码 <!DOCTYPE html> < ...