xtrabackup恢复单表

在一般生产环境下可能会删表,这时候如果基于数据库恢复,然后再把那个表恢复过来,就比较麻烦,这里提供一个基于物理备份直接恢复单表的方法

在innodb引擎设置独立表空间,一般表对应的物理文件有两个

-rw-r-----. 1 mysql mysql     8728 Jan 19 07:42 OrderItems.frm
-rw-r-----. 1 mysql mysql   114688 Jan 19 07:42 OrderItems.ibd

一个是ibd文件,里面存放表中的数据,frm文件是表格式文件,存放表的一些元数据信息,于是如果我们删表了,那么数据文件就没了,但是如果我们可以重新创建一个frm文件,然后再补上一个我们物理备份的对应表的idb文件,是不是就ok了。下面测试

首先我们先取得这个表的建表语句

mysql> SHOW CREATE TABLE OrderItems\G;
*************************** 1. row ***************************
       Table: OrderItems
Create Table: CREATE TABLE `OrderItems` (
  `order_num` int(11) NOT NULL,
  `order_item` int(11) NOT NULL,
  `prod_id` char(10) NOT NULL,
  `quantity` int(11) NOT NULL,
  `item_price` decimal(8,2) NOT NULL,
  PRIMARY KEY (`order_num`,`order_item`),
  KEY `FK_OrderItems_Products` (`prod_id`),
  CONSTRAINT `FK_OrderItems_Orders` FOREIGN KEY (`order_num`) REFERENCES `Orders` (`order_num`),
  CONSTRAINT `FK_OrderItems_Products` FOREIGN KEY (`prod_id`) REFERENCES `Products` (`prod_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

然后模拟故障删表

DROP TABLE OrderItems;

开始恢复,用先前备份的建表语句再创建一个表

mysql> CREATE TABLE `OrderItems` (
    ->   `order_num` int(11) NOT NULL,
    ->   `order_item` int(11) NOT NULL,
    ->   `prod_id` char(10) NOT NULL,
    ->   `quantity` int(11) NOT NULL,
    ->   `item_price` decimal(8,2) NOT NULL,
    ->   PRIMARY KEY (`order_num`,`order_item`),
    ->   KEY `FK_OrderItems_Products` (`prod_id`),
    ->   CONSTRAINT `FK_OrderItems_Orders` FOREIGN KEY (`order_num`) REFERENCES `Orders` (`order_num`),
    ->   CONSTRAINT `FK_OrderItems_Products` FOREIGN KEY (`prod_id`) REFERENCES `Products` (`prod_id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)

然后删除表空间

-- 删除表空间,只剩表结构
mysql> ALTER TABLE OrderItems DISCARD TABLESPACE;

然后从xtrabackup的全备中,找到这个文件复制过去

cp /backup/xtrabackup_backupfiles/mydb/OrderItems.ibd  /data/mydb/OrderItems.ibd
chown mysql:mysql /data/mydb/OrderItems.ibd

导入表空间

-- 导入表空间,前提是数据符合表结构
ALTER TABLE OrderItems IMPORT TABLESPACE;

检查数据

mysql> SELECT * FROM OrderItems;
+-----------+------------+---------+----------+------------+
| order_num | order_item | prod_id | quantity | item_price |
+-----------+------------+---------+----------+------------+
|     20005 |          1 | BR01    |      100 |       5.49 |
|     20005 |          2 | BR03    |      100 |      10.99 |
|     20006 |          1 | BR01    |       20 |       5.99 |
|     20006 |          2 | BR02    |       10 |       8.99 |
|     20006 |          3 | BR03    |       10 |      11.99 |
|     20007 |          1 | BR03    |       50 |      11.49 |
|     20007 |          2 | BNBG01  |      100 |       2.99 |
|     20007 |          3 | BNBG02  |      100 |       2.99 |
|     20007 |          4 | BNBG03  |      100 |       2.99 |
|     20007 |          5 | RGAN01  |       50 |       4.49 |
|     20008 |          1 | RGAN01  |        5 |       4.99 |
|     20008 |          2 | BR03    |        5 |      11.99 |
|     20008 |          3 | BNBG01  |       10 |       3.49 |
|     20008 |          4 | BNBG02  |       10 |       3.49 |
|     20008 |          5 | BNBG03  |       10 |       3.49 |
|     20009 |          1 | BNBG01  |      250 |       2.49 |
|     20009 |          2 | BNBG02  |      250 |       2.49 |
|     20009 |          3 | BNBG03  |      250 |       2.49 |
+-----------+------------+---------+----------+------------+
18 rows in set (0.00 sec)

可以看到数据都回来了

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 ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值