立即注册 登录
彼岸网 返回首页

牛肉炖土豆的个人空间 http://www.bian-wang.com/discuz/?10744 [收藏] [复制] [分享] [RSS]

日志

关于数据库迁移问题

热度 1已有 1898 次阅读2018-6-1 03:27 AM |个人分类:建站笔记

有个站数据库已超2G,为了长远打算,想把它迁移到阿里云数据库RDS
迁移过程中遇到各种坑
1.阿里云数据库mysql单机版,版本为mysql5.7,它默认引擎是innodb,且不支持memory
2.discuzx3.4默认数据库引擎都是MyISAM和memory

阿里云有个在线迁移工具,可以将本地在线迁移进云数据库RDS,迁移过程中MyISAM会自动转为innodb
由于mysql5.7版不支持memory,所以迁移报错,于是我打算放弃这种在线迁移方案。

听了客服的建议,数据库迁移的时候,可以选择结构迁移(表结构),和全量迁移(表数据)
先手动把本地的数据库表结构导出来,手动编辑memory为innodb,再导入到云数据库RDS里,然后进行表数据的在线迁移

于是手动编辑memory为innodb后,导进云数据库RDS,这样之后memory是没问题了,但有两个表怎么都无法导入

pre_common_member_grouppm
pre_forum_post

这两个表始终报错,找不到解决办法

我的解决思路:
全新安装discuz,数据库选择云数据库RDS,这样会自动在RDS里创建数据表了(说来也奇怪,全新安装是没问题的),
然后只保留报错的那两个表,其它的表全删除,然后再手动导入之前备份的表结构,再去执行在线全量迁移(表数据)

晚上试试看吧,哎

云数据库控制台运行SQL之后


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (13 个评论)

回复 牛肉炖土豆 2018-6-1 11:37 AM
天香公主: 那就对了,看来这是个innodb特有的要求
再一次感谢指点!今天又学到了一点
回复 天香公主 2018-6-1 11:33 AM
牛肉炖土豆: 大概在2月份,我买的同样规格的一模一样的,全新安装DZ,没有任何问题,我还进了那台数据库,看了下存储引擎,发现这个两个表的是MyISAM,其他的都是INNODB ...
那就对了,看来这是个innodb特有的要求
回复 牛肉炖土豆 2018-6-1 11:21 AM
天香公主: 嗯,笔误

有点怀疑你说的"全新安装是没问题的"
大概在2月份,我买的同样规格的一模一样的,全新安装DZ,没有任何问题,我还进了那台数据库,看了下存储引擎,发现这个两个表的是MyISAM,其他的都是INNODB
回复 牛肉炖土豆 2018-6-1 11:19 AM
天香公主: 这应该就是这两个数表与众不同之处了:the auto column is not defined as a key

试试

CREATE TABLE pre_common_member_grouppm (
    uid mediumint(8) unsi ...
我打开表结构,手动修改存储引擎,把InnoDB改成了MyISAM
结果提示:
Storage engine MyISAM is disabled (Table creation is disallowed).


看样子,这台云数据库彻底封掉了MyISAM模式啊
回复 天香公主 2018-6-1 11:18 AM
牛肉炖土豆: -.-执行第一个,居然创建这个表了,InnoDB后面多了一个M?
嗯,笔误

有点怀疑你说的"全新安装是没问题的"
回复 牛肉炖土豆 2018-6-1 11:06 AM
天香公主: 这应该就是这两个数表与众不同之处了:the auto column is not defined as a key

试试

CREATE TABLE pre_common_member_grouppm (
    uid mediumint(8) unsi ...
-.-执行第一个,居然创建这个表了,InnoDB后面多了一个M?
回复 天香公主 2018-6-1 11:01 AM
牛肉炖土豆: 去掉最后的之后提示

执行失败,失败原因:Incorrect table definition; there can be only one auto column and it must be defined as a key ...
这应该就是这两个数表与众不同之处了:the auto column is not defined as a key

试试

CREATE TABLE pre_common_member_grouppm (
    uid mediumint(8) unsigned NOT NULL DEFAULT '0',  
    gpmid smallint(6) unsigned NOT NULL AUTO_INCREMENT,
    `status` tinyint(1) NOT NULL DEFAULT '0',  
    dateline int(10) unsigned NOT NULL DEFAULT '0',  
    PRIMARY KEY (uid,gpmid),
    KEY gpmid (gpmid)
) ENGINE=InnoDbM

或者

CREATE TABLE pre_common_member_grouppm (
    uid mediumint(8) unsigned NOT NULL DEFAULT '0',  
    gpmid smallint(6) unsigned NOT NULL AUTO_INCREMENT,
    `status` tinyint(1) NOT NULL DEFAULT '0',  
    dateline int(10) unsigned NOT NULL DEFAULT '0',  
    PRIMARY KEY (uid,gpmid),
    KEY gpmid (gpmid)
)
回复 牛肉炖土豆 2018-6-1 10:54 AM
PRIMARY KEY (uid,gpmid)这句好像不兼容,报错的两个表都有这个两个主键
回复 牛肉炖土豆 2018-6-1 10:51 AM
改成innodb后提示

CREATE TABLE pre_common_member_grouppm (
  uid mediumint(8) unsigned NOT NULL DEFAULT '0',
  gpmid smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `status` tinyint(1) NOT NULL DEFAULT '0',
  dateline int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (uid,gpmid)
) TYPE=InnoDb

执行失败,失败原因:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=InnoDb' at line 7
回复 牛肉炖土豆 2018-6-1 10:48 AM
天香公主: 把最后的 TYPE=MYISAM 去掉试试,还不行的话,改成 TYPE=innodb 试试
去掉最后的之后提示

执行失败,失败原因:Incorrect table definition; there can be only one auto column and it must be defined as a key
回复 天香公主 2018-6-1 10:46 AM
牛肉炖土豆: 云数据库RDS确实有控制台,我打开SQL窗口,粘贴语句,执行后,变成上图所示的了,不知道这么执行对不对
把最后的 TYPE=MYISAM 去掉试试,还不行的话,改成 TYPE=innodb 试试
回复 牛肉炖土豆 2018-6-1 10:33 AM
天香公主: 没看出这两个数据表有何异常之处。如果阿里云提供了个管理云数据库RDS的工具的话,你也可以直接运行SQL语句来生成这两个数据表吧,语句在upload/install/data/in ...
云数据库RDS确实有控制台,我打开SQL窗口,粘贴语句,执行后,变成上图所示的了,不知道这么执行对不对
回复 天香公主 2018-6-1 08:24 AM
没看出这两个数据表有何异常之处。如果阿里云提供了个管理云数据库RDS的工具的话,你也可以直接运行SQL语句来生成这两个数据表吧,语句在upload/install/data/install.sql里

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2024-3-19 06:37 AM , Processed in 1.141878 second(s), 8 queries. ,ApcOn

返回顶部