mysql数据库备份之percona Xtrabackup

tech2022-07-29  143

项目准备上线,第一件事恐怕就是需要做好数据容灾处理,就算不做异地容灾,但是不同服务器的数据备份得赶紧安排上。不然数据库出问题那就啥啥啥都没了。今天我们整理的是一个高效,并且可以热备的工具。

Percona XtraBackup 工具提供了一种再系统运行时执行MySql数据热备份的方法。 本文讲述的是在Linux环境下的Mysql 5.7的数据库整库备份,是作为我们去年数据库备份工具。

一、为什么选择XtraBackup

公司组建开发团队,以前公司系统外包出去。去年年初到了现在的公司,一顿检查吓了一大跳。线上数据库未做备份,询问了未做备份的原因是每天放在凌晨开始备份,但是备份需要10多个小时,到了工作时间会影响正常系统使用!!!我当时就想问问,如果数据库服务器崩溃了咋个办呢?仔细看了下使用mysqldump进行数据库备份,但是由于数据库较大,所以每次备份较慢。 去年线上数据库使用的是mysql 5.7版本,数据库文件基本在250G左右。最大的业务表已经上亿,如果我们接着使用mysqldump进行数据库备份同样无法及时备份完成。调研后我们决定采用XtraBackup进行数据库备份,而决定使用它的原因如下:

支持热备份(虽然备份时业务操作同样会卡顿,但是还是能够支持正常使用)可以进行增量备份(虽然我们都是整备)备份速度较快恢复速度较快对我来说是个新东西,值得学习

二、下载XtraBackup

官网下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/ 根据不同的服务器环境及数据库环境选择不同的安装包,下载完成后直接进行安装即可。(本文使用的版本是2.4版本)


三、使用XtraBackup备份数据库

使用XtraBackup进行备份有两种语法,一种是直接使用xtrabackup,另外一中是innobackupex。两种语法都可以实现备份功能,只是innobackupex是对xtrabackup语法的封装,在本文中是使用innobackupex进行操作,官方文档中是使用xtrabackup进行说明。

全部备份数据库语法:

innobackupex --defaults-file=数据库配置文件 --user=数据库用户 -password='数据库密码' --parallel=线程数 备份目的目录 --no-timestamp

eg:

innobackupex --defaults-file=/etc/my.cnf --user=copy --password='123456' --parallel=4 /home/data/backup --no-timestamp 在上面的语句中我们可以看出我们新建了一个密码123456的账户copy来进行数据库备份。数据库的配置文件地址在/etc/my.cnf,且我们使用4个并发线程将数据库备份到/home/data/backup下。

我们可以通过下面参数指定数据库已经压缩备份文件

--database='数据库名称' --stream=tar ./|gzip -> test.tar.gz (将备份文件压缩)

四、还原数据库

注意:恢复数据库备份之前,mysql数据库的data目录必须唯恐,而且在执行以下语句前需要关闭数据库。

准备恢复备份

在使用xtrabackup进行数据库备份时,因为程序运行在不同的时间进行复制,在此过程中可能时间被修改,导致数据库文件会出现奔溃问题。而当前 这个步骤是让InnoDB使用复制的日志文件对复制的数据库文件执行检测算坏以及修复数据文件奔溃。

语法

innobackupex --defaults-file=数据库配置文件 --apply-log 备份文件

eg

innobackupex --defaults-file=/etc/my.cnf --apply-log /home/data/backup/

开始恢复备份

语法

innobackupex --defaults-file=数据库配置文件 --copy-back 备份文件

eg

innobackupex --defaults-file=/etc/my.cnf --copy-back /home/data/backup/

当两个依次执行完毕,并且都输出了“innobackupex: completed OK!”时说明备份已经完成了。

小技巧: 由于我们的数据库比较大,恢复时间也在20-30分钟左右,有时候时间久了可能远程工具连接失败了。在这里教大家一个将执行过程放到后台的方法,放到后台后就算关闭远程工具也不影响。

ctrl+z --暂停命令(按键) bg 1 --将目前的第一个命令放到后台执行 disown -h %1 --就是将作业号为1的作业从作业列表中删除,在shell退出的时候将其作为init的子进程继续执行。

五、启动数据库

接下来我们需要授权数据目录权限到mysql用户上

chown -R mysql:mysql /var/lib/mysql

执行数据库启动命令:

systemctl start mysqld 到这里我们的数据库备份及还原就结束了


六、总结

XtraBackup备份速度的确比较快,我们200多G的数据库备份时间在20分钟左右。但是备份后压缩的文件比mysqldump稍大,mysqldump备份文件在10G左右,XtraBackup在25G左右。XtraBackup还原数据库也比较快,我们的数据库还原基本上可以在30分钟以内完成。XtraBackup需要与数据库放在同一台服务器上,且mysql得在本地安装。虽然XtraBackup官网文档中支持远程备份,但是我在进行远程备份时无法进行备份。所以我们在将数据库从5.7升级至8.0以后,因为我们的mysql数据库使用docker进行部署,所以XtraBackup就用不了。当时还裸奔了几天,每天都提心吊胆滴!后面改用了其他的备份方式。因为XtraBackup我无法在两台服务器备份,所以我当时是备份后通过scp命令将文件传输到其他服务器做数据库备份。虽然有点繁琐,但是还是实现了异机备份。我在下一篇文章将会整理docker部署的mysql8数据库远程备份。
最新回复(0)