[转帖]MYSQL表空间迁徙_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2186 | 回复: 0   主题: [转帖]MYSQL表空间迁徙        下一篇 
xuefeng
注册用户
等级:上士
经验:315
发帖:69
精华:0
注册:2011-8-17
状态:离线
发送短消息息给xuefeng 加好友    发送短消息息给xuefeng 发消息
发表于: IP:您无权察看 2014-12-26 15:08:45 | [全部帖] [楼主帖] 楼主

表空间迁移。

有如下原因你可能需要将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   <DIR>          .

7. 10/08/2013  03:15 PM   <DIR>          ..

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 city
C:\ProgramData\MySQL\MySQL     Server 5.6\data\world>copy city.* city
city.cfg
city.frm
city.ibd
3 file(s) copied.
C:\ProgramData\MySQL\MySQL     Server 5.6\data\world>cd city
C:\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\city
10/10/2013  10:58 AM    <DIR>          .
10/10/2013  10:58 AM    <DIR>          ..
10/10/2013  10:53 AM               582 city.cfg
10/10/2013  10:53 AM             8,710 city.frm
10/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)


表空间被成功。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论