使用XtraBackup工具物理备份MySQL数据库

简介

Percona XtraBackup是一款开源、免费的MySQL热备份软件,在备份期间不需要停止数据库服务。XtraBackup通过直接拷贝数据文件,比mysqldump备份和导出sql文件这种方式要快得多。

工作原理

XtraBackup基于InnoDB的崩溃恢复功能。它会复制InnoDB数据文件,从而导致数据内部不一致;但随后它会对文件执行崩溃恢复,以使它们再次成为一致的、可用的数据库。

这是因为InnoDB维护了一个重做日志,也称为事务日志。这包含对 InnoDB 数据的每次更改的记录。当InnoDB启动时,它会检查数据文件和事务日志,并执行两个步骤。它将提交的事务日志条目应用于数据文件,并对任何修改数据但未提交的事务执行撤消操作。

对于非InnoDB数据,XtraBackup将使用备份锁进行备份。

版本

XtraBackup有2和8两个大版本,分别对应MySQL5和8两个版本。
如果你的MySQL是5.7及以下版本,使用XtraBackup2.4版本,如果是MySQL8,则使用XtraBackup8.0版本。

安装

XtraBackup具有多种安装方式,这里使用二进制的方式进行安装。
官网下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

XtraBackup2.4(适用于MySQL5)

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/tarball/percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz
tar xvf percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz
mv percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12 /usr/local/xtrabackup
ln -s /usr/local/xtrabackup/bin/* /usr/bin/

XtraBackup8.0(适用于MySQL8)

wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.27-19/binary/tarball/percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.12.tar.gz
tar xvf percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.12.tar.gz
mv percona-xtrabackup-8.0.27-19-Linux-x86_64.glibc2.12 /usr/local/xtrabackup
ln -s /usr/local/xtrabackup/bin/* /usr/bin/

安装验证

xtrabackup --version

显示版本号则说明安装成功。

创建备份用户

在进行备份前,通常要创建一个MySQL用户专门用于备份。当然图省事也可以直接使用root账户,但root账户权限较大,可以修改数据、删除表甚至删除库,而备份数据库不需要这些权限。

在MySQL数据库中执行以下命令创建一个名为backup的账号并授权。其中的yourpassword改为你想设置的密码。

适用于MySQL5

CREATE USER 'backup'@'%' IDENTIFIED BY 'yourpassword';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backup'@'%';
FLUSH PRIVILEGES;

适用于MySQL8

CREATE USER 'backup'@'%' IDENTIFIED BY 'yourpassword';
GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'%';
GRANT SELECT ON performance_schema.log_status TO 'backup'@'%';
GRANT SELECT ON performance_schema.keyring_component_status TO 'backup'@'%';
FLUSH PRIVILEGES;

备份

使用以下命令完成数据库物理备份:

xtrabackup --backup --user=backup --password=yourpassword --target-dir=/home/backup/

显示以下界面则表示备份完成:

备份目录中有如下内容:

参数说明

--user表示备份时使用的MySQL账户
--password表示账户对应的密码
--target-dir指定备份的目标目录,如果目录不存在,会自动创建,如果目录存在且非空会导致备份失败。
除了以上常用的三个参数,还有下列参数:
–-port表示MySQL使用的端口,默认为3306
--host表示MySQL所在的主机地址,默认为localhost
--socket表示mysql.sock文件的路径。默认为/tmp/mysql.sock
可以通过xtrabackup --print-defaults打印参数自带的默认值。

备份注意事项

确保备份路径存在且为空,否则会备份失败。上面例子中的/home/backup/就是一个空文件夹。

还原

停止MySQL服务

还原前需要先停止MySQL服务,使用宝塔面板,可以在面板中停止MySQL服务,如果你是自己安装的也可以通过命令停止:systemctl stop mysql.service

清空data文件夹

清空MySQL的data文件夹。如果你不知道你数据库的data文件夹位置,可以使用如下MySQL语句查询:

show global variables like '%datadir%';

例如我的是在/www/server/data/,使用命令清空该文件夹:rm -rf /www/server/data/*

还原前检查

还原前需要先执行以下命令检查还原文件:

xtrabackup --prepare --target-dir=/home/backup/

开始还原

xtrabackup --copy-back --target-dir=/home/backup/

修改data目录权限

修改data中文件的所有者和属组为mysql用户和组

chown -R mysql:mysql /www/server/data

启动MySQL服务

成功还原后启动MySQL服务,使用宝塔面板,可以在面板中启动MySQL服务,如果你是自己安装的也可以通过命令停止:systemctl start mysql.service

启动后连接数据库检查数据是否已成功还原。

发表评论

邮箱地址不会被公开。 必填项已用*标注