CentOS 7.6使用Percona XtraBackup 2.4备份恢复MySQL 5.7

1、XtraBackup相关概念介绍:html

一、XtraBackup简介:node

热备中两种主要的方式就是逻辑备份和物理备份,物理备份要比逻辑备份在速度上更快一些,由于它是在底层复制数据文件的,比起一条条SQL语句插入要快不少。物理备份的表明就是XtraBackup,它是Percona公司的开源项目,据官方介绍它是世界上惟一一款开源的可以对InnoDBXtraDB表进行热备的工具。XtraBackup支持对InnoDBXtraDB表进行热备、全量备份、增量备份和差别备份。XtraBackup支持对MyISAM表进行温备,而且不会对MyISAM表进行增量备份,每次备份MyISAM表都是全量备份,即便名义上是增量备份,但实际上仍然是全量备份。若是数据库中既有MyISAM表又有InnoDB表时,想要总体的全部数据都一致,则只能以MyISAM表的一致性时间点做为最终备份的一致性时间点,因此XtraBackup在备份时,会先备份InnoDB表,备份完InnoDB表后,再备份MyISAM表,而且在备份MyISAM表时施加读锁。mysql

二、InnoDB表逻辑存储结构:算法

InnoDB表逻辑单元从大到小分别为:表空间(Tablespace)、段(Segment)、区(Extent)、页(Page)、行(Row),每一个大的逻辑单元中都包含了N个小的逻辑单元。此处只需关心Extent逻辑单元和Page逻辑单元便可,Extent区域中的每一个小方块(Page)看成XtraBackup须要备份的数据块,由于数据存放于行中,行存在于Page中,因此备份对应的Page,便可备份出对应的数据。使用XtraBackup链接到MySQL服务端时,XtraBackup会读取InnoDB中的Page进行备份。InnoDB的逻辑存储结构以下图所示:sql

image.png

三、XtraBackup备份原理:数据库

备份开始时,XtraBackup会同时运行两个线程,一个线程负责备份InnoDB中的Page,另外一个线程负责备份InnoDB的事务日志(redo log),事务日志都会被XtraBackup记录到本身的日志文件中,备份结束后,会获得两份文件,一份是不可用的备份文件,另外一份是备份时的事务日志。备份文件之因此不可用,是由于有一部分不肯定的数据可能在事务日志中,并且热备过程当中数据也可能发生改变,须要经过这两份文件,获得一份可用的备份文件。这个过程在XtraBackup中称为prepare准备,即对于写入事务日志文件中,但尚未同步到datafile中的已提交事务进行replay重放,对于未提交的事务进行rollback回滚,prepare操做保证了备份数据的一致性,没有通过prepare的备份数据是不可用的。若是存在增量备份,XtraBackup会将全部增量都合并到以前的全量上,而后使用最后的全量数据进行恢复。在合并数据的过程当中,上一次未提交的事务有可能在下次的增量备份中已经提交,因此若是存在多个增量备份,在进行prepare时,只须要将已经提交的事务同步到数据文件中便可,未提交的事务不用进行回滚,由于在增量备份中,这些事务可能已经提交了,只须要在最后一份增量数据进行prepare时,将对应的未提交事务回滚便可。vim

四、XtraBackup实现增量备份的判断依据:安全

每一个Page都有本身的LSNLog Sequence Number,日志序列号),LSN是一个全局递增的号码,每次对Page中的记录进行修改时,都会有对应的LSN,每一个Page中的数据被更改时,都会在这个Page中记录下本次的LSN。若是这个Page中记录的LSN越大,就证实这个Page中的数据越新(最近被修改),而XtraBackup就是经过LSN实现对InnoDB表的增量备份。每次备份开始时,XtraBackup会记录下当前备份到的LSN,当下次进行增量备份时,XtraBackup就只会拷贝出LSN大于上次记录的Page,那些LSN小于上次记录的Page则会被略过。若是Page中的LSN小于上次备份时记录的LSN,则证实这个Page在上次备份后并无被修改过。若是Page中的LSN大于上次备份时记录的LSN,则证实这个Page在上次备份后已经被修改了,只要备份出这些Page,便可实现增量备份的目的。服务器

