SQL Server 迁移至MySQL 关键步骤的梳理总结

SQL Server 迁移至MySQL 关键步骤的梳理总结,第1张

概述迁移主要是通过Navicat工具来实现的。迁移工具的选定在此不讨论。 迁移前准备 1.提前通知DBA\SA\BI等,并确认发布计划及数据库迁移方案。 2.梳理出SQL Server DB 中影响业务的

迁移主要是通过Navicat工具来实现的。迁移工具的选定在此不讨论。

迁移前准备

1.提前通知DBA\SA\BI等,并确认发布计划及数据库迁移方案。

2.梳理出sql  Server DB 中影响业务的Job(迁移的过程中要关闭)、DB linkServer、相关账号。

3.模拟数据迁移,评估出相关精确的时间。例如每张大表的耗时(我们定义的表准是,每张百万级别的表耗时都要测评出来),每2分钟一个进度标记。Navicat 工具不能指定sql条件迁移 ,需全表迁移,因此 不支持增量迁移。sql Server 和 MysqL 表结构需一致。表名、字段名一致。如果不一致,需要创建一个过渡库过渡表来进行迁移。

4.创建生产环境的MysqL数据库,将最终的Dev环境的表导入生产环境(只导表结构)。与sql Server 相比,如果有表结构调整,最好要求开发提供数变化的List(包含新增表、新增索引等)。

5.对生产环境的MysqL进行账号设置(DBkey等相关配置一起设置)。

6.对生产环境的表进行检查(主要表结构的变化,例如主要字段、索引、默认值等)。Navicat工具导入的过程中,可以保留索引,但是默认值会丢失,并且默认字段不理想。此步骤可参照附录。

7.进行测试(全链路,从数据库的连接到插入更新等)。测试可以是全面的,DB对数据库进行测试,当然,针对应用程序,可以要求测试人员提供一份性能压测报告。

8.数据库备份作业的设置(完整备份和binlog备份)。

9.验证迁移步骤及准备脚本

迁移中

1.请SA团队暂停相关的业务服务

2.禁用Server 上DB的相关账号。

3.停止备份Job 和影响业务的Job。

4.数据迁移。

5.验证数据,主要是比对迁移前后数据量。

6.通知全员数据迁移完毕。通知SA开启相关服务。

迁移后

1.删除链接服务器(DBlink,本地相关链接服务器 和异地有关此DB的连接服务器)。

2.通过活动监视器或sql命令查询是否还有对此 sql Server DB的请求。

3.MysqL数据库性能监控。

4.数据库做一个完整备份,copy至异地服务器。copy至异地,主要是考虑服务器资源的回收,此为,在异地最好要添加一个对备份文件的描述,例如此文件是什么时候产生的,用途是什么,是否可以删除,建议保留时间, *** 作人等。

5.关闭sql Server 剩余的Job。

6.Detach (分离)数据库(一定是Detach 不要直接删除,虽然有备份文件,但恢复还是相对较慢的)。

7.如果此服务器上没有其它的用户数据库,停止sql Server 服务。

8.历史数据库的迁移(如果有的话)。

9.归档数据Job的设置。

10.本次迁移的总结报告(主要是梳理出迁移过程注意的事项和提升的建议)

 

附录附录A

sql Server 与 MysqL 字段类型对照表

sql ServerMysqL
n/varchar(1-4000)varchar(1-4000)
varchar(4000-8000)text
n/varchar(max)longtext
charchar
ncharvarchar
timestamptimestamp
timedatetime(3)
datetimedatetime(3)
datedatetime(3)
smalldatetimedatetime(3)
numericdecimal
numeric17decimal
ntextmediumtext
textmediumtext
bittinyint
intint
tinyinttinyint
bigintbigint
smallintint
floatdouble
decimaldecimal
varbinaryvarchar
binaryvarchar
imagelongblob
uniqueIDentifIErvarchar(40)
realdouble
moneydecimal(19,4)
longbloblongblob

 

附录B

查询生成 需添加默认值和调整字段的SQL语句。

以下T-sql在需要迁移的sql Server DB上执行,生成的sql 语句在MysqL直接执行(sql_text列)。

 

SELECT  'alter table ' + D.name +  modify column + A.name+' '        CASE WHEN B.name = datetime' THEN  datetime(3)'               bit tinyint(1)decimal decimal('                    CAST(ColUMNPROPERTY(A.ID,A.name,PRECISION') AS VARCHAR(10))                    ,ISNulL(Scale'),0) )like %varcharAND ')=-1  varchar(4000)'                <>- varchar('20))%varbinary varbinary(4000) varbinary(ELSE B.name                 END WHEN A.isnullable =  NulL'                     ELSE  NOT NulL '                 default '             CAST (WHEN E.text (getdate())CURRENT_TIMESTAMP(3)liKE (%REPLACE(REPLACE(E.text,1)">(',1)">''),1)">'')                     ELSE E.text                END 30))           WHEN ISNulL(G.[value],1)">'') <> ''                COMMENT '''                    '') 100)) ''';'          AS sql_text,表名 = D.name,字段名  A.name,字段说明 ),类型  B.name,占用字节数  A.length,长度 '0Y'                   N'              ENDISNulL(E.)FROM    syscolumns A        INNER JOIN systypes B ON A.xusertype  B.xusertype        JOIN sysobjects D ON A.ID  D.ID                                   AND D.xtype U'                                   AND D.name dtpropertIEs'        JOIN syscomments E ON A.cdefault  E.ID        left JOIN sys.extended_propertIEs G  G.major_ID                                               AND A.colID  G.minor_ID        JOIN sys.extended_propertIEs F ON D.ID  F.major_ID                                               AND F.minor_ID 0WHERE   B.name uniqueIDentifIErand D.name not in (需排除的表ORDER BY          总结       

以上是内存溢出为你收集整理的SQL Server 迁移至MySQL 关键步骤的梳理总结全部内容,希望文章能够帮你解决SQL Server 迁移至MySQL 关键步骤的梳理总结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/1152340.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存