您的位置:首页 > 数据库 > MySQL

mysql传输表空间

2016-05-15 22:54 459 查看
mysql也有传输表空间,跟oracle功能也一样,就是讲表空间从一个数据库拷贝到另一个库。

这个功能有如下的限制

innodb_file_per_table要设置on

当表quiesced的时候,在受影响的表上只能做只读操作

当导入表空间的时候,page大小要一致

discard表空间不被分区表支持,也就是分区表也不支持传输表空间。

alter table…import tablespace 不强制外键约束,所以表上有外键约束的时候,需要同时导出表

在主外键的情况下,当foreign_key_checks设置成了1,discard tablespace是不被支持的,,所以要设置成0

alter tablle import tbalespace 不需要cfg的元数据文件

在复制场景下innodb_file_per_table需要设置成on

最好设置lower_case_table_names=1来设置表的大小写

步骤

在源,目标上创建相同的表

在目标表上,需要discard表空间mysql> ALTER TABLE t DISCARD TABLESPACE;

在源数据库上,执行FLUSH TABLES t FOR EXPORT;cfg文件也被创建

拷贝.ibd和.cfg元数据文件到目标库上

在源库上unlock表UNLOCK TABLES;

在目标库上导入表空间mysql> ALTER TABLE t IMPORT TABLESPACE;

import tablepsace这个步骤很耗时间,我原以为只是更细下元数据信息,没想到80g的文件,执行了40分钟

当alter table …discard tablespace被执行的时候,数据库内部做了下面的操作

1 表被加x锁

2表空间跟表分离

当flush table ..for export运行的时候,数据库内部做了下面的操作

1表在共享锁下刷洗来导出

2purge 调度线程被停止

3脏页被同步到磁盘上

4元数据信息写到cfg文件上

当unlock tables在运行的时候,数据库执行了下面操作

1cfg文件被删除

2表上的共享锁被释放,purge调度线程重新启动

alter table ..import tablespace运行时,数据库执行下面的操作

Each tablespace page is checked for corruption.

The space ID and log sequence numbers (LSNs) on each page are updated

Flags are validated and LSN updated for the header page.

Btree pages are updated.

The page state is set to dirty so that it will be written to disk.

在做测试的时候遇到了下面的问题,在导入表空间的时候提示

ERROR 1932 (42S02): Table ‘test.baixyu’ doesn’t exist in engine

原因是拷贝过去的文件的属主错误的,修改成mysql后,再次导入正常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 传输表空间