五、XtraBackup工具:session

XtraBackup主要有两个工具:xtrabackupinnobackupexxtrabackup只能备份InnoDBXtraDB两种数据表,不能备份MyISAM数据表;innobackupex封装了xtrabackup,不只能备份InnoDBXtraDB两种数据表,同时还能够备份MyISAM数据表。在新版本中xtrabackup实现了innobackupex的功能。

备注:

(1)本文安装的是2.4的版本,innobackupex的功能已经彻底整合进xtrabackup中,为了兼容以前用户的使用习惯,官方保留了innobackupex,它做为一个软连接,指向xtrabackup

(2)innobackupex8.0的版本中已被弃用,只保留xtrabackup

(3)Percona XtraBackup 8.0的版本不支持备份恢复MySQL 5.7

六、XtraBackup备份后生成的文件:

(1)backup-my.cnf:备份用到的配置选项信息

(2)xtrabackup_binlog_info:记录当前正在使用的二进制日志文件及备份这一刻为止二进制日志事件的位置

(3)xtrabackup_binlog_pos_innodb:记录当前正在使用的二进制日志文件及备份这一刻为止用于InnoDBXtraDB表的二进制日志事件的位置

(4)xtrabackup_checkpoints:记录备份类型(如:全量或增量)、备份起始和结束时的LSN等信息

(5)xtrabackup_info:记录备份时使用的工具名称(如:innobackupex)、工具选项、工具版本、MySQL版本、备份开始和结束时间、当前正在使用的二进制日志文件及备份这一刻为止二进制日志事件的位置、备份起始和结束时的LSN等信息

(6)xtrabackup_logfile:记录备份过程当中的日志

备注:若是都是InnoDB存储引擎的表,用于时间点恢复的二进制日志事件的位置能够以xtrabackup_binlog_pos_innodb文件中记录的为准;若是是InnoDB和其它存储引擎混合操做的表,建议以xtrabackup_binlog_info为准。

七、相关网址:

(1)官网:https://www.percona.com/software/mysql-database/percona-xtrabackup

(2)用户手册:https://www.percona.com/doc/percona-xtrabackup/2.4/manual.html

 

2、准备工做(两个节点都须要执行以下操做):

一、演示环境:

          IP

    操做系统

 主机名

  角色

            数据库版本

安装方式

192.168.1.145

CentOS   7.6 x86_64

node1

primary

5.7.26-log   MySQL Community Server

rpm

192.168.1.146

CentOS   7.6 x86_64

node2

backup

5.7.26-log   MySQL Community Server

rpm

二、关闭SELinuxfirewalld

三、配置epel

四、配置节点时间同步

五、配置主机名

六、配置/etc/hosts文件:

# vim /etc/hosts

192.168.1.145 node1

192.168.1.146 node2

七、建立备份数据存放目录:# mkdir -pv /data/mysqlbak

八、建立binlog存放目录:# mkdir -pv /data/mysqlbinlog

九、下载MySQL 5.7软件包,https://dev.mysql.com/downloads/mysql/5.7.html#downloads

十、安装Percona XtraBackup 2.4

# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# yum list | grep percona

# yum -y install percona-xtrabackup-24

# innobackupex -v

image.png

image.png


3、安装配置MySQL(如未特殊说明,两个节点都须要执行以下操做):

一、卸载CentOS 7.6自带的MariaDB

# rpm -qa | grep -i mariadb --> mariadb-libs-5.5.60-1.el7_5.x86_64

# rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

二、若是以前安装过MySQL,先卸载:# rpm -qa | grep -i mysql

三、若是存在/etc/my.cnf配置文件,先删除:# rm -rf /etc/my.cnf

四、将软件包上传至两个节点的/tmp目录下:

