MySQL数据库迁移

背景

本文的需求同上一篇Red Hat安装MySQL之旅,既然要做数据库的切换,安装是第一步,数据库、数据表、数据的迁移自然是紧随其后的事情了。

在做迁移之前,大概在网上谷歌了一下,关于如何将Oracle迁移到MySQL的内容是有的,但是感觉消息太杂了,可以看出迁移Oracle数据库到MySQL方法是很多的,只不过是哪个更靠谱的问题。曾经一度,我想自己用Python写个迁移工具。(只是迁移数据表和数据,不包括 存储过程,毕竟MySQL的存储过程还不够成熟,同Oracle的存储过程差别也比较大)。

但这样造个轮子,无疑是增加了开发成本。所以经过多方权衡之后,我选择了官方提供的工具和方法,毕竟没有谁会比开发MySQL的人更了解MySQL,于是就有了下面这篇迁移记录。

PS:这里补充一点,关于Python开发一个迁移数据库表、数据的工具这件事情,我是会去做的,已经提到业余时间的安排日程上了。

工具选择

在经过查找权衡之后,我选择了MySQL Migration Toolkit这个MySQL的官方工具。因为公司电脑有权限限制,所以我下载的是免安装版。官网下载网址:MySQL Migration Toolkit;也可以从我上传的资源下载MySQL Migration Toolkit免安装版

PS: 由官网可以看到,MySQL Migration Toolkit这个工具从2006年之后就再也没有更新过,也就是说自从MySQL被收购之后,就没再更新该工具,所以后面会讲到,这些年过去了,该工具也确实存在一些BUG。但个人感觉,并不影响该工具处理数据库的能力。

MySQL Migration Toolkit的坑

MySQL Migration Toolkit这个工具是依赖于JRE的,所以老老实实的到官网去下载了JDK最新版本的安装文件,并安装完毕。

下载好MySQL Migration Toolkit之后,解压使用,在软件初始化过程中,就报出了错误。

“An error occured during the initialization of the runtime system.Please make sure your have the Java Runtime Environment (JRE) 1.4.2 or 5.0 Update or newer installed”。

奇怪,刚才明明已经安装了JDK,而且查看Java目录下确实也已经有了jre1.8.0的目录,所以可以确定的是,本机上确实是已经安装了JRE了。经过搜索发现,原来这是MySQL Migration Toolkit工具自身的BUG,因为其最新版本是06年发布的,当时的JRE应该还只是1.4、1.5版本的,而工具内部代码可能有JRE版本的判断,所以就导致即使安装了最新版的JRE,但是注册表里,并没有1.4、1.5的项,因此软件启动过程中在注册表内找不到相应的项,就会报出相应的错误。根据网上给出的解决方法,可以通过新增1.4或1.5注册表项,然后对应到最新版的JRE即可解决问题,看这里

但是公司电脑有权限限制,我(我自己的开发机竟然没有权限!!!!)没权限修改注册表,因此我只能退而求其次,在这里重新下载了JRE 5.0的安装包,安装完成后,再启动MySQL Migration Toolkit,一切正常了。然后,我们就可以开始真正的迁移工作了!!!JRE 5.0的安装包可以从这里下载。

数据库迁移

MySQL Migration Toolkit能够正常启动之后,就可以开始使用它进行数据库的迁移了。

正常启动的界面如图:
MySQL Migration Toolkit正常启动界面

直接点击Next。

这里写图片描述

选择Direct Migration,点击Next。

这里写图片描述

在Source Database界面中填写需要进行转换的源数据库的一些参数。

  • Database System为源数据库类型,这里选Oracle
  • Driver为使用的驱动程序,需要加载Oracle JDBC驱动,即ojdbc14.jar(支持JRE 1.4或1.5),果断去官网或者[这里][8]下载。在首次加载驱动程序后,会提示重启MySQL Migration Toolkit。
  • 下一项可选SID或者Service,因为我不知道Oracle数据库的SID,所以这里我选择了使用Service,即数据库名称service name,可以使用下面命令来查看数据库service name
