您好,欢迎访问一九零五行业门户网

MYSQL表空间迁徙

mysql表空间迁移。 表空间迁移。 有如下原因你可能需要将 innodb 表复制到不同的数据库服务器上。 不增加生产负载的情况下生成 一个报表 在一个新的服务器上建立一个和生产上数据相同的表 做一个备份在发生问题或错误操作时用于恢复 快速将数据从一个服务器迁
mysql表空间迁移。
表空间迁移。
有如下原因你可能需要将innodb表复制到不同的数据库服务器上。
不增加生产负载的情况下生成 一个报表 在一个新的服务器上建立一个和生产上数据相同的表 做一个备份在发生问题或错误操作时用于恢复 快速将数据从一个服务器迁移到另一个服务器 命令flush tables ... forexport使.ibd文件保持一致的状态。只有文件处于一致的状态我们才可以复制它。这个文件也会同时创建一个扩展名.cfg的二进制的文件。命令alter table ...import tablespace 会使用这个二进制文件对导入过程进行校验。
对于 mysql 5.6.8版本,alter table ...import tablespace命令不再一定需要一个扩展名为.cfg二进制文件了。但如果真的没有这个文件我们会收到下面这样一个警告。
message:innodb: io read error: (2, no such file or directory) error opening '.\
test\t.cfg',will attempt to import without schema verification
1row in set (0.00 sec)
这个特性有时候还是很有用的。比如,在模式不匹配的导入过程中,或者在一些需要恢复的情景下,元数据又不能从.ibd文件获得,则这个命令不需要一个扩展名为.cfg的二进制文件就可以导入的特性就很有用。
可迁移表空间的限制:
innodb_file_per_table 一定要打开成on. 在共享表空间上的表不能使用这个特性。当表处理静默状态时,只有只读语句可以使用这张表。 当导入表空间时,目的库的页尺寸要和源库的页尺寸相匹配。 discard tablespace 不支持分区表。如果你在分区表上使用命令alter     table ... discard tablespace 你会看到如下错误:error 1031 (hy000): 表引擎没有这个选项。discard tablespace 命令不支持有父子关系的表。如果foreign_key_checks 被设置成1. 在使用命令之前我们可以将这一参数设置为0.foreign_key_checks=0.alter     table ... import tablespace 命令在导入表时不会检查主外键关系。如果是实时复制的时候, innodb_file_per_table 必需在主服务和从服务上设置为on。 
下面来看一个实例:
在源服务器上我们来对city表进行迁移:
1. mysql> use test;c:\c:\programdata\mysql\mysqlserver 5.6\data\world
2. c:\programdata\mysql\mysqlserver 5.6\data\world>dir
3.  volume in drive c has no label.
4.  volume serial number is d0fa-f7a0
5.  directory of c:\programdata\mysql\mysql server5.6\data\world
6. 10/08/2013 03:15 pm   
          .7. 10/08/2013 03:15 pm   
          ..8. 10/08/2013  03:15 pm             8,710 city.frm
9. 10/08/2013  03:15 pm           273,293 city.myd
10.10/08/2013 03:15 pm            43,008 city.myi
11.10/08/2013 03:15 pm             9,172 country.frm
12.10/08/2013 03:15 pm                 0 country.myd
13.10/08/2013 03:15 pm             5,120 country.myi
14.10/08/2013 03:15 pm             8,702 countrylanguage.frm
15.10/08/2013 03:15 pm            38,376 countrylanguage.myd
16.10/08/2013 03:15 pm            18,432 countrylanguage.myi
17.10/08/2013 03:15 pm                61 db.opt
18.             10file(s)        404,874 bytes
19.              2 dir(s)  224,709,537,792 bytes free
20.mysql> use world
21.database changed
22.mysql> show tables;
23.+-----------------+
24.| tables_in_world |
25.+-----------------+
26.| city           |
27.| country        |
28.| countrylanguage |
29.+-----------------+
30.3 rows in set (0.00 sec)
31.mysql> flush table cityfor export;
32.error 1031 (hy000): table storage engine for 'city' doesn't havethis option
33.mysql> alter table cityengine=innodb;
34.mysql> flush table cityfor export; --对表加锁。
35.query ok, 0 rows affected (0.18 sec)
36.
复制表文件到目标位置
c:\programdata\mysql\mysql     server 5.6\data\world>mkdir cityc:\programdata\mysql\mysql     server 5.6\data\world>copy city.* citycity.cfgcity.frmcity.ibd        3 file(s) copied.c:\programdata\mysql\mysql     server 5.6\data\world>cd cityc:\programdata\mysql\mysql     server 5.6\data\world\city>dir volume in drive c has no label. volume serial number is d0fa-f7a0 directory of c:\programdata\mysql\mysql     server 5.6\data\world\city10/10/2013  10:58 am              .10/10/2013  10:58 am              ..10/10/2013  10:53 am               582 city.cfg10/10/2013  10:53 am             8,710 city.frm10/10/2013  10:53 am           475,136 city.ibd               3 file(s)        484,428 bytes               2 dir(s)  224,676,024,320 bytes free  
在目标库上删除可能存在的同名表空间。
mysql> unlock tables;--释放锁。2. query ok, 0 rowsaffected (0.07 sec)
3. mysql> alter table city discard tablespace;删除可能存在的同名表空间
4. query ok, 0 rowsaffected (0.23 sec)
5. mysql> selectcount(*) from city;
6. error 1814 (hy000):tablespace has been discarded for table 'city'
7. mysql> alter tablecity import tablespace;
8. error 1146 (42s02):table 'world.city' doesn't exist
9. c:\programdata\mysql\mysqlserver 5.6\data\world\city>copy city.* ..
10.city.cfg
11.city.frm
12.overwrite ..\city.frm? (yes/no/all): yes
13.access is denied.
14.city.ibd
15.       2 file(s) copied.
16.c:\programdata\mysql\mysql server 5.6\data\world\city>
17.mysql> alter table city import tablespace;
18.query ok, 0 rows affected (0.94 sec)
19.mysql> select count(*) from city;
20.+----------+
21.| count(*) |
22.+----------+
23.|    4079 |
24.+----------+
25.1 row in set (0.08 sec)
表空间被成功。
其它类似信息

推荐信息