mysql-community-client-5.7.26-1.el7.x86_64.rpm

mysql-community-libs-5.7.26-1.el7.x86_64.rpm

mysql-community-common-5.7.26-1.el7.x86_64.rpm

mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm

mysql-community-devel-5.7.26-1.el7.x86_64.rpm

mysql-community-server-5.7.26-1.el7.x86_64.rpm

五、安装MySQL软件包:# yum -y localinstall *.rpm

六、初始化MySQL# mysqld --initialize --user=mysql --datadir=/var/lib/mysql

备注:初始化以前确保/var/lib/mysql目录为空

七、修改/etc/my.cnf配置文件:

# mv /etc/my.cnf /etc/my.cnf.bak

# vim /etc/my.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

pid-file=/var/run/mysqld/mysqld.pid

log-error=/var/log/mysqld.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mysql-slow.log

symbolic-links=0

explicit_defaults_for_timestamp=1

server_id=1

sync_binlog=1

innodb_flush_log_at_trx_commit=1

log_bin=/data/mysqlbinlog/mysql-bin

log_bin_index=/data/mysqlbinlog/mysql-bin.index

binlog_format=mixed

备注:

(1)backup节点的server_id=2

(2)innodb_file_per_table=1:每表使用单独的表空间,备份单个数据库或表时该选项必需要启用

(3)此处数据文件和binlog分开存放

八、修改/data/mysqlbinlog目录的属主和属组:# chown -R mysql.mysql /data/mysqlbinlog

九、启动MySQL服务:

# systemctl start mysqld.service

# systemctl status mysqld.service

# tail -100 /var/log/mysqld.log

# ss -tunlp | grep 3306

# systemctl enable mysqld.service

十、查看root@localhost用户的初始密码:# grep password /var/log/mysqld.log

十一、配置MySQL安全向导:# mysql_secure_installation

十二、primary节点建立测试数据:

# mysql -uroot -p

mysql> create database db1;

mysql> create table db1.tb1(id int unsigned auto_increment primary key not null,name varchar(20) not null);

mysql> desc db1.tb1;

mysql> insert into db1.tb1(name) values('zhangsan'),('lisi');

mysql> select * from db1.tb1;

image.png

mysql> create database db2;

mysql> create table db2.tb2(name varchar(20) not null,age int not null);

mysql> desc db2.tb2;

mysql> insert into db2.tb2 values('mary',25),('jack',30);

mysql> select * from db2.tb2;

image.png

1三、primary节点建立具备备份权限的用户:

mysql> create user 'bkuser'@'192.168.1.%' identified by '123456';

mysql> revoke all on *.* from 'bkuser'@'192.168.1.%';

mysql> grant reload,lock tables,replication client,process on *.* to 'bkuser'@'192.168.1.%';

mysql> flush privileges;

备注:上述给出的权限为备份的最小权限


4、primary节点innobackupex全量备份+binlog增量备份全部数据库,并在backup节点恢复:

一、primary节点全量备份全部数据库,压缩后发送至backup节点:

# ssh-keygen -t rsa -P ""

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.146

# ssh root@192.168.1.146 'hostname'

image.png

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp -H 192.168.1.145 -P 3306 -u bkuser -p 123456 --stream=tar /tmp | ssh root@192.168.1.146 "gzip - > /data/mysqlbak/`date +%F_%T`_full.tar.gz"

image.png

备注:

(1)经常使用选项说明:

a、--defaults-file:指定备份时使用的配置文件路径,该选项必须紧跟innobackupex,不然会提示“xtrabackup: Error: --defaults-file must be specified first on the command line”错误信息

b、--no-timestamp:禁止innobackupex自动建立一个以时间命名的目录

c、-H:指定MySQL服务器IP

d、-P:指定MySQL服务器端口

e、-u:指定备份时使用的用户

f、-p:指定该用户对应的密码

