sqlserver 迁移到mysql详细步骤数据库表结构迁移

最近在开发的一个项目,需要从MS SQLServer迁移到MYSQL,以下把迁移过程记录下来,与大家共享!

sqlserver迁移到mysql 在数据库方面的工作主要是表的迁移,以及存储过程的迁移,这里先说说表的迁移.

首先先将MSSQL Server表结构导出为.sql文件. 表迁移,mysql一律不能运行带有[,],dbo.等带有sqlserver特征的脚步, 所以在导出的sqlserver脚步里面,首先要把这些字符全部过滤掉(可使用editplus进行过滤),在表创建方面的不支持的字符如下:[,],[dbo].,GO, on primary,.

在过滤完以上的字符后, 由于导出的sql文件都包含多个表, 为了能够一次性装载完所有的scripts并运行,需要在每个表的create语句后面加上分号, (同时还有加上ENGINE=InnoDB),否则你会发现只能一个一个表的进行运行,比如原来是这样:

CREATE TABLE bmapnamebidsg (
bword nvarchar (100) NOT NULL ,
bids text NULL ,
status int NOT NULL ,
cr_date datetime NOT NULL
)

CREATE TABLE BookStaticSortStatus (
sid int NOT NULL ,
sortStatus int NOT NULL ,
mxReviewStatus int NOT NULL ,
lReviewStatus int NOT NULL ,
up_date datetime NOT NULL
)

改动后是这样的:

CREATE TABLE bmapnamebidsg (
bword nvarchar (100) NOT NULL ,
bids text NULL ,
status int NOT NULL ,
cr_date datetime NOT NULL
)ENGINE=InnoDB ;

CREATE TABLE BookStaticSortStatus (
sid int NOT NULL ,
sortStatus int NOT NULL ,
mxReviewStatus int NOT NULL ,
lReviewStatus int NOT NULL ,
up_date datetime NOT NULL
)ENGINE=InnoDB ;

接下来就是数据类型了!

在数据类型方面,mysql基本对应了sqlserver的数据类型, 向bit,text,varchar,等,都对应得比较好, 但是,mysql并不支持smalldatetime(这个是sqlserver特有的),需要转成datetime,另外, sqlserver中的identity自增长属性在mysql中则表现为auto_increament属性,并且声明该属性的列必须是key!

最后我们看看主键,索引以及缺省值如何对应,一些是MS SQLServer(建一个主键,为两个字段定义缺省值,再为一个字段定义成索引):

ALTER TABLE BookStaticSortStatus WITH NOCHECK ADD
CONSTRAINT PK_BookStaticSortStatus PRIMARY KEY CLUSTERED
(
sid
)

ALTER TABLE BookStaticSortStatus ADD
CONSTRAINT DF_BookStaticSortStatus_status DEFAULT ((-1)) FOR sortStatus,
CONSTRAINT DF_BookStaticSortStatus_up_date DEFAULT (getdate()) FOR up_date

CREATE INDEX [sort2_books] ON [dbo].[books]([s2id]) ON [PRIMARY]

MySQL:

CREATE TABLE `bmapnamebidsg` (
`bword` varchar(100) character set utf8 NOT NULL default ‘1’,
`bids` text NOT NULL,
`status` int(11) NOT NULL,
`cr_date` datetime NOT NULL,
PRIMARY KEY (`bword`),
KEY `bids` (`bids`(1))
) ENGINE=InnoDB DEFAULT CHARSET=latin1

完成以上动作,表结构的迁移就基本完成了!

喜欢与爱的区别,你身边那个人爱你吗?

很爱很爱你:喜欢你的人,半夜会找你打电话聊天到很晚;爱你的人,半夜看你在网上会赶你下线。喜欢你的人,在你生病时,会讲好话关心你;爱你的人,在你生病时,他会关心到你烦,并强迫你去看医生。喜欢你的人,他说他要给你最大的快乐;爱你的人,他只能给你保证,你跟他在一起,他是最快乐的。

其实,很多故事不必说给每个人听,就当做是一段记忆,伤感却也美丽。

又是深夜了,不知道有多少人和我一样还没有睡。你在想些什么呢?或许每个人心里都有那么一段故事,无法述说。就只能放任那些在深夜里对自己倾述。其实,很多故事不必说给每个人听,就当做是一段记忆,伤感却也美丽。——人,总是要醒来的,在某个时刻。唯美文字

你愿意容忍的恰是你会拥有的。没有你的允许,没有人能毁掉你的一天。昨天是所有抱怨的最后期限

Whatever you are willing to put up with, is exactly what you will have.No one can ruin your day without your permission.Yesterday was the deadline for all complaints. 你愿意容忍的恰是你会拥有的。没有你的允许,没有人能毁掉你的一天。昨天是所有抱怨的最后期限。。

innodb引擎Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.

今天在做innodb参数配置的时候,对其默认配置加以修改–结果导致启动后的server竟然不支持innodb引擎。Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
错误日志:
InnoDB: Data file /usr/local/mysql4/data/ibdata2 did not exist: new to be created
InnoDB: Setting file /usr/local/mysql4/data/ibdata2 size to 20 MB
InnoDB: Database physically writes the file full: wait…
InnoDB: No valid checkpoint found.
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/error-creating-innodb.html
[ERROR] Plugin ‘InnoDB’ init function returned error.
[ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
在遇到这些情况的时候,我起初考虑是没有建立新日志文件的权限。
实则不然
当我在未正常关闭server的情况下对其参数修改,
修改之后没有删除ib_logfile文件,ib_logfile文件中记录些innodb引擎非常有用的信息比如说默认的innodb默认的配置信息,你又是在未正常关闭server情况下操作的,所以导致重启后的server不支持innodb引擎。
rm -rf ib_logfile*
正确配置参数
重启server。

windows下Mysql解决启动1067和Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

2011年02月26日 星期六 01:43

关于手动修改mysql目录下的my.ini的数据库保存路径后,在启动的时候出错。

查看错误日志后,发现Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

原错误日志内容:

110226 1:20:46 [Note] Plugin ‘FEDERATED’ is disabled.

C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld: Table ‘mysql.plugin’ doesn’t exist

110226 1:20:46 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.

InnoDB: The first specified data file D:\mysite\database\ibdata1 did not exist:

InnoDB: a new database to be created!

110226 1:20:47 InnoDB: Setting file D:\mysite\database\ibdata1 size to 10 MB

InnoDB: Database physically writes the file full: wait…

110226 1:20:47 InnoDB: Log file .\ib_logfile0 did not exist: new to be created

InnoDB: Setting log file .\ib_logfile0 size to 10 MB

InnoDB: Database physically writes the file full: wait…

110226 1:20:47 InnoDB: Log file .\ib_logfile1 did not exist: new to be created

InnoDB: Setting log file .\ib_logfile1 size to 10 MB

InnoDB: Database physically writes the file full: wait…

InnoDB: Doublewrite buffer not found: creating new

InnoDB: Doublewrite buffer created

InnoDB: Creating foreign key constraint system tables

InnoDB: Foreign key constraint system tables created

110226 1:20:48 InnoDB: Started; log sequence number 0 0

110226 1:20:48 [ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

从网上查了半天都是linux下的解决方法,没有windows的。不过仔细看了看linux下的解决方法,发现是因为

windows下Mysql解决启动1067和Fatal error: Can't open and lock

这个文件闹得,从日志上来看是因为不能够打开私有权限的表格。

这个文件闹得,从日志上来看是因为不能够打开私有权限的表格。

解决方法直接把这个文件夹全都复制到你要修改的目录下,重启mysql就ok了。