怎么把网站放到阿里云,博客网站开发源代码,网络营销推广方法包括有哪些?,嘉兴企业网站建设公司一、Xtrabackup介绍 Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具#xff0c;支持MySQL、Percona server和MariaDB#xff0c;开源免费#xff0c;是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表支持MySQL、Percona server和MariaDB开源免费是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表而不能备份MyISAM数据表。
MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的如果数据大于50G或100G存储空间足够的情况下可以每天进行完整备份如果每天产生的数据量较大需要定制数据备份策略。例如每周实用完整备份周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具
xtrabackup包含两个主要的工具即xtrabackup和innobackupex二者区别如下
1xtrabackup只能备份innodb和xtradb两种引擎的表而不能备份myisam引擎的表
2innobackupex是一个封装了xtrabackup的Perl脚本支持同时备份innodb和myisam但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份 二、Xtrabackup优点
1备份速度快物理备份可靠
2备份过程不会打断正在执行的事务无需锁表
3能够基于压缩等功能节约磁盘空间和流量
4自动备份校验
5还原速度快
6可以流传将备份传输到另外一台机器上
7在不增加服务器负载的情况备份数据 三、Xtrabackup备份原理
Xtrabackup备份流程图xtrabackup备份过程中先备份innodb表再备份非innodb表 1innobackupex启动后会先fork一个进程用于启动xtrabackup然后等待xtrabackup备份ibd数据文件
2xtrabackup在备份innoDB数据是有2种线程redo拷贝线程和ibd数据拷贝线程。
xtrabackup进程开始执行后会启动一个redo拷贝的线程用于从最新的checkpoint点开始顺序拷贝redo.log
这时xtrabackup记下LSN并将redo log拷贝到备份目标目录下的xtrabackup_logfile文件中。由于拷贝需要一定时间如果在拷贝时间段内有日志写入将导致拷贝的日志和MySQL的redo log不一致所以xtrabackup还有一个后台进程监控着mysql的redo log每秒监控一次当MySQL的redo log有变化该监控进程会立即将变化的内容写入到xtrabackup_logfile文件这样就能保证拷贝走的redo log中记录了一切变化。但是这也是有风险的因为redo是轮训式循环写入的如果某一时刻有非常大量的日志写到redo log中使得还没开始复制的日志就被新日志覆盖了这样会日志丢失并报错。
再启动ibd数据拷贝线程进行拷贝innodb表的数据文件(即表空间文件.ibd文件和ibdata1)。
注意此时不拷贝innodb的frm文件。
这里是先启动redo拷贝线程的。在此阶段innobackupex进行处于等待状态等待文件被创建
4xtrabackup拷贝完成ibd数据文件后会通知innobackupex通过创建文件同时xtrabackup进入等待状态redo线程依旧在拷贝redo.log
5innobackupex收到xtrabackup通知后哦执行FLUSH TABLES WITH READ LOCKFTWRL取得一致性位点然后开始备份非InnoDB文件如frm、MYD、MYI、CSV、opt、par等格式的文件在拷贝非InnoDB文件的过程当中数据库处于全局只读状态。 对于不支持backup lock的版本只能通过flush tables with read lock来获取全局读锁但这样也同样会锁住innodb表杀伤力太大。所以使用xtrabackup备份Oracle的MySQL实质上只能实现innodb表的部分时间热备、部分时间温备。 对于支持backup lock的版本xtrabackup通过lock tables for backup获取轻量级的backup locks来替代flush tables with read lock因为它只锁定非innodb表所以由此实现了innodb表的真正热备
6当innobackup拷贝完所有的非InnoDB文件后包括获取二进制日志中一致性位置的坐标点、结束redo log的监控和拷贝、释放锁等会通知xtrabackup通知完成后进入等待状态
7xtrabackup收到innobackupex备份完成的通知后会停止redo拷贝线程然后通知innobackupexredo.log文件拷贝完成
8innobackupex收到redo.log备份完成后就进行解锁操作执行UNLOCK TABLES 对于不支持backup lock的版本收尾阶段的过程是这样的获取二进制日志的一致性坐标点、结束redo log的监控和拷贝、释放锁。 对于支持backup lock的版本收尾阶段的过程是这样的先通过lock binlog for bakcup来获取二进制日志锁然后结束redo log的监控和拷贝再unlock tables释放表锁随后获取二进制日志的一致性位置坐 标点最后unlock binlog释放二进制日志锁。
9最后innbackupex和xtrabackup进程各自释放资源写备份元数据信息等innobackupex等xtrabackup子进程结束后退出。
注 percona Server 5.6 支持一种新锁——backup lock(备份锁)这种锁是percona对MySQL的补充专门为备份而设计。这种锁在percona Server 5.6 有MariaDB中也有但是Oracle的MySQL中没有至少MySQL 5.7中没有。 这种锁用在备份的时候替代 flush tables with read lock 获取全局锁是一种轻量级的全局锁。它有两种类型的锁备份表锁和二进制日志锁。为此新增了3种语法 1 2 3 lock tablesfor backup # 申请备份表锁 lock binlogfor backup # 申请二进制日志锁 unlock binlog # 释放二进制日志锁 备份表锁在全局范围内只对非innodb表加锁所以持有该锁后无法修改非innodb表但却不影响innodb表的DML。当然因为是全局锁所以也会阻塞DDL操作。 二进制日志锁在全局范围内锁定二进制日志所以会阻塞其他会话修改二进制日志。这样可以保证能够获取到二进制日志中一致性的位置坐标。
全量备份 备份开始时首先会开启一个后台检测进程实时检测mysql redo的变化一旦发现redo中有新的日志写入立刻将日志记入后台日志文件xtrabackup_log中。之后复制innodb的数据文件和系统表空间文件ibdata1待复制结束后执行flush tables with read lock操作复制.frmMYIMYD等文件执行flush tableswith read lock的目的是为了防止数据表发生DDL操作并且在这一时刻获得binlog的位置最后会发出unlock tables把表设置为可读可写状态最终停止xtrabackup_log。
增量备份 innobackupex增量备份过程中的增量处理其实主要是相对innodb而言对myisam和其他存储引擎而言它仍然是全拷贝(全备份)
增量备份的过程主要是通过拷贝innodb中有变更的页这些变更的数据页指的是页的LSN大于xtrabackup_checkpoints中给定的LSN。增量备份是基于全备的第一次增备的数据必须要基于上一次的全备之后的每次增备都是基于上一次的增备最终达到一致性的增备。增量备份的过程如下和全备的过程很类似区别仅在第2步。
全备恢复
这一阶段会启动xtrabackup内嵌的innodb实例回放xtrabackup日志xtrabackup_log将提交的事务信息变更应用到innodb数据/表空间同时回滚未提交的事务(这一过程类似innodb的实例恢复。
备份的时候拷贝走的数据文件可能是不一致的比如监控着MySQL的redo log中在拷贝过程完成后又新的事务提交了而拷贝走的数据是未提交状态的那么就需要对该事务前滚如果监控到的日志中有事务未提交那么该事务就需要回滚。
但是如果只备份了myisam表或其他非事务表数据因为备份阶段直接锁定了这些表所以不会有不一致的状态。
xtrabackup有一个准备的阶段。这个阶段的实质就是对备份的innodb数据应用redo log该回滚的回滚该前滚的前滚最终保证xtrabackup_logfile中记录的redo log已经全部应用到备份数据页上并且实现了一致性。当应用结束后会重写xtrabackup_logfile再次保证该redo log和备份的数据是对应的
恢复过程如下图 增备恢复
和全备恢复类似也需要两步一是数据文件的恢复如图4这里的数据来源由3部分组成全备份增量备份和xtrabackup log。二是对未提交事务的回滚 四、xtrabackup的安装部署以及备份恢复实现 1、xtrabackup的安装
下载地址https://www.percona.com/downloads/XtraBackup/LATEST/
可以选择rpm包方式安装也可以下载源码包编译安装这里直接采用rpm包的方式进行安装 [rootmaster tools]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[rootmaster tools]# yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
[rootmaster ~]# rpm -qa |grep xtrabackup
percona-xtrabackup-24-2.4.9-1.el7.x86_64Xtrabackup中主要包含两个工具
xtrabackup是用于热备innodbxtradb表中数据的工具不能备份其他类型的表也不能备份数据表结构
innobackupex是将xtrabackup进行封装的perl脚本提供了备份myisam表的能力。
常用选项: --host 指定主机--user 指定用户名--password 指定密码--port 指定端口--databases 指定数据库--incremental 创建增量备份--incremental-basedir 指定包含完全备份的目录--incremental-dir 指定包含增量备份的目录 --apply-log 对备份进行预处理操作 一般情况下在备份完成后数据尚且不能用于恢复操作因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。--redo-only 不回滚未提交事务--copy-back 恢复备份目录装完xtrabackup后生成以下几个工具
[rootlocalhost bin]# ./xb
xbcloud xbcloud_osenv xbcrypt xbiff xbrlapi xbstreamxbcloud和xbcloud_osenv是xtrabackup新的高级特性云备份
xbcrypt也是新的特性加密备份集
xbstream是xtrabackup的流数据功能通过流数据功能可将备份内容打包并传给管道后的压缩工具进行压缩
xtrabackup是主程序
innobackupex在以前是一个perl脚本会调用xtrabackup这个二进制工具从xtrabackup 2.3开始该工具使用C语言进行了重写当前它是xtabackup二进制工具的一个软连接但是实际的使用方法却不同并且在以后的版本中会删除该工具。 使用innobackupex备份时其会调用xtrabackup备份所有的InnoDB表复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件同时还会备份触发器和数据库配置信息相关的文件这些文件会被保存到一个以时间命名的目录当中。在备份的同时innobackupex还会在备份目录中创建如下文件 (1)xtrabackup_checkpoints -- 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息每个InnoDB页(通常为16k大小)
都会包含一个日志序列号即LSNLSN是整个数据库系统的系统版本号每个页面相关的LSN能够表明此页面最近是如何发生改变的。(2)xtrabackup_binlog_info -- mysql服务器当前正在使用的二进制日志文件及备份这一刻位置二进制日志时间的位置。(3)xtrabackup_binlog_pos_innodb -- 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。(4)xtrabackup_binary -- 备份中用到的xtrabackup的可执行文件(5)backup-my.cnf -- 备份命令用到的配置选项信息在使用innobackupex进行备份时还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录如此一来innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。 如果要使用一个最小权限的用户进行备份则可基于如下命令创建此类用户如果要使用一个最小权限的用户进行备份则可基于如下命令创建此类用户 mysql CREATE USER bkpuserlocalhost IDENTIFIED BY 123456; #创建用户
mysql REVOKE ALL PRIVILEGES,GRANT OPTION FROM bkpuser; #回收此用户所有权限
mysql GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO bkpuserlocalhost; #授权刷新、锁定表、用户查看服务器状态
mysql FLUSH PRIVILEGES; #刷新授权表mysql create user backup% identified by yayun;
Query OK, 0 rows affected (0.01 sec)mysql grant reload,lock tables,replication client,create tablespace,super on *.* to backup%;
Query OK, 0 rows affected (0.00 sec)mysql 注意备份时需启动MySQL,恢复时需关闭MySQL,清空mysql数据目录且不能重新初始化,恢复数据后应该立即进行一次完全备份 2、xtrabackup全量备份与恢复 备份
innobackupex --userDBUSER --passwordDBUSERPASS --defaults-file/etc/my.cnf /path/to/BACKUP-DIR/恢复
innobackupex --apply-log /backups/2018-07-30_11-04-55/
innobackupex --copy-back --defaults-file/etc/my.cnf /backups/2018-07-30_11-04-55/ 1准备(prepare)一个完全备份
一般情况下在备份完成后数据尚且不能用于恢复操作因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此此时数据文件仍处于不一致状态。准备的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态。
innobackupex命令的--apply-log选项可用于实现上述功能如下面的命令 # innobackupex --apply-log /path/to/BACKUP-DIR
如果执行正确其最后输出的几行信息通常如下120407 09:01:04 innobackupex: completed OK! 在实现准备的过程中innobackupex通常还可以使用--user-memory选项来指定其可以使用的内存的大小默认为100M.如果有足够的内存空间可用可以多划分一些内存给prepare的过程以提高其完成备份的速度。
2从一个完全备份中恢复数据
注意恢复不用启动MySQL
innobackupex命令的--copy-back选项用于恢复操作其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。 # innobackupex --copy-back /path/to/BACKUP-DIR 当数据恢复至DATADIR目录以后还需要确保所有的数据文件的属主和属组均为正确的用户如mysql否则在启动mysqld之前还需要事先修改数据文件的属主和属组。如 # chown -R mysql.mysql /mydata/data/ 3实战练习 1全量备份
[rootmaster backups]# innobackupex --userroot --password123456 --host127.0.0.1 /backups/ #在master上进行全库备份#语法解释说明
#--userroot 指定备份用户
#--password123456 指定备份用户密码
#--host 指定主机
#/backups 指定备份目录
[rootmaster backups]# ll
total 0
drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37
[rootmaster backups]# ll 2018-07-30_11-01-37/ #查看备份数据
total 77856
-rw-r----- 1 root root 418 Jul 30 11:01 backup-my.cnf #备份用到的配置选项信息文件
-rw-r----- 1 root root 79691776 Jul 30 11:01 ibdata1 #数据文件
drwxr-x--- 2 root root 20 Jul 30 11:01 kim
drwxr-x--- 2 root root 4096 Jul 30 11:01 mysql
drwxr-x--- 2 root root 4096 Jul 30 11:01 performance_schema
drwxr-x--- 2 root root 20 Jul 30 11:01 repppp
drwxr-x--- 2 root root 4096 Jul 30 11:01 wordpress
-rw-r----- 1 root root 21 Jul 30 11:01 xtrabackup_binlog_info #mysql服务器当前正在使用的二进制日志文件和此时二进制日志时间的位置信息文件
-rw-r----- 1 root root 113 Jul 30 11:01 xtrabackup_checkpoints #备份的类型、状态和LSN状态信息文件
-rw-r----- 1 root root 482 Jul 30 11:01 xtrabackup_info
-rw-r----- 1 root root 2560 Jul 30 11:01 xtrabackup_logfile #备份的日志文件2恢复
[rootslave ~]# /etc/init.d/mysqld stop #停止slave上的mysql
Shutting down MySQL.. SUCCESS! [rootslave tools]# yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm #安装xtrabackup
[rootmaster backups]# scp -r 2018-07-30_11-01-37/ root192.168.56.12:/backups/ #从master上拷贝备份数据
[rootslave tools]# innobackupex --apply-log /backups/2018-07-30_11-01-37/ #合并数据使数据文件处于一致性的状态
180729 23:18:23 innobackupex: Starting the apply-log operationIMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints completed OK!.innobackupex version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
xtrabackup: cd to /backups/2018-07-30_11-01-37/
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size8388608, start_lsn(3127097)
......
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 3129915
180729 23:18:30 completed OK!
[rootslave ~]# rm -rf /usr/local/mysql/data/ #在slave上删除原有的数据
[rootslave ~]# vim /etc/my.cnf #配置my.cnf的数据目录路径否则会报错要和master一致
datadir/usr/local/mysql/data
[rootslave ~]# innobackupex --copy-back /backups/2018-07-30_11-01-37/ #在slave上数据恢复
180729 23:32:03 innobackupex: Starting the copy-back operationIMPORTANT: Please check that the copy-back run completes successfully.At the end of a successful copy-back run innobackupexprints completed OK!.
......
180729 23:32:08 completed OK! #看到completed OK就是恢复正常了
[rootslave ~]# ll /usr/local/mysql/data/ #slave上查看数据目录可以看到数据已经恢复但是属主会有问题需要进行修改所以一般使用mysql的运行用户进行恢复否则需要进行修改属主和属组信息
total 188432
-rw-r----- 1 root root 79691776 Jul 29 23:32 ibdata1
-rw-r----- 1 root root 50331648 Jul 29 23:32 ib_logfile0
-rw-r----- 1 root root 50331648 Jul 29 23:32 ib_logfile1
-rw-r----- 1 root root 12582912 Jul 29 23:32 ibtmp1
drwxr-x--- 2 root root 20 Jul 29 23:32 kim
drwxr-x--- 2 root root 4096 Jul 29 23:32 mysql
drwxr-x--- 2 root root 4096 Jul 29 23:32 performance_schema
drwxr-x--- 2 root root 20 Jul 29 23:32 repppp
drwxr-x--- 2 root root 4096 Jul 29 23:32 wordpress
-rw-r----- 1 root root 482 Jul 29 23:32 xtrabackup_info
[rootslave ~]# chown -R mysql.mysql /usr/local/mysql/data/ #修改属主属组
[rootslave ~]# /etc/init.d/mysqld start #启动mysql
Starting MySQL. SUCCESS!
[rootslave ~]# mysql -uroot -p -e show databases; #查看数据是否恢复
Enter password:
--------------------
| Database |
--------------------
| information_schema |
| kim |
| mysql |
| performance_schema |
| repppp |
| wordpress |
-------------------- 总结全库备份与恢复三步曲
a. innobackupex全量备份并指定备份目录路径
b. 在恢复前需要使用--apply-log参数先进行合并数据文件确保数据的一致性要求
c. 恢复时直接使用--copy-back参数进行恢复需要注意的是在my.cnf中要指定数据文件目录的路径。 3、xtrabackup增量备份与恢复 使用innobackupex进行增量备份每个InnoDB的页面都会包含一个LSN信息每当相关的数据发生改变相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础即innobackupex通过备份上次完全备份之后发生改变的页面来实现。在进行增量备份时首先要进行一次全量备份第一次增量备份是基于全备的之后的增量备份都是基于上一次的增量备份的以此类推。
要实现第一次增量备份可以使用下面的命令进行 基于全量备份的增量备份与恢复
做一次增量备份基于当前最新的全量备份
innobackupex --userroot --passwordroot --defaults-file/etc/my.cnf --incremental /backups/ --incremental-basedir/backups/2018-07-30_11-01-37
1. 准备基于全量
innobackupex --userroot --passwordroot --defaults-file/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37
2. 准备基于增量
innobackupex --userroot --passwordroot --defaults-file/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37 --incremental-dir/backups/2018-07-30_13-51-47/
3. 恢复
innobackupex --copy-back --defaults-file/etc/my.cnf /opt/2017-01-05_11-04-55/
解释
1. 2018-07-30_11-01-37指的是完全备份所在的目录。
2. 2018-07-30_13-51-47指定是第一次基于2018-07-30_11-01-37增量备份的目录其他类似以此类推即如果有多次增量备份。每一次都要执行如上操作。 需要注意的是增量备份仅能应用于InnoDB或XtraDB表对于MyISAM表而言执行增量备份时其实进行的是完全备份。
准备(prepare)增量备份与整理完全备份有着一些不同尤其要注意的是 ①需要在每个备份 (包括完全和各个增量备份)上将已经提交的事务进行重放。重放之后所有的备份数据将合并到完全备份上。 ②基于所有的备份将未提交的事务进行回滚
1增量备份演示 [rootmaster backups]# innobackupex --userroot --password123456 --host127.0.0.1 /backups/ #全备数据
[rootmaster ~]# mysql -uroot -p #在master上创建student库并创建testtb表插入若干数据
Enter password:
mysql create database student;
Query OK, 1 row affected (0.03 sec)mysql use student;
Database changed
mysql create table testtb(id int);
Query OK, 0 rows affected (0.07 sec)mysql insert into testtb values(1),(10),(99);
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql select * from testtb;
------
| id |
------
| 1 |
| 10 |
| 99 |
------
3 rows in set (0.00 sec)mysql quit;
Bye#使用innobackupex进行增量备份
[rootmaster backups]# innobackupex --userroot --password123456 --host127.0.0.1 --incremental /backups/ --incremental-basedir/backups/2018-07-30_11-01-37/
......
180730 13:51:50 Executing UNLOCK TABLES
180730 13:51:50 All tables unlocked
180730 13:51:50 Backup created in directory /backups/2018-07-30_13-51-47/
MySQL binlog position: filename mysql-bin.000005, position 664
180730 13:51:50 [00] Writing /backups/2018-07-30_13-51-47/backup-my.cnf
180730 13:51:50 [00] ...done
180730 13:51:50 [00] Writing /backups/2018-07-30_13-51-47/xtrabackup_info
180730 13:51:50 [00] ...done
xtrabackup: Transaction log of lsn (3158741) to (3158741) was copied.
180730 13:51:50 completed OK!
[rootmaster backups]# ll #查看备份数据
total 0
drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37 #全量备份数据目录
drwxr-x--- 8 root root 273 Jul 30 13:51 2018-07-30_13-51-47 #增量备份数据目录
[rootmaster 2018-07-30_11-01-37]# cat xtrabackup_checkpoints #查看全量备份的xtrabackup_checkpoints
backup_type full-backuped #备份类型为全量备份
from_lsn 0 #lsn从0开始
to_lsn 3127097 #lsn到3127097结束
last_lsn 3127097
compact 0
recover_binlog_info 0[rootmaster 2018-07-30_13-51-47]# cat xtrabackup_checkpoints #查看增量备份的xtrabackup_checkpoints
backup_type incremental #备份类型为增量备份
from_lsn 3127097 #lsn从3127097开始
to_lsn 3158741 #lsn到啊3158741结束
last_lsn 3158741
compact 0
recover_binlog_info 0 2增量备份后数据恢复演示 1模拟mysql故障删除数据目录所有数据
[rootmaster ~]# /etc/init.d/mysqld stop #模拟mysql故障停止mysql
Shutting down MySQL.. SUCCESS!
[rootmaster ~]# rm -rf /usr/local/mysql/data/* #删除数据目录中的所有数据2合并全备数据目录确保数据的一致性
[rootmaster ~]# innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/
180730 14:05:27 innobackupex: Starting the apply-log operationIMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints completed OK!.innobackupex version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
xtrabackup: cd to /backups/2018-07-30_11-01-37/
......
......
xtrabackup: starting shutdown with innodb_fast_shutdown 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 3127106
InnoDB: Number of pools: 1
180730 14:05:29 completed OK!3将增量备份数据合并到全备数据目录当中
[rootmaster ~]# innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ --incremental-dir/backups/2018-07-30_13-51-47/
180730 14:06:42 innobackupex: Starting the apply-log operationIMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints completed OK!.
......
......
180730 14:06:44 [00] ...done
180730 14:06:44 completed OK!
[rootmaster ~]# cat /backups/2018-07-30_11-01-37/xtrabackup_checkpoints
backup_type log-applied #查看到数据备份类型是增加
from_lsn 0 #lsn从0开始
to_lsn 3158741 #lsn结束号为最新的lsn
last_lsn 3158741
compact 0
recover_binlog_info 04恢复数据
[rootmaster ~]# innobackupex --copy-back /backups/2018-07-30_11-01-37/
180730 14:07:51 innobackupex: Starting the copy-back operationIMPORTANT: Please check that the copy-back run completes successfully.At the end of a successful copy-back run innobackupexprints completed OK!.
.......
.......
180730 14:08:17 [01] ...done
180730 14:08:17 completed OK!
[rootmaster ~]# ll /usr/local/mysql/data/
total 77844
-rw-r----- 1 root root 79691776 Jul 30 14:08 ibdata1
drwxr-x--- 2 root root 20 Jul 30 14:08 kim
drwxr-x--- 2 root root 4096 Jul 30 14:08 mysql
drwxr-x--- 2 root root 4096 Jul 30 14:08 performance_schema
drwxr-x--- 2 root root 20 Jul 30 14:08 repppp
drwxr-x--- 2 root root 56 Jul 30 14:08 student
drwxr-x--- 2 root root 4096 Jul 30 14:08 wordpress
-rw-r----- 1 root root 21 Jul 30 14:08 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root 554 Jul 30 14:08 xtrabackup_info
[rootmaster ~]# chown -R mysql.mysql /usr/local/mysql/data #更改数据的属主属组
[rootmaster ~]# /etc/init.d/mysqld start #启动mysql
Starting MySQL.Logging to /usr/local/mysql/data/master.err.
.. SUCCESS!
[rootmaster ~]# mysql -uroot -p -e show databases; #查看数据是否恢复
Enter password:
--------------------
| Database |
--------------------
| information_schema |
| kim |
| mysql |
| performance_schema |
| repppp |
| student |
| wordpress |
-------------------- 总结
1增量备份需要使用参数--incremental指定需要备份到哪个目录使用incremental-dir指定全备目录
2进行数据备份时需要使用参数--apply-log redo-only先合并全备数据目录数据确保全备数据目录数据的一致性
3再将增量备份数据使用参数--incremental-dir合并到全备数据当中
4最后通过最后的全备数据进行恢复数据注意如果有多个增量备份需要逐一合并到全备数据当中再进行恢复。 增量备份的恢复大体为3个步骤
*恢复完全备份
*恢复增量备份到完全备份开始恢复的增量备份要添加--redo-only参数到最后一次增量备份去掉--redo-only参数
*对整体的完全备份进行恢复回滚那些未提交的数据 # 使用tar流
innobackupex --userroot --password123456 --streamtar /bakdir/ /tmp/a.tar
# 使用tar流的同时交给gzip压缩
innobackupex --userroot --password123456 --streamtar /bakdir/ | gzip /tmp/a.tar.gz
# 使用tar流备份到远程主机中并归档
innobackupex --userroot --password123456 --streamtar /bakdir/ | ssh root192.168.100.10 cat - /tmp/date %F_%H-%M-%S.tar
# 使用tar流备份到原远程主机中并解包
innobackupex --userroot --password123456 --streamtar /bakdir/ | ssh root192.168.100.10 cat - | tar -x -C /tmp/# 使用xtrabackup自带的xbstream流
innobackupex --userroot --password123456 --streamxbstream /bakdir/ /tmp/b.xbs
# 解压xbstream流
innobackupex --userroot --password123456 --streamxbstream /bakdir/ | ssh root192.168.100.10 cat - | xbstream -x -C /tmp/
# 使用xbstream流的同时进行压缩使用--compress选项
innobackupex --userroot --password123456 --streamxbstream --compress /bakdir/ /bakdir/backup.xbs