g、--stream:流式化备份,备份时使用的数据流格式,有两个可用值,tarxbstream,此处将备份的数据经过STDOUT标准输出传输给tar进行归档后再使用gzip进行压缩,并发送至backup节点,而不是默认的直接保存至primary节点的某个备份目录中,能够将gzip换成其它经常使用的压缩软件进行压缩,--stream选项后的路径/tmp不可省,可是其路径能够为任意路径,与数据备份后所在的路径没有任何关系

h、查看更多选项,可以使用命令:# innobackupex --help

(2)将数据流备份至远程目标主机有一个前提条件,就是远程目标主机须要对当前主机SSH信任,即当前主机经过SSH链接到远程目标主机时不须要输入对应的密码

(3)只有在备份结束后提示“completed OK!”,才说明全量备份成功

二、backup节点解压备份数据,并查看primary节点全量备份时binlog事件位置:

# cd /data/mysqlbak

# mkdir -pv 2019-08-22_17:58:34_full

# tar -ixf 2019-08-22_17\:58\:34_full.tar.gz --force-local -C 2019-08-22_17:58:34_full

# cd 2019-08-22_17\:58\:34_full

# cat xtrabackup_binlog_info

image.png

三、primary节点在db1.tb1db2.tb2中插入新数据:

mysql> insert into db1.tb1(name) values('wangwu'),('zhaoliu');

mysql> insert into db2.tb2 values('keyso',35),('marion',40);

mysql> flush logs;

mysql> select * from db1.tb1;

image.png

mysql> select * from db2.tb2;

image.png

备注:此处滚动二进制日志是为了以后演示使用mysqlbinlog经过多个二进制日志进行时间点恢复

四、primary节点使用mysqlbinlog导出全量备份以后全部数据库执行过的SQL语句:

# cd /data/mysqlbinlog

# mysqlbinlog -uroot -p -j 3251 mysql-bin.000001 mysql-bin.000002 > /data/mysqlbak/binlog.sql

备注:须要列出全部binlog

五、primary节点将binlog.sql发送至backup节点:

# scp /data/mysqlbak/binlog.sql root@192.168.1.146:/data/mysqlbak/

六、backup节点准备全量备份:

# innobackupex --defaults-file=/etc/my.cnf --apply-log --use-memory=1GB /data/mysqlbak/2019-08-22_17:58:34_full

备注:

(1)经常使用选项说明:

a、--apply-log:备份后的数据文件不能直接用于恢复操做,须要经过回滚未提交的事务及同步已提交的事务至数据文件,即应用位于同一目录中的xtrabackup_logfile的事务日志,并建立新的事务日志

b、--use-memory:若是主机有必定的空闲内存,可让XtraBackup使用指定大小的内存加速完成准备工做,默认状况下会使用100MB的内存用以准备工做

(2)只有在准备工做结束后提示“completed OK!”,才说明准备工做完成

七、backup节点中止MySQL服务:# systemctl stop mysqld.service mysqladmin -uroot -p shutdown

八、backup节点清空数据目录:# mv /var/lib/mysql /tmp/mysql_bak  # mkdir -pv /var/lib/mysql

九、backup节点将备份数据拷贝至数据目录:

# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/mysqlbak/2019-08-22_17:58:34_full

备注:

(1)/var/lib/mysql数据目录必须为空

(2)在拷贝结束后提示“completed OK!”,才说明拷贝成功

十、backup节点修改数据目录的属主和属组:# chown -R mysql.mysql /var/lib/mysql

十一、backup节点启动MySQL服务:

# systemctl start mysqld.service  # systemctl status mysqld.service  # ss -tunlp | grep 3306

十二、backup节点查看db1.tb1db2.tb2中的数据:

mysql> select * from db1.tb1;

image.png

mysql> select * from db2.tb2;

image.png

1三、backup节点进行时间点恢复:

mysql> show variables like 'sql_log_bin';

mysql> set sql_log_bin=0;

mysql> show variables like 'sql_log_bin';

mysql> show binary logs;

image.png

mysql> show master status;

