使用xb文件恢复mysql数据

本文详细介绍如何使用xb文件恢复MySQL数据库的过程,包括环境配置、工具安装、数据库恢复步骤及环境重新搭建。涵盖PerconaXtraBackup不同版本的安装指南,以及通过xbstream和innobackupex进行数据解包、解压、恢复的具体操作。

使用xb文件恢复mysql数据库

【链接】使用xb文件恢复mysql数据库参考博客
https://www.cnblogs.com/changeEveryDay/p/11758727.html

一.环境配置

安装工具Percona XtraBackup
MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方文档Percona XtraBackup 2.3。
MySQL 5.7版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档Percona XtraBackup 2.4。
MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0。
【链接】安装工具参考博客
https://blog.youkuaiyun.com/yt_php/article/details/95342474

1.安装 xbstream

①安装percona-release

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

②安装percona-xtrabackup-24

   yum install percona-xtrabackup-24

③安装qpress

   yum install qpress

2.测试安装是否完成
执行命令测试:

innobackupex --version

xtrabackup: recognized server arguments: --server-id=14051 --datadir=/home/mysql/data --open_files_limit=81920 --log_bin=/home/mysql/data/mysql-bin --innodb_open_files=8000 --innodb_buffer_pool_size=4G --innodb_max_dirty_pages_pct=90 --innodb_io_capacity=1000 --innodb_flush_method=O_DIRECT --innodb_file_per_table=1 --innodb_flush_log_at_trx_commit=0 --innodb_log_file_size=100M --innodb_log_buffer_size=10M --innodb_log_files_in_group=3 --innodb_read_io_threads=6 --innodb_write_io_threads=6
innobackupex version 2.4.12 Linux (x86_64) (revision id: 170eb8c)

xtrabackup --version 

xtrabackup: recognized server arguments: --server-id=14051 --datadir=/home/mysql/data --open_files_limit=81920 --log_bin=/home/mysql/data/mysql-bin --innodb_open_files=8000 --innodb_buffer_pool_size=4G --innodb_max_dirty_pages_pct=90 --innodb_io_capacity=1000 --innodb_flush_method=O_DIRECT --innodb_file_per_table=1 --innodb_flush_log_at_trx_commit=0 --innodb_log_file_size=100M --innodb_log_buffer_size=10M --innodb_log_files_in_group=3 --innodb_read_io_threads=6 --innodb_write_io_threads=6
xtrabackup version 2.4.12 based on MySQL server 5.7.19 Linux (x86_64) (revision id: 170eb8c)

二.恢复数据库

除/www/wwwroot/hins9966309_data_20191213113203_qp.xb是指xb文件全路径,/www/server/mysql/data/是自建的数据库恢复路径其他都是固定格式
1.解包

cat /www/wwwroot/hins9966309_data_20191213113203_qp.xb|xbstream -x -v -C  /www/server/mysql/data/

2.解压

innobackupex --decompress --remove-original /www/server/mysql/data/

3.查看解压文件

ll /www/server/mysql/data/

4.恢复解压好的备份文

innobackupex --defaults-file=/www/server/mysql/data/backup-my.cnf  --apply-log /www/server/mysql/data

5.自建数据库不支持如下参数需要修改/www/server/mysql/data/backup-my.cnf 的配置文件信息
注释下面内容(不存在忽略)
#innodb_log_checksum_algorithm
#innodb_fast_checksum
#innodb_log_block_size
#innodb_doublewrite_file
#rds_encrypt_data
#innodb_encrypt_algorithm
#redo_log_version
#master_key_id
6.授权数据目录

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

7.数据备份:

 mysqld_safe --defaults-file=/www/server/mysql/data/backup-my.cnf --user=mysql --datadir=/www/server/mysql/data/ &

8.拷贝恢复好的数据库放到MySQL
将恢复好的库文件,ibdata1,ib_logfile* 文件拷贝到数据库datadir路径下面

9.重启数据库

systemctl restart mysqld

10. 验证数据库是否启动成功

mysql -u root -p

三.重新搭建环境

