• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql Innodb表空间卸载、迁移、装载的使用方法

mysql Innodb表空间卸载、迁移、装载的使用方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql innodb 表损坏,mysql innodb 分区表,mysql innodb 分表,mysql innodb,mysql innodb引擎等相关知识,希望本文的分享对您有所帮助

条件:
2台服务器:A和B,需要A服务器上的表迁移到B服务器。
Innodb表:sysUser,记录数:351781。
以下测试在MySQL 5.5.34中进行。
开始处理:
1:在B服务器上建立sysUser表,并且执行:

2:把A服务器表的表空间(ibd)复制到B服务器的相应数据目录。
3:修改复制过来的ibd文件权限:

4:最后就开始加载:

报错了,查看错误日志:

当遇到这个的情况: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,则会有:

这时的情况: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的值,也应该差不多了,可以再手动的去增加。用一个脚本跑(需要建立的表比较多),少的话完全可以自己手动去处理:

import MySQLdb
import datetime

def 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 i
        create_table(conn)
        drop_table(conn)
</div>

也可以开启多线程去处理,加快效率。
当执行完之后,再重新按照上面的1-3步骤进行一次,最后再装载:

要是再提示A表空间ID大于B表的话,就再手动的按照脚本里面的方法来增加ID,这时候就只需要增加个位数就可以追上A的表空间ID了。
总结:
上面只是一个方法,虽然可以迁移Innodb,但是出问题之后可能会引其Innodb的页损坏,所以最安全的还是直接用mysqldump、xtrabackup等进行迁移。
5.6 可以不用考虑这些tablespace id,可以直接import 进来。

</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql Innodb表空间卸载、迁移、装载的使用方法

相关文章

  • 2018-12-05SQL2000数据库”运行在普通用户下所需的权限
  • 2018-12-05MSSQL 生成日期列表代码
  • 2018-12-05详解MySQL 4G内存服务器配置优化
  • 2017-05-11优化MySQL数据库中的查询语句详解
  • 2018-12-05MYSQL ERROR 1045 (28000): Access denied for user (using pass
  • 2017-05-11MySQL数据类型varchar详解
  • 2017-05-11MySQL存储过程中游标循环的跳出和继续操作示例
  • 2018-12-05mysql中加减乘除与求余和求平均值以及查询不等于某数值的实例
  • 2018-12-05Python连接mysql数据库
  • 2018-12-05MySql5.6使用validate password 插件加强密码强度的安装及使用方法_MySQL

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 在C#和MySQL中存取中文字符时避免乱码的方法
    • MySQL8.0.3 RC版发布的新变化
    • 在Ubuntu或Debian系统的服务器上卸载MySQL的方法
    • MySQL可视化管理工具phpMyAdmin的学习
    • 用root用户登陆PHPmyAdmin出现Client does not support authenti
    • 基于mysql多实例安装的深入解析
    • 删除重复的记录,并保存第一条记录或保存最后一条记录
    • MySQL中myisam转innodb的实例教程
    • 在MySQL中实现二分查找的详细教程
    • 日期和时间处理函数及数值处理函数实例(数据处理函数的使用二)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有