关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 网站维护 »InnoDB数据表空间文件平滑迁移

    InnoDB数据表空间文件平滑迁移

    2015-07-29 00:00:00 出处:ITJS
    分享

    如何迁移?

    从MySQL文档中我们了解到,InnoDB的表空间可以是共享的或独立的。如果是共享表空间,则所有的表空间都放在一个文件里:ibdata1,ibdata2..ibdataN,这种情况下,目前应该还没办法实现表空间的迁移,除非完全迁移,因此不在本次讨论之列;我们只讨论独立表空间的情况。

    不管是共享还是独立表空间,InnoDB每个数据表的元数据(metadata)总是保存在 ibdata1 这个共享表空间里,因此该文件必不可少,它还可以用来保存各种数据字典等信息。数据字典中,会保存每个数据表的ID号,每次发生数据表空间新增时,都会使得该ID自增一个值(++1),例如:CREATE TABLE xx ENGINE = InnoDB / ALTER TABLE xx ENGINE = InnoDB 都会使得ID值增加。

    有了上面的理解,想要实现InnoDB表空间文件的平滑迁移就很容易了,呵呵。下面是一些例子:

    假定我们有2台DB主机,一个是A,一个B,现在想把A上的某个InnoDB表空间文件迁移到B上直接用。

    一、迁移失败的例子

    直接从A上把表空间文件 yejr.ibd 拷贝到 B 上后,导入表空间,报错,无法使用。这是由于A,B上创建该表时的顺序不一致,导致表的ID不一样,无法导入。

    注意:在这里,表空间文件直接拷贝的前提是该表空间处于"干净"状态下,也就是所有的数据均已经刷新到磁盘中,否则可能导致无法使用或部分数据丢失。

    1. 在B上将旧的表空间废弃

    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr DISCARD TABLESPACE;
    Query OK, 0 rows affected (0.00 sec)
    

    2. 拷贝到目标机器

    scp yejr.ibd B:/home/mysql/yejr/yejr.ibd
    ....
    

    3. 启用该表空间

    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr IMPORT TABLESPACE;
    ERROR 1030 (HY000): Got error -1 from storage engine
    

    4. 查看错误

    InnoDB: Operating system error number 13 in a file operation.

    InnoDB: The error means mysqld does not have the access rights to

    InnoDB: the directory.

    InnoDB: Error: trying to open a table, but could not

    InnoDB: open the tablespace file './test/b.ibd'!

    InnoDB: Error: cannot reset lsn's in table `test/b`

    InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

    5. 很明显,是权限的问题,修正过来,然后重新导入

    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr DISCARD TABLESPACE;
    ERROR 1030 (HY000): Got error -1 from storage engine
    

    6. 怎么还是错误?继续看日志

    InnoDB: Error: tablespace id in file './yejr/yejr.ibd' is 15, but in the InnoDB
    InnoDB: data dictionary it is 13.
    InnoDB: Have you moved InnoDB .ibd files around without using the
    InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE
    InnoDB: Please refer to
    InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-troubleshooting.html
    InnoDB: for how to resolve the issue.
    InnoDB: cannot find or open in the database directory the .ibd file of
    InnoDB: table `yejr/yejr`
    InnoDB: in ALTER TABLE ... IMPORT TABLESPACE
    

    从上面的日志得知,由于在A服务器上,yejr表的ID是15,而在B服务器上,yejr表的ID却是13,二者不一致,因此迁移失败。

    既然只是因为ID不一样,而且有了上面的理论基础,我们完全可以人为的让它们的ID一致嘛,请看下面的第2次尝试。

    二、人工干预下的成功迁移

    1. 上面的例子中,B上面的yejr表ID为13,而A上面为15;因此只需要让B上的yejr表ID增加2就可以了。

    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr RENAME TO yejr1;
    Query OK, 0 rows affected (0.00 sec)
    #这个时候,yejr的ID变为14
    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr1 RENAME TO yejr;
    Query OK, 0 rows affected (0.00 sec)
    #这个时候,yejr的ID变为15
    

    2. 然后,我们再导入

    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>ALTER TABLE yejr IMPORT TABLESPACE;
    Query OK, 0 rows affected (0.00 sec)
    (chinastor.com-root@imysql.cn/17:52:47)[yejr]>select count(*) from yejr;
    +----------+
    | count(*) |
    +----------+
    |        3 |
    +----------+
    1 row in set (0.00 sec)
    

    看到了吧,成功了,呵呵。想要让其它ID增加的方式也可以重复创建表,根据实际情况或者个人喜好而定了。

    以上测试均在MySQL 5.0.67版本下通过,只不过显示数据稍作处理了。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。