利用Xtrabackup进行单库备份、单表恢复实例

13 篇文章 0 订阅

写在前面:
    笔者在实际工作中发现,对于数据恢复来说,更多情况下面临的问题是:单个数据库中的某个或者某几个表出现了问题,很少对整个库的数据进行恢复,除非硬盘损坏或者手抖执行了DROP,笔者就单库备份,单表恢复的场景进行记录(需要全库备份、全库恢复需求的同行,自行百度),如有不当之处,望请留言指正,不胜感激!

环境准备:
        1)Xtrabackup版本的选择
不同版本的MySQL需要使用不同版本的 Percona XtraBackup。
笔者的MySQL版本是5.6的,需要下载2.2版本的Percona XtraBackup,另外MySQL5.1对应XtraBackup2.1,MySQL5.7对应XtraBackup2.4(笔者,没有验证,仅供参考)

[root@backup ~]# xtrabackup --version
xtrabackup version 2.2.13 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 70f4be3)

Percona XtraBackup2.2下载地址

        2)创建一个最小化备份权限用户

mysql> grant reload,process,lock tables,replication client on *.* to xtrauser@'localhost' identified by 'xtrauser@123';
mysql> flush privileges;

        3)这里利用的是表空间传输特性进行的数据恢复,所以你得是InnoDB表,而且开启了innodb_file_per_table参数

 

单库备份:

[root@backup ~]# innobackupex --databases='bailidb' --defaults-file=/home/data/mysql3306/my.cnf --user='xtrauser' --password='xtrauser@123' --socket='/tmp/mysql.sock' /home/dbback/

 

数据变更:

UPDATE `bailidb`.`bl_country` SET `keywords` = '取经' WHERE `id` = '8';
INSERT INTO `bailidb`.`bl_auth_assignment` (`item_name`, `user_id`, `created_at`) VALUES ('lzb', '2', '3'); 

 

增量备份:
[root@backup ~]# innobackupex --defaults-file=/home/data/mysql3306/my.cnf --user='xtrauser' --password='xtrauser@123' --socket='/tmp/mysql.sock' --incremental /home/increment --incremental-basedir=/home/dbback/2019-04-04_16-20-28/

 

预备完整备份:
[root@backup home]# innobackupex --apply-log --redo-only /home/dbback/2019-04-04_16-20-28/
为什么预备完整备份?

因为在Xtrabackup备份过程中,可能会有新的事务生成,直接进行数据恢复的话,会造成数据的不一致,所以,在数据恢复之前,需要将Xtrabackup备份过程尚未提交的事务回滚,已经提交但未同步的事务进行同步,这个过程就叫预备完整备份

 

合并增量备份:
[root@backup home]# innobackupex --apply-log --redo-only /home/dbback/2019-04-04_16-20-28/ --incremental-dir=/home/increment/2019-04-04_16-23-45/

为什么要合并?

简单来说,就是将新增数据和原来的数据合并到一起,使其达到数据一致性

 

数据恢复:

1)将bailidb库的bl_auth_assignment表在test库创建(当然了,可以直接在原来的数据表基础上进行数据恢复,前提是你做了数据备份)

2)丢弃原来的ibd文件表空间

mysql>ALTER TABLE `bl_auth_assignment` DISCARD TABLESPACE

3)复制bl_auth_assignment表的ibd文件,到test库下

[root@backup home]# cp /home/dbback/2019-04-04_16-20-28/bailidb/bl_auth_assignment.ibd /home/data/mysql3306/test/
[root@backup home]# cd /home/data/mysql3306/test/

4)更改ibd文件权限

[root@backup test]# chown mysql.mysql bl_auth_assignment.ibd

5)导入表空间文件

ALTER TABLE `bl_auth_assignment` IMPORT TABLESPACE

6)最后将其复制到原来的数据库下(bailidb)

xtrabackup是一种备份工具,可用于对MySQL数据库进行全量或增量备份。在备份过程中,xtrabackup会创建一个完整的数据库备份,包括所有的表和数据。如果需要从xtrabackup备份恢复单张表,可以使用可移动表空间(Transportable Tablespace)功能来实现。从MySQL 5.6版本开始,支持可移动表空间功能,该功能允许将单个表从一个数据库实例移动到另一个实例。 要从xtrabackup备份恢复单张表,可以按照以下步骤进行操作: 1. 使用xtrabackup备份整个MySQL数据库。 2. 将备份文件解压到指定的目录,并确保解压后的备份文件包含了所有表的数据和结构。 3. 使用MySQL的物理备份工具innobackupex来恢复备份文件。这个工具可以将备份文件还原到指定的目录。 4. 在还原过程中,可以选择只恢复需要的表。可以将需要恢复的表复制到新的数据库实例中,或者使用可移动表空间(Transportable Tablespace)功能将表从备份中移动到现有的数据库实例中。 5. 如果备份后的数据中有插入操作,但在恢复过程中没有出现,请使用binlog进行恢复。binlog是MySQL的二进制日志,可以用于恢复备份后的插入操作。 请注意,以上步骤仅适用于使用xtrabackup进行备份的MySQL数据库,且需要使用MySQL 5.6版本或更高版本支持可移动表空间功能。有关更详细的步骤和示例,请参考中提供的链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [从xtrabackup备份恢复单表](https://blog.csdn.net/yimenglin/article/details/106902717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值