image.png

mysql> source /data/mysqlbak/binlog.sql

备注:或使用命令# mysql -uroot -p < /data/mysqlbak/binlog.sql

mysql> show master status;

image.png

mysql> set @@session.sql_log_bin=1;

mysql> show variables like 'sql_log_bin';

1四、backup节点查看db1.tb1db2.tb2中的数据:

mysql> select * from db1.tb1;

image.png

mysql> select * from db2.tb2;

image.png


5、primary节点innobackupex备份单个数据库db2,并在本地恢复:

一、db2.tb2中插入新数据:

mysql> insert into db2.tb2 values('tom',45),('mike',50);

mysql> select * from db2.tb2;

image.png

二、建立备份数据存放目录:# mkdir -pv /data/mysqlbak/db2

三、备份单个数据库db2

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp -H 192.168.1.145 -P 3306 -u bkuser -p 123456 --parallel=4 --compress --compress-threads=4 --databases=db2 /data/mysqlbak/db2/`date +%F_%T`_db2

image.png

备注:

(1)经常使用选项说明:

a、--parallel:指定并行备份的线程数,用以加速备份,默认状况下只开启一个线程进行备份,当备份使用的数据流为tar格式时,没有任何做用

b、--compress:对备份数据进行压缩,除了xtrabackup_checkpoints文件之外,其它全部备份数据都会被压缩,包括事务日志和元数据文件,使用的压缩算法为quicklz,压缩出的文件的后缀名为.qp

image.png

c、--compress-threads:指定压缩线程的数量,加快压缩速度

d、--databases:指定备份的数据库名称,若是须要备份多个数据库,数据库名称之间以空格隔开,--databases="db1 db2"

(2)只有在备份结束后提示“completed OK!”,才说明备份成功

四、安装qpress压缩软件:# yum -y install qpress

五、解压备份数据:# innobackupex --parallel=4 --decompress /data/mysqlbak/db2/2019-08-22_18:43:46_db2

image.png

备注:只有在解压结束后提示“completed OK!”,才说明解压成功

六、准备备份:

# innobackupex --defaults-file=/etc/my.cnf --apply-log --use-memory=1GB --export /data/mysqlbak/db2/2019-08-22_18:43:46_db2

备注:

(1)--export:导出单独的表以后再导入其它MySQL

(2)上述命令执行过程当中,innobackupex命令会从InnoDB数据字典中移除缺失的表,同时也会为备份文件中存在的表建立.exp文件的相关信息

image.png

(3)只有在准备工做结束后提示“completed OK!”,才说明准备工做完成

七、中止MySQL服务:# systemctl stop mysqld.service mysqladmin -uroot -p shutdown

八、模拟db2数据库故障:# mv /var/lib/mysql/db2 /tmp/db2_bak

九、将备份数据拷贝至数据目录:# cp -r /data/mysqlbak/db2/2019-08-22_18\:43\:46_db2/* /var/lib/mysql/

十、修改数据目录的属主和属组:# chown -R mysql.mysql /var/lib/mysql

十一、启动MySQL服务:

# systemctl start mysqld.service  # systemctl status mysqld.service  # ss -tunlp | grep 3306

十二、查看db2.tb2中的数据:

mysql> select * from db2.tb2;

image.png


6、primary节点innobackupex全量备份+innobackupex增量备份+binlog增量备份全部数据库,并在backup节点恢复:

一、primary节点全量备份全部数据库:

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp -H 192.168.1.145 -P 3306 -u bkuser -p 123456 --parallel=4 /data/mysqlbak/`date +%F_%T`_full

image.png

备注:

(1)只有在备份结束后提示“completed OK!”,才说明全量备份成功

(2)查看这次全量备份目录下的xtrabackup_checkpoints文件,能够看到备份类型为full-backuped全量备份,起始LSN0,结束LSN2539919

image.png

二、primary节点在db1.tb1中插入新数据:

mysql> insert into db1.tb1(name) values('laozhang'),('laoli');

