最近,ERP背景从MSSQL开始 SERVER过渡到MYSQL,确实经历了一些波折,虽然转换过程极其痛苦,但这里也不卖惨。记录过程,如果有人愿意,一起学习。 我之前已经分享了操作系统和数据库的安装,但是没有什么需要注意的。上面提到的极其痛苦,是从数据导入开始的,暂时还没有意识到。本文介绍了如何将数据从MSSQL中删除。 将SERVER导出到MySQL数据库。
前言
最近ERP后台从MSSQL开始 SERVER已经过渡到MYSQL,它确实经历了一些曲折。虽然转换过程极其痛苦,但在这里销售并不悲惨。记录过程,如果有人愿意,一起学习。
我以前分享过操作系统和数据库的安装,但没有什么需要注意的。上面提到的极其痛苦始于数据导出,暂时无法实现。本文介绍了如何从MSSQL中提取数据 将SERVER导出到MySQL数据库。
极其重要
如果你有相同的要求,你必须先做测试,而不是直接在生产环境中工作,这一点尤为重要!
在测试成功之前,不能直接在生产环境中工作!
在测试成功之前,你不能直接在生产环境中工作!!
在测试成功之前,不要直接在生产环境中工作!!
测试环境建设介绍不多,即备份源数据库,找机器安装相同的数据库,导入备份数据。这个新导入的库和源库最大的区别是两个,也是我们最关心的两个:
1、数据损坏不影响生产系统;
2、数据库没有应用于其读写操作。
如果生产环境想要引导数据,最好的办法就是说服领导不要这样做。如果说服不了,至少要多次测试,把遇到的所有问题和解决办法都记录在案,再停机评估!
以下文章包括以下文章,介绍了测试环境,小边也多次测试敢于移动ERP系统的背景。
源数据分析
首先,我们必须了解迁移目标。经过5年半的使用,我的ERP有18个现有数据表,1033483个记录条,都是文本记录,没有文件、图形等记录。
打开Microsoft SQL Server Management Studio客户端工具连接到MSSQL数据库后,可以在数据库的系统视图中找到数据表的数量和每个数据表的记录条数。以下命令可以通过新的查询输入获得。
SELECT a.name,b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE a.xtype='U' AND b.indid=1 order by a.name
在工作之前,您可以将此记录复制到EXCEL作为记录。迁移完成后,检查MySQL数据库中的数据表和记录数量。下图是我的部分记录表:
在我这次搬迁的100多万份记录中,有355630份日志记录,包括常规日志、商品日志、文件日志、单位日志、操作动作日志和错误日志。考虑到代码中的日志操作在几个函数中,更改相对简单。计划将日志记录和其他记录分为两个数据库,以便在后期为数据库备份和迁移节省一些空间。毕竟,没有问题的日志记录并不重要,因为除了日志记录,还有一些交易表,包括单位交易表、商品交易表、银行交易表等。
在188种表格中,有些表格记录为0,有些表格记录超过10000。至少有两个表格字段,最多有100多个字段。这是一个相对复杂的系统。
数据迁移
数据迁移的方法有很多。事实上,我尝试了各种各样的方法,但我不介绍最终放弃的方法。放弃的原因无非是我的英语水平太差,我的基础知识太弱等等。介绍最终的方法。
最后,我选择了SQLYOG工具,感觉习惯了微软的SMSS工具后,这个工具更像一点。
当我们在前面安装数据库时,我们建立了Erpdb和logdb两个库,打开了root帐户的远程访问,并更改了数据库的端口号。
打开SQLYOG,输入IP地址、用户名、密码、端口号,连接我们新安装的MYSQL服务器。
通过正常的测试连接,可以连接到MySQL。
点击菜单【数据库】-【导入】-【导入外部数据】,选择【开始新工作】,点击【下一步】。选择任何ODBC数据源。
首先创建一个连接SQL ODBC数据源文件SERVER。
[建立新的DSN]-[下一页]-[下一页]-[浏览]命名一个文件名-[下一页]-[完成]
在服务器后面输入SQL SERVER服务器地址,如果不是默认的1433端口,加上逗号跟上端口号。
SQL输入连接 Server的用户名和密码,[下一页],将默认数据库更改为我们需要导数据的数据库。[下一页]-[完成]-[测试数据源]-成功后[确定]。
数据源建成后,选择DSN文件,输入连接的用户名和密码。
输入要导入数据的MySQL服务器参数,选择要导入的数据库名称。点击下一页。
选择[从数据源复制表],点击[下一页]。选择要复制的表,打勾后,点击MAP查看映射情况。
这个地方有几个建议,有些表不修改可能不成功:
1、bit类型的原表,改为bool类型;
2、默认情况下,原始timestamp类型将更改为blob类型,手动更改为datetime类型或timestamp类型;
3、原表int、smallint、去掉largeint类型的长度;
4、原表datetime类型,默认改为timestamp类型,建议手动改为datetime或去除长度;
在高级选项中,存储类型选择InnoDB,是否根据需要导入外键索引。
然后直接下一步,直到立即运行。
导数后发现的问题
我的188张表,103万张记录,根据表的大小,分了5个任务,反正一夜之间就完成了。
完成后,我去MySQL检查。为了确保准确性,我检查了每个表格,命令如下:
show tables;
所有的查看表都有。
select count(*) from XXX;
查看每个表的记录。
数据导出后,我发现了很多问题。我用自己的方法一一解决了。下面介绍一下。也许大神不屑我的方法,但不喷就好。
列举几个:
1、MSSQL的命令最终没有符号,MySQL的名利最终需要加分;是的。
2、MSSQL的命令对数据表的表名和字段名的大小写不敏感,而MySQL对这些大小写非常敏感。
3、当前MSSQL时间表示GETDATE(),MySQL表示SYSDATE()。
4、MSSQL的日期计算函数是DATEDIFF,而MySQL的日期计算函数是TIMESTAMPDIFF。
5、MSSQL中的字段名可以用[]括起来,MySQL中只能用()。
6、MSSQL使用topp x限制条数,MySQL使用limitt, x限制条数。
7、MSSQL的字段名连接命令可以直接使用+,MySQL需要使用CONCAT连接字符串。
作者|it叔叔
作者:古道轻风,