参考卸载Percona Xtrabackup博客
http://blog.itpub.net/15498/viewspace-2168488/
1.卸载 xbstream
①卸载percona-release

   yum remove percona-release

②卸载percona-xtrabackup-24

yum remove percona-xtrabackup-24

③卸载qpress

 yum remove qpress

注意:卸载的插件可能要加版本

<think>我们已知用户的目标是将xb格式的增量备份文件恢复MySQL数据库。根据之前的对话历史和提供的引用,我们可以总结出以下关键点: 1. 用户提到的是“xb文件增量恢复”,而引用中提到了.xb文件实际上是经过xbstream流式压缩的备份文件(引用[2]和引用[3])。 2. 引用[1]和引用[3]提到了如何解压.xb文件:使用`xbstream -x`命令进行解压,并且可以配合`--decompress`选项解压(如果备份时使用了压缩)。 3. 引用[2]中展示了备份脚本,其中使用了`--stream=xbstream`和`--compress`选项,因此备份文件是压缩过的.xbstream格式(文件扩展名为.xbstream,但用户可能简称为.xb)。 4. 用户之前的问题是关于XtraBackup增量恢复的,我们之前已经给出了增量恢复的步骤,但当时假设的是已经解压后的备份目录。现在用户直接面对的是.xb文件,所以需要先解压。 因此,完整的增量恢复步骤应该包括: 1. 解压基础全量备份(如果有多个增量备份,则需要解压全量备份和所有增量备份)。 2. 应用日志(prepare)的过程,包括全量备份和增量备份的连续应用。 3. 恢复数据MySQL数据目录并启动。 具体步骤: ### 步骤1: 解压备份文件 假设我们有以下备份文件(按时间顺序): - 全量备份:`full_backup_20240101.xb` - 增量备份1:`inc_backup_20240102.xb` - 增量备份2:`inc_backup_20240103.xb` #### 1.1 创建解压目录 ```bash mkdir -p /path/to/backup/full mkdir -p /path/to/backup/inc1 mkdir -p /path/to/backup/inc2 ``` #### 1.2 解压全量备份 ```bash # 使用xbstream解压,并解压缩(如果备份时压缩了) xbstream -x -C /path/to/backup/full < full_backup_20240101.xb xtrabackup --decompress --target-dir=/path/to/backup/full ``` #### 1.3 解压增量备份 ```bash # 解压增量备份1 xbstream -x -C /path/to/backup/inc1 < inc_backup_20240102.xb xtrabackup --decompress --target-dir=/path/to/backup/inc1 # 解压增量备份2 xbstream -x -C /path/to/backup/inc2 < inc_backup_20240103.xb xtrabackup --decompress --target-dir=/path/to/backup/inc2 ``` 注意:如果备份时没有使用压缩(即没有`--compress`选项),则可以跳过`xtrabackup --decompress`步骤。但根据引用[2],备份脚本中使用了`--compress`,所以需要解压缩。 ### 步骤2: 准备(prepare)备份 #### 2.1 准备基础全量备份 ```bash xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full ``` #### 2.2 应用第一个增量备份 ```bash xtrabackup --prepare --apply-log-only --target-dir=/path/to/backup/full \ --incremental-dir=/path/to/backup/inc1 ``` #### 2.3 应用最后一个增量备份(注意:最后一个增量备份不使用`--apply-log-only`) ```bash xtrabackup --prepare --target-dir=/path/to/backup/full \ --incremental-dir=/path/to/backup/inc2 ``` ### 步骤3: 恢复数据MySQL #### 3.1 停止MySQL服务 ```bash systemctl stop mysqld ``` #### 3.2 清空MySQL数据目录(确保有备份或确认可以清空) ```bash rm -rf /var/lib/mysql/* ``` #### 3.3 复制数据 ```bash xtrabackup --copy-back --target-dir=/path/to/backup/full ``` #### 3.4 修改数据目录权限 ```bash chown -R mysql:mysql /var/lib/mysql ``` #### 3.5 启动MySQL ```bash systemctl start mysqld ``` ### 注意事项 1. 在解压步骤,如果希望解压后删除原始的压缩文件(以节省空间),可以在`xtrabackup --decompress`命令中加入`--remove-original`选项(需要Percona Xtrabackup 2.4.6及以上版本)[^1]。 2. 在准备增量备份时,必须确保增量备份的顺序,并且每个增量备份的LSN必须连续。如果出现不连续,则恢复会失败。 3. 恢复前确保有足够的磁盘空间,因为解压和准备过程需要额外的空间。 ### 引用标注 - 解压步骤参考了引用[1]和引用[3]。 - 备份时使用的压缩选项参考了引用[2]。 ### 相关问题 §§相关问题§§ 1. 如何验证XtraBackup增量备份的LSN连续性? 2. 增量恢复过程中出现"log sequence number mismatch"错误如何解决? 3. XtraBackup与MySQL Enterprise Backup在增量恢复机制上有何区别? 4. 如何自动化XtraBackup增量备份的恢复过程?</think>### XtraBackup增量备份恢复完整指南 根据您提供的引用信息和增量恢复需求,以下是完整的.xb文件增量恢复步骤: #### 步骤1: 解压备份文件 ```bash # 创建解压目录 mkdir -p /data/mysql_recovery/full mkdir -p /data/mysql_recovery/inc1 # 解压基础全量备份 xbstream -x -C /data/mysql_recovery/full < /path/to/full_backup.xb # 解压增量备份 xbstream -x -C /data/mysql_recovery/inc1 < /path/to/incremental_backup.xb ``` > **注意**:如果备份文件经过压缩(如使用`--compress`参数创建),需先解压: > ```bash > xtrabackup --decompress --target-dir=/data/mysql_recovery/full > xtrabackup --decompress --target-dir=/data/mysql_recovery/inc1 > ``` > 添加`--remove-original`可删除原始压缩文件(XtraBackup ≥2.4.6)[^1] #### 步骤2: 准备备份文件 ```bash # 准备基础备份 xtrabackup --prepare --apply-log-only \ --target-dir=/data/mysql_recovery/full # 应用增量备份(注意顺序) xtrabackup --prepare --apply-log-only \ --target-dir=/data/mysql_recovery/full \ --incremental-dir=/data/mysql_recovery/inc1 ``` > **关键点**: > 1. 多个增量备份需按时间顺序依次应用 > 2. 最后一个增量备份不加`--apply-log-only`: > ```bash > xtrabackup --prepare --target-dir=/data/mysql_recovery/full > ``` #### 步骤3: 恢复数据MySQL ```bash # 停止MySQL服务 systemctl stop mysqld # 清空数据目录(确保已备份) rm -rf /var/lib/mysql/* # 执行恢复 xtrabackup --copy-back --target-dir=/data/mysql_recovery/full # 修正文件权限 chown -R mysql:mysql /var/lib/mysql ``` #### 步骤4: 启动验证 ```bash # 启动MySQL systemctl start mysqld # 验证数据完整性 mysql -e "CHECK TABLE your_critical_table" ``` ### 关键注意事项 1. **LSN连续性检查**: ```bash cat /data/mysql_recovery/full/xtrabackup_checkpoints cat /data/mysql_recovery/inc1/xtrabackup_checkpoints ``` 确保前一个备份的`to_lsn`等于后一个的`from_lsn`[^3] 2. **权限要求**: - 恢复操作需要系统root权限 - 数据库用户需有`BACKUP_ADMIN`权限(如引用[2]中的backup用户) 3. **空间要求**: - 解压和恢复过程需要 **1.5倍原数据大小** 的临时空间 - 使用`--tmpdir`指定大容量临时目录: ```bash xtrabackup --prepare --tmpdir=/mnt/big_disk ... ``` 4. **自动化建议**: - 使用脚本管理备份链(参考引用[2]的定时脚本) - 记录各备份的LSN到元数据文件 > **生产环境警告**:操作前务必在测试环境验证,并备份原数据文件[^3] ### 引用说明 - 解压操作参考引用[1][^1]和引用[3][^3] - 备份用户权限配置参考引用[2][^2] - 启动验证参考引用[4][^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值