mysql> select * from db1.tb1;

image.png

三、primary节点第一次增量备份:

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp -H 192.168.1.145 -P 3306 -u bkuser -p 123456 --parallel=4 --incremental /data/mysqlbak/`date +%F_%T`_incr1 --incremental-basedir=/data/mysqlbak/2019-08-22_23:47:35_full

image.png

备注:

(1)经常使用选项说明:

a、--incremental:说明本次备份是一个增量备份,备份至2019-08-22_23:55:01_incr1目录下

b、--incremental-basedir:指定该路径为全量备份的目录,说明这次增量备份是在全量备份的基础上实现的

(2)只有在备份结束后提示“completed OK!”,才说明增量备份成功

(3)查看这次增量备份目录下的xtrabackup_checkpoints文件,能够看到备份类型为incremental增量备份,起始LSN2539919,结束LSN2543392,这次增量备份的起始LSN是以前全量备份结束时的LSN

image.png

四、primary节点在db2.tb2中插入新数据:

mysql> insert into db2.tb2 values('keyso',35),('marion',40);

mysql> select * from db2.tb2;

image.png

五、primary节点第二次增量备份:

# innobackupex --defaults-file=/etc/my.cnf --no-timestamp -H 192.168.1.145 -P 3306 -u bkuser -p 123456 --parallel=4 --incremental /data/mysqlbak/`date +%F_%T`_incr2 --incremental-basedir=/data/mysqlbak/2019-08-22_23:55:01_incr1

image.png

备注:

(1)第二次增量备份是在第一次增量备份的基础上实现的,--incremental-basedir选项指定的是第一次增量备份的目录

(2)若是--incremental-basedir选项指定的是全量备份的目录,说明这次备份是差别备份

(3)只有在备份结束后提示“completed OK!”,才说明增量备份成功

(4)查看这次增量备份目录下的xtrabackup_checkpoints文件,能够看到备份类型为incremental增量备份,起始LSN2543392,结束LSN2547556,这次增量备份的起始LSN是上一次增量备份结束时的LSN

image.png

六、primary节点查看第二次增量备份时binlog事件的位置:

# cat /data/mysqlbak/2019-08-23_00\:03\:29_incr2/xtrabackup_binlog_info

image.png

七、primary节点在db1.tb1db2.tb2中删除数据:

mysql> delete from db1.tb1 where name='laozhang';

mysql> delete from db2.tb2 where name='mary';

mysql> flush logs;

mysql> select * from db1.tb1;

image.png

mysql> select * from db2.tb2;

image.png

备注:此处滚动二进制日志是为了以后演示使用mysqlbinlog经过多个二进制日志进行时间点恢复

八、primary节点使用mysqlbinlog导出第二次增量备份以后全部数据库执行过的SQL语句:

# cd /data/mysqlbinlog

# ls

image.png

# mysqlbinlog -uroot -p -j 3867 mysql-bin.000001 mysql-bin.000002 > /data/mysqlbak/binlog.sql

备注:须要列出全部binlog

九、primary节点将全部备份数据及binlog.sql发送至backup节点:

# cd /data/mysqlbak

# ls

image.png

# scp -r ./2019-08-22_23\:47\:35_full root@192.168.1.146:/data/mysqlbak/

# scp -r ./2019-08-22_23\:55\:01_incr1 root@192.168.1.146:/data/mysqlbak/

# scp -r ./2019-08-23_00\:03\:29_incr2 root@192.168.1.146:/data/mysqlbak/

# scp binlog.sql root@192.168.1.146:/data/mysqlbak/

备注:使用scp命令时,若是目录名或文件名中带有:冒号的,须要在目录名或文件名以前加上./才能正常发送

十、backup节点准备全量备份:

# ls /data/mysqlbak

image.png

# innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only --use-memory=1GB /data/mysqlbak/2019-08-22_23:47:35_full

image.png

备注:

