目录
一、ibd表模式导入流程
1、节点A
(1)导出表
use test; FLUSH TABLE table1 FOR EXPORT; 执行 FLUSH TABLE test FOR EXPORT; 这一步会将表 test 锁定为只读模式,并在 test 目录下生成一个 test.cfg 配置文件,为表空间的导出做准备。 cd /mysql/data/3306/data/test # scp test01.ibd root@172.18.1.23:/root/ UNLOCK tables;
(2)获取test01表的创建表结构
show create table test01; CREATE TABLE `test01` ( `ID` int NOT NULL AUTO_INCREMENT, `ULN` varchar(50) NOT NULL DEFAULT '0', `Room_ID` varchar(50) NOT NULL DEFAULT '0', `Machine_ID` varchar(50) NOT NULL DEFAULT '0', `Label_ID` varchar(50) NOT NULL DEFAULT '0', `Coin_trans_datetime` datetime DEFAULT '1999-01-01 00:00:00', `SequenceNumber` varchar(50) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), UNIQUE KEY `test_unique_index` (`ULN`,`Machine_ID`,`SequenceNumber`,`Coin_trans_datetime`), KEY `ID` (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;
2、节点B
(1)创建和test01相同的表结构
CREATE TABLE `test02` ( `ID` int NOT NULL AUTO_INCREMENT, `ULN` varchar(50) NOT NULL DEFAULT '0', `Room_ID` varchar(50) NOT NULL DEFAULT '0', `Machine_ID` varchar(50) NOT NULL DEFAULT '0', `Label_ID` varchar(50) NOT NULL DEFAULT '0', `Coin_trans_datetime` datetime DEFAULT '1999-01-01 00:00:00', `SequenceNumber` varchar(50) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), UNIQUE KEY `test_unique_index` (`ULN`,`Machine_ID`,`SequenceNumber`,`Coin_trans_datetime`), KEY `ID` (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;
(2)如果原来有此表且有数据,直接清理一下
truncate table table02;
(3)discard tablespace
alter table test02 discard tablespace;
ALTER TABLE table1 DISCARD TABLESPACE;
是一个 MySQL 语句,用于丢弃指定表table1
的表空间,即使表数据仍然存在于磁盘上,但 MySQL 不再管理这些数据。 这个语句通常在需要移动或者替换表空间时使用,例如在进行表空间级别的恢复或者在表空间损坏时。 注意,在执行这个语句之后,表table1
将变得不可用,直到使用ALTER TABLE table1 IMPORT TABLESPACE;
重新导入表空间后才能恢复其可用性。
(4)拷贝数据表文件test01.ibd到B节点的数据目录test11
# cp /root/test01.ibd /mysql/data/3306/data/test11/test02.ibd
# chown -R mysql.mysql /mysql/data/3306/data/test11
(5)将新表导入到tablespace
alter table test02 import tablespace; # 这一步会根据表的大小,占用不同的时间。
(6)查看数据
select count(*) from test02; 可以看到数据全部导入了. 注意:此过程表结构不能改变,且主键等也不能从无到有。新表结构要和原表结构完全一致才可以。 否则在import是会报: mysql> alter table test2.test13 import tablespace; ERROR 1808 (HY000): Schema mismatch (Clustered index validation failed. Because the .cfg file is missing, table definition of the IBD file could be different. Or the data file itself is already corrupted.)