MySQL运维之——xtrabackup工具使用实践

MySQL运维之——xtrabackup工具使用实践

Xtrabackup介绍

Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。

Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup

1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互;

2)innobackupex 是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。

3)xbcrypt 加密解密备份工具

4)xbstream 流传打包传输工具,类似tar

Xtrabackup优点

Xtrabackup优点

1)备份速度快,物理备份可靠

2)备份过程不会打断正在执行的事务(无需锁表)

3)能够基于压缩等功能节约磁盘空间和流量

4)自动备份校验

5)还原速度快

6)可以流传将备份传输到另外一台机器上

7)在不增加服务器负载的情况备份数据

Xtrabackup备份原理

备份原理

备份开始时首先会开启一个后台检测进程,实时检测mysq redo的变化,一旦发现有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,之后复制innodb的数据文件一系统表空间文件ibdatax,复制结束后,将执行flush tables with readlock,然后复制.frm MYI MYD等文件,最后执行unlock tables,最终停止xtrabackup_log

输出如下提示信息

xtrabackup: Transaction log of lsn (2543172) to (2543181) was copied.

171205 10:17:52 completed OK!

Xtrabackup增量备份介绍

xtrabackup增量备份的原理是:

1)、首先完成一个完全备份,并记录下此时检查点LSN;

2)、然后增量备份时,比较表空间中每个页的LSN是否大于上次备份的LSN,若是则备份该页并记录当前检查点的LSN。

增量备份优点:

1)、数据库太大没有足够的空间全量备份,增量备份能有效节省空间,并且效率高;

2)、支持热备份,备份过程不锁表(针对InnoDB而言),不阻塞数据库的读写;

3)、每日备份只产生少量数据,也可采用远程备份,节省本地空间;

4)、备份恢复基于文件操作,降低直接对数据库操作风险;

5)、备份效率更高,恢复效率更高。

Xtrabackup安装(软件包在附件中,根据提示再安装依赖环境)

yum install percona-xtrabackup-24-2.4.7-1.el7.x86_64

一、Xtrabackup全量备份

[root@centos ~]# innobackupex –defaults-file=/etc/my.cnf –user=root –password=”123456″ –backup /tmp

备份后的文件:在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件。

MySQL运维之——xtrabackup工具使用实践

各文件说明:

(1) backup-my.cnf —— 备份命令用到的配置选项信息;

MySQL运维之——xtrabackup工具使用实践

(2) ibdata —— 备份的表空间文件;

(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

MySQL运维之——xtrabackup工具使用实践

(5) xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

MySQL运维之——xtrabackup工具使用实践

(6) xtrabackup_logfile —— 备份的重做日志文件。

在使用innobackupex进行备份时,还可以使用–no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

二、准备(prepare)一个完全备份

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobakupex命令的–apply-log选项可用于实现上述功能。

innobackupex –apply-log /tmp/2014-05-03_17-21-11/

MySQL运维之——xtrabackup工具使用实践

在实现“准备”的过程中,innobackupex通常还可以使用–use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。

三、还原数据库(本机)

(1)模拟数据库损坏

直接使用删除数据目录文件来模拟损坏:

MySQL运维之——xtrabackup工具使用实践

(2)还原完全备份:

innobackupex命令的–copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

innobackupex –copy-back /tmp/2020-05-09_10-48-43/

MySQL运维之——xtrabackup工具使用实践

(3)修改还原后的数据目录权限:

(因为启动脚本里的启动用户是mysql)

MySQL运维之——xtrabackup工具使用实践

(4)启动MySQL

/bin/sh /usr/bin/mysqld_safe –basedir=/usr &

(5)验证还原后的数据:

MySQL运维之——xtrabackup工具使用实践

四、恢复备份库(已经做了主从同步)

(1)、将备份的数据库备份文件推送到备份库上

MySQL运维之——xtrabackup工具使用实践

(2)、停掉,杀死备份库上的数据库服务,并清空data目录

MySQL运维之——xtrabackup工具使用实践

(3)指定选项 –apply-log 和备份文档路径:

[root@localhost tmp]# innobackupex –apply-log /tmp/2020-05-09_12-27-51

MySQL运维之——xtrabackup工具使用实践

(4)指定–copy-back 和备份数据所在目录

[root@localhost tmp]# innobackupex –datadir=/var/lib/mysql –copy-back /tmp/2020-05-09_12-27-51

MySQL运维之——xtrabackup工具使用实践

(5) 修改还原后的数据目录权限:

(因为启动脚本里的启动用户是mysql)

[root@localhost tmp]# chown -Rf mysql.mysql /var/lib/mysql/*

MySQL运维之——xtrabackup工具使用实践

(6)启动MySQL

[root@localhost tmp]# /bin/sh /usr/bin/mysqld_safe –basedir=/usr &

(7)、通过binlog日志进行数据追加恢复

查看下主库上目前的binlog日志的状态

MySQL运维之——xtrabackup工具使用实践

再确认下 xtracbackup 备份目录下,备份时的binlog 日志状态

[root@localhost tmp]# cat /tmp/2020-05-09_12-27-51/xtrabackup_binlog_info

MySQL运维之——xtrabackup工具使用实践

(需要把主库的binlog文件copy到备份库上,再使用mysqlbinlog 手动同步)

【1】、使用 提取指定开始时间的binlog日志导入数据库

[root@localhost tmp]# mysqlbinlog –start-datetime=”2020-05-09 10:00:00″ /tmp/mariadb-bin.000017 | mysql -uroot -p

或者

【2】、使用提取指定position位置的binlog日志导入数据库

[root@localhost tmp]# mysqlbinlog –start-position=”19046615″ –stop-position=”19095287″ /tmp/mariadb-bin.000017 | mysql -uroot -p

(8)、验证下数据

MySQL运维之——xtrabackup工具使用实践
MySQL运维之——xtrabackup工具使用实践

本文版权归 飞翔沫沫情 作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 如有问题, 可发送邮件咨询,转贴请注明出处:https://www.fxkjnj.com/424/

发表评论

登录后才能评论