MySQL使用xtrabackup进行完整备份与还原操作
本文演示了如何利用 Percona XtraBackup 工具对 MySQL 数据库执行完整的备份流程,并在另一台服务器上实现数据的完全还原。主要步骤包括:环境准备与依赖安装、配置具备特定权限的备份专用账户、生成压缩版全量备份文件、对备份集进行事务日志回放以保持一致性,最后在目标端清理旧数据并导入备份文件完成迁移。
环境准备与工具安装
在进行备份之前,需要确保服务器已安装 xtrabackup 及相关依赖。如果使用 RPM 包安装,通常需要安装 Perl 模块、Libaio 以及 Libev 等基础库。
1. 安装依赖与软件包
首先安装系统基础依赖:yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL rsync。随后依次安装 libev4 和 percona-xtrabackup RPM 包。请根据实际操作系统版本选择合适的软件包路径。
配置备份专用账户
出于安全考虑,不建议直接使用 root 账号进行备份,而是创建一个具有特定权限的专用备份用户。该用户需要拥有 SELECT、RELOAD、PROCESS、SHOW DATABASES、SUPER、LOCK TABLES、REPLICATION CLIENT、SHOW VIEW 和 EVENT 权限。
2. 创建并授权备份用户
-- 创建用户并设置密码 CREATE USER 'backuper'@'localhost' IDENTIFIED BY 'backup@123'; -- 授予必要权限 GRANT SELECT, RELOAD, PROCESS, SHOW DATABASES, SUPER, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT ON *.* TO 'backuper'@'localhost'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
执行全量备份
确认备份环境及账号后,即可执行全量备份。为避免占用过多磁盘空间,通常建议将备份数据打包为 tar 格式并进行 gzip 压缩。备份完成后,请务必检查命令的执行状态以确保备份成功。
3. 创建备份目录
新建一个专门用于存放备份文件的目录,例如:/export/mysql_backup/。
4. 运行备份命令
使用 innobackupex 命令连接 MySQL 实例并将输出流式传输到 tar 归档中,最后压缩保存。若从库备份需保留主库 binlog 信息用于同步重建,可添加 --slave_info --safe-slave-backup 参数;默认情况下,binlog 信息会记录在 xtrabackup_binlog_info 文件中。
# 注意替换实际的路径、端口、用户名和密码 innobackupex \ --defaults-file="/export/servers/mysql/etc/my.cnf" \ --host="localhost" \ --port=3358 \ --user="backuper" \ --password="backup@123" \ --socket="/export/data/mysql/tmp/mysql.sock" \ --stream=tar \ /export/mysql_backup/ | gzip > /export/mysql_backup/mysql_full_backup.tar.gz
备份文件解压与日志处理
备份结束后,将生成的压缩包传输至目标服务器的相同目录下。由于 xtrabackup 采用的是物理拷贝机制,为了保证数据的一致性,需要对备份集中的事务日志进行“回放”(Prepare)操作。
5. 解压与预处理备份集
建议在空白目录中解压,以免覆盖其他文件。解压后,使用 --apply-log 选项处理事务日志,这会重做已完成的事务并回滚未提交的事务。
cd /export/mysql_backup/ tar xvf mysql_full_backup.tar.gz # 执行日志准备(Prepare),这会将备份转换为可直接恢复的状态 innobackupex --apply-log /export/mysql_backup/
目标服务器数据还原
在目标服务器上进行还原前,必须确保 MySQL 的数据目录是空的或已被移走。此外,xtrabackup 仅备份数据文件,不包含错误日志或慢查询日志等目录结构,因此还原后需手动补建这些目录。
6. 清理与迁移原数据目录
为防止误操作,先使用移动命令将现有的数据目录重命名作为临时备份:mv /export/data/mysql /export/data/mysql_bak。
7. 重建必要的子目录
手动创建 MySQL 运行时所需的子目录(如 tmp, data, log 等):
mkdir -p /export/data/mysql/tmp /export/data/mysql/data /export/data/mysql/log
8. 回退(Move-back)数据文件
使用 --move-back 参数将预处理好的备份文件移动至新的数据目录。也可以使用 --copy-back 进行复制操作。
innobackupex --defaults-file="/export/servers/mysql/etc/my.cnf" --move-back /export/mysql_backup/
9. 修改权限并启动服务
数据归位后,需要将所有文件的所有权修改为 MySQL 运行用户(通常为 mysql:mysql),否则数据库将无法读取数据。最后启动 MySQL 服务,登录数据库校验数据是否恢复完整。
# 递归修改文件所有者和所属组 chown -R mysql:mysql /export/data/mysql # 启动 MySQL 服务 service mysqld start # 或 systemctl start mysqld
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













