作者:俊达
xtrabackup支持单表恢复。如果一个表使用了独立表空间(innodb_file_per_table=1),就可以单独恢复这个表。
1、Prepare
prepare时带上参数--export,xtrabackup会生成import tablespace需要的文件。
# xtrabackup --prepare --export --target-dir=. > export.log 2>&1
查看日志,确认prepare成功。
查看目标数据库下的文件,这里我们希望恢复demo.last_gtid表
# ls -l demo/last_gtid.*
-rw-r--r-- 1 root root 715 6月 27 11:03 demo/last_gtid.cfg
-rw-r----- 1 root root 9437184 6月 26 16:08 demo/last_gtid.ibd
2、目标数据库上创建希望恢复的表
表结构要和备份时的表结构一致。
mysql> show create table last_gtid\G
*************************** 1. row ***************************
Table: last_gtid
Create Table: CREATE TABLE `last_gtid` (
`id` int NOT NULL AUTO_INCREMENT,
`gtid` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26733 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
我们先将表drop掉,模拟数据丢失的场景。
mysql> drop table last_gtid;
Query OK, 0 rows affected (0.03 sec)
创建结构,并执行discard tablespace命令。
mysql> CREATE TABLE `last_gtid` (
-> `id` int NOT NULL AUTO_INCREMENT,
-> `gtid` varchar(1000) DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.06 sec)
mysql> alter table last_gtid discard tablespace;
Query OK, 0 rows affected (0.01 sec)
3、将备份的文件copy到目标实例数据库目录下
将表对应的文件copy到目标实例数据库对应目录下,并修改文件owner。如果文件owner没有正确设置,下一步import表空间时可能会出错。
# cp last_gtid.* /data/full_restore/data/demo/
# ls -l /data/full_restore/data/demo/
-rw-r--r-- 1 root root 715 6月 27 11:06 last_gtid.cfg
-rw-r----- 1 root root 9437184 6月 27 11:06 last_gtid.ibd
# chown -R mysql:mysql /data/full_restore/data/demo/
4、import表空间
执行import tablespace命令,确认数据恢复。
mysql> alter table demo.last_gtid import tablespace;
Query OK, 0 rows affected (0.29 sec)
mysql> select count(*) from demo.last_gtid;
+----------+
| count(*) |
+----------+
| 10813 |
+----------+
1 row in set (0.00 sec)
如果不知道表的表结构,可以使用ibd2sdi工具,从ibd文件中提取表结构信息:
# ibd2sdi last_gtid.ibd | more
["ibd2sdi"
,
{
"type": 1,
"id": 371,
"object":
{
"mysqld_version_id": 80032,
"dd_version": 80023,
"sdi_version": 80019,
"dd_object_type": "Table",
"dd_object": {
"name": "last_gtid",
"mysql_version_id": 80032,
"created": 20230621022444,
"last_altered": 20230621022444,
"hidden": 1,
"options": "avg_row_length=0;encrypt_type=N;key_block_size=0;keys_disabled=0;pack_record=1;stats_a
uto_recalc=0;stats_sample_pages=0;",
"columns": [
{
"name": "id",
"type": 4,
"is_nullable": false,
"is_zerofill": false,
"is_unsigned": false,
"is_auto_increment": true,
"is_virtual": false,
......
"column_key": 2,
"column_type_utf8": "int",
"elements": [],
"collation_id": 255,
"is_explicit_collation": false
},
{
"name": "gtid",
"type": 16,
"is_nullable": true,
"is_zerofill": false,
"is_unsigned": false,
"is_auto_increment": false,
"is_virtual": false,
"hidden": 1,
"ordinal_position": 2,
"char_length": 4000,
.....
"column_key": 1,
"column_type_utf8": "varchar(1000)",
"elements": [],
"collation_id": 255,
"is_explicit_collation": false
},
更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。