(1)--redo-only:在进行准备(应用日志)工做时,只会重作已提交但未应用的事务,而不会回滚未提交的事务,把准备好的增量备份(但不包括最后一个)合并到对应的全量备份中

(2)只有在准备工做结束后提示“completed OK!”,才说明准备工做完成

(3)查看全量备份目录下的xtrabackup_checkpoints文件,会发现全量备份的备份类型已变为log-applied

image.png

十一、backup节点准备第一次增量备份:

# innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only --use-memory=1GB /data/mysqlbak/2019-08-22_23:47:35_full --incremental-dir=/data/mysqlbak/2019-08-22_23:55:01_incr1

备注:

(1)--incremental-dir:指定第一次增量备份的路径为/data/mysqlbak/2019-08-22_23:55:01_incr1

(2)只有在准备工做结束后提示“completed OK!”,才说明准备工做完成

(3)查看全量备份目录下的xtrabackup_checkpoints文件,全量备份的备份类型为log-applied,且结束LSN是第一次增量备份结束时的LSN,说明已将第一次增量备份文件合并至全量备份文件中

image.png

十二、backup节点准备第二次增量备份:

# innobackupex --defaults-file=/etc/my.cnf --apply-log --use-memory=1GB /data/mysqlbak/2019-08-22_23:47:35_full --incremental-dir=/data/mysqlbak/2019-08-23_00:03:29_incr2

image.png

备注:

(1)因为这是最后一份增量备份数据,因此不用添加--redo-only选项,事务日志须要应用,该提交的提交,该回滚的回滚

(2)只有在准备工做结束后提示“completed OK!”,才说明准备工做完成

(3)查看全量备份目录下的xtrabackup_checkpoints文件,会发现全量备份的备份类型已变为full-prepared,且结束LSN是第二次增量备份结束时的LSN,说明全部准备工做都已完成,全部增量备份文件都已合并至全量备份文件中

image.png

1三、backup节点中止MySQL服务:# systemctl stop mysqld.service mysqladmin -uroot -p shutdown

1四、backup节点清空数据目录:# mv /var/lib/mysql /tmp/mysql_bak  # mkdir -pv /var/lib/mysql

1五、backup节点将备份数据拷贝至数据目录:

# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/mysqlbak/2019-08-22_23:47:35_full

备注:

(1)/var/lib/mysql数据目录必须为空

(2)在拷贝结束后提示“completed OK!”,才说明拷贝成功

1六、backup节点修改数据目录的属主和属组:# chown -R mysql.mysql /var/lib/mysql

1七、backup节点启动MySQL服务:

# systemctl start mysqld.service  # systemctl status mysqld.service  # ss -tunlp | grep 3306

1八、backup节点查看db1.tb1db2.tb2中的数据:

mysql> select * from db1.tb1;

image.png

mysql> select * from db2.tb2;

image.png

1九、backup节点进行时间点恢复:

mysql> show variables like 'sql_log_bin';

mysql> set sql_log_bin=0;

mysql> show variables like 'sql_log_bin';

mysql> show binary logs;

image.png

mysql> show master status;

image.png

mysql> source /data/mysqlbak/binlog.sql

备注:或使用命令# mysql -uroot -p < /data/mysqlbak/binlog.sql

mysql> show master status;

image.png

mysql> set @@session.sql_log_bin=1;

mysql> show variables like 'sql_log_bin';

20、backup节点查看db1.tb1db2.tb2中的数据:

mysql> select * from db1.tb1;

image.png

mysql> select * from db2.tb2;

image.png

备注:上述三个备份恢复案例互不相关

特别注意:

Ø  备份时将配置文件/etc/my.cnf一块儿备份

Ø  二进制日志也应该周期性地进行备份

Ø  将数据和备份分开存放,建议不在同一设备、同一主机、同一机房、同一地域

Ø  每次灾难恢复后都应该当即作一次全量备份

Ø  备份完成后的数据应该周期性地作恢复测试

相关文章
相关标签/搜索