Innodb 表空间卸载、迁移、装载

      从MySQL的Innodb特性中我们知道,Inndob的表空间有共享和独享的特点,如果是共享的。则默认会把表空间存放在一个文件中(ibdata1),当开启独享表空间参数Innodb_file_per_table时,会为每个Innodb表创建一个.ibd的文件。文章讨论在独享表空间卸载、装载、迁移Innodb表的情况。

条件:

2台服务器:A和B,需要A服务器上的表迁移到B服务器。

Innodb表:sysUser,记录数:351781。

以下测试在MySQL 5.5.34中进行。

开始处理:

1:在B服务器上建立sysUser表,并且执行:

zjy@B : db_test 09:50:30>alter table sysUser discard tablespace;

2:把A服务器表的表空间(ibd)复制到B服务器的相应数据目录。

3:修改复制过来的ibd文件权限:

chown mysql:mysql sysUser.ibd

4:最后就开始加载:

zjy@B : db_test 10:00:03>alter table sysUser import tablespace;
ERROR 1030 (HY000): Got error -1 from storage engine

报错了,查看错误日志:

131112 10:05:44  InnoDB: Error: tablespace id and flags in file './db_test/sysUser.ibd' are 2428 and 0, but in the InnoDB
InnoDB: data dictionary they are 2430 and 0.
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.5/en/innodb-troubleshooting-datadict.html
InnoDB: for how to resolve the issue.
131112 10:05:44  InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table `db_test`.`sysUser`
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

当遇到这个的情况:A服务器上的表空间ID 为2428,而B服务器上的表空间ID为2430。所以导致这个错误发生,解决办法是:让他们的表空间ID一致,即:B找出表空间ID为2428的表(CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;),修改成和sysUser表结构一样的的表,再import。要不就把A服务器的表空间ID增加到大于等于B的表空间ID。(需要新建删除表来增加ID)

要是A的表空间ID大于B的表空间ID,则会有:

131112 11:01:45  InnoDB: Error: tablespace id and flags in file './db_test/sysUser.ibd' are 44132 and 0, but in the InnoDB
InnoDB: data dictionary they are 2436 and 0.
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.5/en/innodb-troubleshooting-datadict.html
InnoDB: for how to resolve the issue.
131112 11:01:45  InnoDB: cannot find or open in the database directory the .ibd file of
InnoDB: table `db_test`.`sysUser`
InnoDB: in ALTER TABLE ... IMPORT TABLESPACE

