简介
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
启动后连接数据库检查数据是否已成功还原。