Xtrabackup 2.4.7 全备_binlog日志恢复1

+++++++++ 安装
操作系统:Centos 7.4 mysql 5.7.28 gtid_on
cd /opt
yum install -y wget perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5
wget http://www.xchinagroup.top/softdown/centos7/03_mysql/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
官网下载:
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz

tar zxvf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
mv percona-xtrabackup-2.4.7-Linux-x86_64 xtrabackup-2.4.7
ln -s /opt/xtrabackup-2.4.7/bin/xtrabackup /usr/bin/xtrabackup
ln -s /opt/xtrabackup-2.4.7/bin/innobackupex /usr/bin/innobackupex
+++++++++++++++++++++++++++++++++++
全备:
+++++++++++++++++++++++++++++ 备份命令1:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 -S /usr/local/mysql/mysql.sock /bak >/tmp/full.log 2>&1
默认会在备份目录下面生成一个当天日期时间目录
--parallel="3" 开启几个线程,默认为1,也可以不用写这个参数。
--no-timestamp 生成的备份文件不以时间戳为目录,就是不生成日期时间目录
查看备份日志 cat /tmp/full.log


进入到备份目录: cd /bak/2020-01-02_16-02-05/


cat xtrabackup_checkpoints #可以看到备份的类型:


+++++++++++++++++++++++++ 备份命令2:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=127.0.0.1 /bak >/tmp/full.log 2>&1
前提是 root@127.0.0.1 这个用户必须在,而且还要有权限备份。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
全备恢复:
登录数据库:在原有表上再插入一条数据,模拟有数据写入。


这时数据库目录被删除,用xtrabackup 全备进行恢复数据。
停止数据库:systemctl stop mysqld
将数据目录移走,再创建一个新的空的数据目录,并授权,模拟成数据目录被删除。



开始恢复操作:
进入到备份目录的,上一级目录。cd /bak
2020-01-02_16-02-05 代表备份的全备目录


1、先使数据文件一致性
innobackupex --apply-log --user-memory=64m 2020-01-02_16-02-05
--user-memory 默认为100m
也可以不进入到备份目录的上级目录,后面直接跟完整路径。


--user-memory=64m #使用的内存,这里根据自己实际情况来定,如果你的服务器内存大,可以写 2G
这条命令执行完成后,并没有把数据拷贝到mysql的数据目录下。
++++++++++++
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为在备份的数据中,可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务,因此,此时数据 文件仍处于不一致状态。
+++:意思是,在备份过程中,有可能还有数据写入以及未来得及提交的事务。
--apply-log 的作用是:通过回滚未提交的事务及同步已经提交的事务,至数据文件,使数据 文件处于一致性的状态。
未提交的事务我们就要回滚,已提交的事务我们就要同步到数据文件中。
--apply-log 简单来说,就是保证数据一致性。
innobackupex --apply-log --user-memory= 64m 2020-01-02_16-02-05


2、进入到备份目录的上级目录,执行如下命令。
innobackupex --copy-back 2020-01-02_16-02-05
# 2020-01-02_16-02-05 这个是备份的目录,也可以手动拷贝
手动拷贝的话,最好用rsync
rsync -avrP /bak/ 2020-01-02_16-02-05 --exclude='xtrabackup_*' /data/mysql
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-P 传输进度
-v 传输时的进度等信息
-r 递归


3、最后还要改一下,数据目录的属主。
cd /data && chown -R mysql:mysql mysql
4、启动数据库
systemctl start mysqld


数据并没有完全回来,因为在备份完成后,又添加了新的记录。还需要再应用日志恢复。
5、再通过binlog日志,进行最后的恢复。
先确定gtid_mode的状态,为on 需要关闭。


查看备份目录中的xtrabackup_binlog_info 这里面记录了日志的最后位置


进入到日志目录:cd /usr/local/mysql/logs


将日志文件中的sql语句导出
mysqlbinlog --start-position=2620 mysql_bin.000002 mysql_bin.000003 >/tmp/bak.sql
登录数据库,利用这个sql文件还原。

 不用管


最后再把gtid_mode设置成on,一步一步操作,不能直接设置成on 或者 off。
set @@global.gtid_mode=off_permissive;
set @@global.gtid_mode=on_permissive;
set @@global.gtid_mode=on;
mysqlbinlog --base64-output=decode-rows -v --start-position=2620 mysql_bin.000002|more
这条命令可以查看到mysql日志中的sql语句