select value from v$parameter where name='service_names'
  • Host和Port分别为数据库所在服务器地址和端口
  • Username为源数据库的用户名
  • Password为上面用户名对应的密码

点击Next。

这里写图片描述

在Target Database界面中填写需要转换的目标数据库的一些参数。

具体各个参数的意义和上面差不多,唯一需要注意的是对于MySQL,可能需要手工填写JDBC URL,点击Advanced键,在Connection String栏里输入JDBC URL,具体格式为:

jdbc:mysql://IP:PORT/?user=USER&password=PASSWD&useServerPrepStmts=false&characterEncoding=gbk

其中IP、PORT、USER、PASSWD根据MySQL服务器的参数填写,基本和上面的参数一样,字符编码方式根据自己需要填写。

参数填写完毕后,点击Next。

这里写图片描述

连接服务器,结果为“Execution completed successfully”则说明连接服务器成功。点击Next。

这里写图片描述

选择需要迁移的数据库,点击Next。

这里写图片描述

对源数据库进行逆向工程,若是结果为”Execution completed successfully”则说明逆向处理执行成功。点击Next。

这里写图片描述

在Object Type Selection页面,基于我的需求,只需要选中Objects of type Oracle Table即可,点击Detailed selection可以对所要迁移的表项进行编辑,可以将不需要迁移的表加入到ignore list。点击Next。

这里写图片描述

在Object Mapping页面,编辑Migration of type Oracle Schema,Migration method选择Generic,点击Set Parameter,若是MySQL Schema的字符集和校对选择UTF8相关的,则选择Multilanguage即可,若是选择gbk相关的,则选择User defined,下面charset=gbk, collation=gbk_chinese_ci;

编辑Migration of type Oracle Table,Migration method选择Generic,点击Set Parameter,若是MySQL Table的字符集和校对选择UTF8相关的,则选择Data consistency/multilanguage即可,若是选择gbk的话,则在User defined中填入,addAutoincrement=yes, charset=gbk, collation=gbk_chinese_ci, engine=INNODB。

点击Next。

这里写图片描述

然后开始迁移前面选中的对象。结果为”Execution completed successfully”说明迁移成功,点击Next。

这里写图片描述

Manual Editing列出了有问题的映射对象及其创建脚本。结果为”No mapping problems found.”说明迁移映射过程中并没有问题。点击Next。

这里写图片描述

Object Creation Options页面是用来配置如何创建数据库对象的,对当前来说,即是数据库中的表。可以选择直接通过网络在数据库中创建还是先保存为本地脚本文件再创建。如果网络流量不是很大的话,建议选择第二种,我是直接选择第二种,先在本地创建脚本文件。点击Next。

这里写图片描述

可以看到创建脚本文件成功,点击Next,显示创建结果。点击Next。

这里写图片描述

创建结果。创建成功,此时会生成创建数据表等对象的.sql脚本文件。点击Next。

这里写图片描述

Data Mapping Options页面,用来配置如何进行数据映射的,同样,可以选择直接通过网络将数据迁移映射到MySQL数据库,也可以现在本地保存脚本文件,然后再通过脚本文件迁移数据到MySQL。基于网络流量考虑,我选择第二种。点击Next。

这里写图片描述

开始进行数据转换,若是结果为”Execution completed successfully”则说明数据转换成功,此时会生成数据迁移的.sql脚本文件。点击Next。

这里写图片描述

Summary页面,即处理完成的总结页面,若想保存总结结果,则点击Generate Migration Script。然后点击Finish。

接下来可以使用所生成的.sql脚本文件在MySQL客户端进行数据库、数据表的创建和数据的迁移。具体语句为:

source xxx.sql

这其中会存在一些问题,主要是字符集编码的问题,首要思想就是要保证mysql客户端的字符集编码和脚本的编码保持一致,否则会报出编码错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值