使用Xtrabackup备份MySQL数据库

  • 2019 年 10 月 4 日
  • 筆記

Xtrabackup是 Percona公司开发的一款开源的能够对innodb和xtradb数据库引擎进行数据库热备的工具,支持MySQL、Percona server和MariaDB,是目前较为受欢迎的主流MySQL数据库备份工具

Xtrabackup有如下几大特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

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

(4)自动实现备份检验;

(5)还原速度快;


XtraBackup 2.4版本官方下载地址

https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/


下面演示使用Xtrabackup对CentOS7系统上的MySQL数据库进行备份

先提前下载CentOS7版本的Xtrabackup RPM安装包

https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.15/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

1、下面使用mysql初始安装脚本+编辑好的/etc/my.cnf MySQL配置文件进行安装mysql数据库,脚本如下

当然可以参考之前的文章进行MySQL的手动安装——CentOS6下安装MySQL5.7.25二进制版本

编写的脚本比较简单,可以忽略脚本的健壮性

#!/bin/sh

installMySQL_LOG="/root/installMySQL.log"

echo `date` >>$installMySQL_LOG

groupadd mysql >>$installMySQL_LOG 2>&1

useradd -g mysql -s /sbin/nologin mysql >>$installMySQL_LOG 2>&1

tar -zxf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

mv /usr/local/mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql

cp -f ./my.cnf /etc/my.cnf

mkdir -p /usr/local/mysql/data

chown -R mysql:mysql /usr/local/mysql/

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

cd /usr/local/mysql/bin

./mysqld –initialize –user=mysql –basedir=/usr/local/mysql/ –datadir=/usr/local/mysql/data/ >>$installMySQL_LOG 2>&1

chkconfig –add mysqld >>$installMySQL_LOG 2>&1

chkconfig mysqld on >>$installMySQL_LOG 2>&1

echo "PATH=$PATH:/usr/local/mysql/bin">>/etc/profile

echo "export PATH">>/etc/profile

source /etc/profile

if [ ! -e /tmp/mysql.sock ];then

ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock >>$installMySQL_LOG 2>&1

fi

service mysqld stop

sed -i '2i skip-grant-tables' /etc/my.cnf

service mysqld start

/usr/local/mysql/bin/mysql -uroot -e"use mysql;update user set authentication_string = password('Admin@2019') where user = 'root';flush privileges;"

sed -i '/skip-grant-tables/d' /etc/my.cnf

/etc/init.d/mysqld restart >>$installMySQL_LOG 2>&1

/usr/local/mysql/bin/mysql –connect-expired-password -uroot -pAdmin@2019 -e"SET PASSWORD = PASSWORD('MySQL@2019');flush privileges;"

my.cnf配置文件内容如下

2、执行./installMySQL.sh 安装MySQL

3、安装完成后,导入测试数据库脚本test.sql

4、使用常用mysql数据库命令查看

5、表中插入几条测试数据

6、接下来安装Xtrabackup

上传percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

解决包依赖问题,采用yum localinstall -y percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm 进行安装xtrabackup RPM包

7、接下来使用xtrabackup进行一次数据库的全量备份

创建数据库备份文件存放目录并使用xtrabackup的命令innobackupex进行全量备份

mkdir /backup

innobackupex –defaults-file=/etc/my.cnf –user=root –password=MySQL@2019 –socket=/tmp/mysql.sock /backup

待全库全量备份完成后,可以在/backup目录下以日期时间命名的数据备份文件

8、下面模拟数据库损坏,并使用xtrabackup进行恢复

假设删掉数据库的数据目录

rm -rf /usr/local/mysql/data/

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

innobackupex –apply-log /backup/2019-09-14_23-00-01/

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

10、还原全量备份

innobackupex –copy-back 从完全备份目录中恢复数据

innobackupex –copy-back /backup/2019-09-14_23-00-01/

cd /usr/local/mysql/data/可以看到还原回来的数据库数据文件

chown -R mysql.mysql /usr/local/mysql/data/ 修改属主属组为mysql.mysql

重启mysqld服务后登录数据库验证数据库是否完全还原回来

可以看到数据库全量备份还原成功

以上是Xtrabackup全量备份操作,下次介绍一下利用Xtrabackup进行增量备份