这时的情况:A服务器上的表空间ID 为44132,而B服务器上的表空间ID为2436。(因为A是测试机子,经常做还原操作,所以表空间ID已经很大了,正常情况下。表空间ID不可能这么大。

既然表空间ID不对导致这个错误报出,那我们手动的让B的表空间ID追上A的表空间ID。

需要建立的表数量:44132-2436 = 41696个,才能追上。因为他本身就需要再建立一个目标表,所以需要建立的表数量为:41695。不过安全起见,最好也不要超过41695,以防B的表空间ID超过了A,则比如设置安全的值:41690,即使B没有到达A表空间ID的值,也应该差不多了,可以再手动的去增加。用一个脚本跑(需要建立的表比较多),少的话完全可以自己手动去处理:

#!/bin/env python
# -*- encoding: utf-8 -*-import MySQLdb
import datetimedef create_table(conn):query = '''
create table tmp_1 (id int) engine =innodb'''cursor = conn.cursor()cursor.execute(query)conn.commit()
def drop_table(conn):query = '''
drop table tmp_1'''cursor = conn.cursor()cursor.execute(query)conn.commit()if __name__ == '__main__':conn = MySQLdb.connect(host='B',user='zjy',passwd='123',db='db_test',port=3306,charset='utf8')for i in range(41690):print icreate_table(conn)drop_table(conn)
View Code

也可以开启多线程去处理,加快效率。

当执行完之后,再重新按照上面的1-3步骤进行一次,最后再装载:

zjy@B : db_test 01:39:23>alter table sysUser import tablespace;
Query OK, 0 rows affected (0.00 sec)

要是再提示A表空间ID大于B表的话,就再手动的按照脚本里面的方法来增加ID,这时候就只需要增加个位数就可以追上A的表空间ID了。

总结:

上面只是一个方法,虽然可以迁移Innodb,但是出问题之后可能会引其Innodb的页损坏,所以最安全的还是直接用mysqldump、xtrabackup等进行迁移。

5.6 可以不用考虑这些tablespace id,可以直接import 进来。

2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk - done!
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase I - Update all pages
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Sync to disk - done!
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase III - Flush changes to disk
2013-11-12 15:25:09 2378 [Note] InnoDB: Phase IV - Flush complete

 

更多信息见:

http://www.iamcjd.com/?p=1307 p10~13

http://imysql.cn/2008_12_17_migrate_innodb_tablespace_smoothly

http://www.chriscalender.com/?p=28

转载于:https://www.cnblogs.com/zhoujinyi/p/3419142.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马化腾与中国知名科学家联手发起“科学探索奖”

来源:腾讯今日,公布一件大事情:腾讯基金会将投入10亿元人民币的启动资金资助“科学探索奖”,每年将在基础科学和前沿核心技术方面的九大领域,遴选出50名青年科技工作者。获奖人年龄上限为45岁,且每位获奖者…

转:DP和HDP

Dirichlet Process and Hierarchical Dirichlet Process 原文:http://hi.baidu.com/zentopus/item/46a622f5ef13e4c5a835a28e Dirichlet Process and Hierarchical Dirichlet Process 在这篇文章里,我会初步地介绍Dirichlet Process以及Hierarchical Dir…

摩尔定律的三种走向

来源:科学网中兴事件以来,中国集成电路行业的发展受到全国人民的关注。许多人群情激奋,恨不得马上自力更生,赶上先进。也有一些人认为现在的世界经济是一个综合体,一个国家不可能样样领先,需要时日。正好&a…

李航《统计学习方法》笔记

虽然书名是统计学习,但是却是机器学习领域中和重要的一本参考书。当前的机器学习中机器指计算机,但是所运用的方法和知识是基于数据(对象)的统计和概率知识,建立一个模型,从而对未来的数据进行预测和分析&a…

【2018第五届世界互联网大会】世界互联网领先科技成果发布:带你看看这15项“黑科技”...

世界互联网领先科技成果发布现场。来源:央视网11月7日,第五届世界互联网大会“世界互联网领先科技成果发布活动”在浙江乌镇举行。这是世界互联网大会第三次面向全球发布领先科技成果。发布活动由中国工程院院士、中国互联网协会理事长邬贺铨主持&#x…

利用caffe的python接口实现DeepImageSynthesis实例

在之前实现faster rcnn的博客中,先是配置了caffe的python接口,但是在验证的时候用DeepTexture的实例没有成功。改用pycharm而不是jupyter notebook再试一试,毕竟在IDE中更好调试。 新建工程,选择anaconda2作为解释器,因…

深度:语音技术革命正在改变人类的交流方式

来源:资本实验室语言是我们日常交流的主要方式,可以让我们快速了解对方的意图,并做出适当的反应。但对很多语言障碍者而言,说话这一看似简单的行为依旧是难以想象的困难。语言是件极其复杂的事情,不仅仅是文字表面上的…

李航《统计学习方法》---感知机

这一章就讲了感知机。我觉得是深受工业革命的影响,把一些可以实现功能的基本单元都喜欢叫做什么机,这里的感知机,还有后来的以感知机为基础的支持向量机。直接看定义,看本质,实际上,感知机是一种线性分类模…

5G 对无线通讯芯片产业链的影响

来源:乐晴智库精选▌无线通信芯片概要:未来五年增速放缓,射频前端成为主要驱动力在智能手机普及的带动下,2012-2017五年无线通信芯片实现9.7%的复合增长率,根据iHS的数据,2017年市场规模达到1,322亿美金,占…

图像极坐标变换的研究

做图像配准的时候,发现图像进行旋转的情况下的配准有一些特殊。于是想到可以用极坐标进行配准。查了一下资料,发现大家用的更多的是对数极坐标Log Polar。 笛卡尔坐标系和极坐标系 先来说一下我们常用的笛卡尔坐标。X轴水平向右是正方向,y轴垂…

刚刚、Gartner发布物联网技术十大战略和趋势

来源:网络大数据Gartner的研究副总裁尼克•琼斯(Nick Jones)说:“物联网将在未来十年继续为数字化业务创新带来新的机遇,而许多新机遇有赖于新的或经过改进的技术。洞察创新物联网趋势的CIO们有机会领导本企业的数字化创新。”此外&#xff0…

图像的旋转和尺度缩放在对数极坐标系下的研究

首先来看一张特殊的同心圆图像及其极坐标变换:这是我自己在opencv下用cvLogPolar函数做的实验:极坐标原点选择在同心圆圆心时,同一个圆上的点到圆心的距离相等,所以映射在极坐标中应该是一组垂直于极轴的平行线。在自己的实验中因…

李航《统计学习方法》-----支持向量机

书中第七章才是支持向量机SVM,但在SVM与感知机有相似的地方,看了感知机的知识之后趁热先看看SVM。 首先回顾一下感知机。感知机的模型是线性分类模型,将两种类别标记为正负1,将新的样本输入线性函数,再将线性函数代入符…

乌镇互联网大会发布15项世界领先科技成果

来源:中央广电总台央视新闻客户端11月7日下午,第五届世界互联网大会“世界互联网领先科技成果发布活动”在乌镇互联网国际会展中心举行。大会共现场发布了15项世界互联网领域领先的“黑科技”,引得观众阵阵惊叹。15项世界互联网领先科技成果&…

OpenCV中的傅里叶的门道

接触到傅里叶-梅林算法,需要用到傅里叶变换,于是去查了一下OpenCV中的实现方法,没想到习以为常的傅里叶变换之中的门道还不少。 //傅里叶变换https://blog.csdn.net/keith_bb/article/details/53389819Mat I imread("Lena.jpg", I…

Science:人类迎来目前最为全面的癌症染色质可及性图谱

来源:吴晓波频道摘要:肿瘤在世界范围内导致人类死亡的首要原因之一,尤其是随着医疗水平的发展,人类的寿命的不断延长,癌症逐渐成为威胁人类健康的首要因素。肿瘤在世界范围内导致人类死亡的首要原因之一,尤…

傅里叶变换频谱的可视化保存

在上一篇关于傅里叶变换的博客中,知道了imshow的一个小trick:对normalize得到的0~1之间的浮点数构成的矩阵会进行放大255的操作,得到可视化的灰度图。即便是在python中也是如此操作的,只不过python中的函数封装得更加严密&#xf…

她取代马斯克成特斯拉新董事长 究竟什么来头?

来源:智车科技摘要:就如乔布斯之于苹果,对很多人来说,马斯克对特斯拉而言也有非凡的意义。甚至可以说,特斯拉的品牌吸引力很大程度上来自于“钢铁侠”本人。但由于当初任性发布“私有化”消息,被美国证交会…

十二天深入理解计算机系统(一)

计算机系统漫游 1 信息就是位上下文 系统中所有的信息都是由一串位表示的,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。 2 文本文件和二进制文件 有ASCII字符构成的文件称为文本文件,所有其他文件都是…

李航《统计学习方法》-----朴素贝叶斯

朴素贝叶斯法nave Bayes,在nave的中间字母上其实有两个点,查了一下才发现是法语中的分音符,在发音过程中发挥作用。但这不是重要的,重要的是在这种学习方法中贝叶斯承担了什么样的角色。 首先简单证明一下贝叶斯公式。联合概率Joi…