Transportable Tablespace Internals
以下信息描述了InnoDB的传输表空间复制过程的内部原理和error log中输出的信息
当在目标端执行ALTER TABLE ... DISCARD TABLESPACE
命令时:
- The table is locked in X mode.
- 表空间会与表分离.The tablespace is detached from the table.
当在源端执行FLUSH TABLES ... FOR EXPORT
命令时:
- The table being flushed for export is locked in shared mode.
- 清除协调程序线程已停止The purge coordinator thread is stopped.
- 脏块会被写入磁盘
- 表的元数据信息会被写入二进制文件.cfg中
此操作的预期错误日志消息:1
2
3
42013-09-24T13:10:19.903526Z 2 [Note] InnoDB: Sync to disk of '"test"."t"' started.
2013-09-24T13:10:19.903586Z 2 [Note] InnoDB: Stopping purge
2013-09-24T13:10:19.903725Z 2 [Note] InnoDB: Writing table metadata to './test/t.cfg'
2013-09-24T13:10:19.904014Z 2 [Note] InnoDB: Table '"test"."t"' flushed to disk
当在源端执行UNLOCK TABLES
命令时:
- 二进制文件.cfg会被删除
- The shared lock on the table or tables being imported is released ,并且清除协调程序线程会重启purge coordinator thread is restarted.
此操作的预期错误日志消息:1
22013-09-24T13:10:21.181104Z 2 [Note] InnoDB: Deleting the meta-data file './test/t.cfg'
2013-09-24T13:10:21.181180Z 2 [Note] InnoDB: Resuming purge
当在目标端执行ALTER TABLE ... IMPORT TABLESPACE
时,导入算法会执行如下操作:
- 将检查每个表空间页是否损坏.
- 每个页面上的空间ID和日志序列号(LSN)都会更新
- 标志被验证,LSN被更新为头页.
- Btree页面更新.
- 页面状态设置为dirty,以便它将被写入磁盘.
此操作的预期错误日志消息:1
2
3
4
5
62013-07-18 15:15:01 34960 [Note] InnoDB: Importing tablespace for table 'test/t' that was exported from host 'ubuntu'
2013-07-18 15:15:01 34960 [Note] InnoDB: Phase I - Update all pages
2013-07-18 15:15:01 34960 [Note] InnoDB: Sync to disk
2013-07-18 15:15:01 34960 [Note] InnoDB: Sync to disk - done!
2013-07-18 15:15:01 34960 [Note] InnoDB: Phase III - Flush changes to disk
2013-07-18 15:15:01 34960 [Note] InnoDB: Phase IV - Flush complete
注意
您还可能会收到一个警告,表明丢弃了表空间(如果您丢弃了目标表的表空间)和一条消息,指出由于缺少.ibd文件而无法计算统计信息:1
2
32013-07-18 15:14:38 34960 [Warning] InnoDB: Table "test"."t" tablespace is set as discarded.
2013-07-18 15:14:38 7f34d9a37700 InnoDB: cannot calculate statistics for table "test"."t" because the .ibd file is missing. For help, please refer to
http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html