【问题标题】:MySQL to PostgreSQL migration: mysql connectorMySQL 到 PostgreSQL 迁移:mysql 连接器
【发布时间】:2016-11-28 19:24:15
【问题描述】:

我正在尝试从 MySQL 迁移到 PostgreSQL,但我遇到了无法解决的 Java 相关问题。全面披露:我对 Java 知之甚少或一无所知,但迁移使用的是基于 Java 的脚本,所以对我来说它变成了一个配置问题。

问题的简短版本:

迁移工具抛出此异常:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

mysql-connector-java-5.0.8-bin.jar已经在“JAVA_HOME\jre\lib\ext”目录下,不知道怎么解决这个依赖问题。


问题的长版本:

我试图从 MySQL 迁移到 PostgreSQL。我查看了官方的 postgresql 文档,我选择了 entreprisedb 的免费工具(可以在here 下载)开始迁移。

从安装自述中,他们告诉你默认没有安装mysql连接器,但他们也告诉你解决这个问题的步骤:

要启用 MySQL 连接,请从以下位置下载 MySQL 的免费 JDBC 驱动程序: http://www.enterprisedb.com/downloads/third-party-jdbc-drivers

mysql-connector-java-5.0.8-bin.jar文件放在“JAVA_HOME\jre\lib\ext”目录下(在我的例子中:“C:\Program Files\Java\jre1.8.0_60\lib\ext\mysql-connector-java- 5.0.8-bin.jar")。

正确配置工具并执行 .bat 后,这是我得到的错误:

Connecting with source MySQL database server...
MTK-11009: Error Connecting Database "MySQL Server"
DB-null: java.sql.SQLException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Stack Trace:
com.edb.MTKException: MTK-11009: Error Connecting Database "MySQL Server"
    at com.edb.dbhandler.mysql.MySQLConnection.<init>(MySQLConnection.java:48)
    at com.edb.common.MTKFactory.createMTKConnection(MTKFactory.java:250)
    at com.edb.MigrationToolkit.createNewSourceConnection(MigrationToolkit.java:5982)
    at com.edb.MigrationToolkit.initToolkit(MigrationToolkit.java:3346)
    at com.edb.MigrationToolkit.main(MigrationToolkit.java:1700)
Caused by: java.sql.SQLException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at com.edb.Utility.processException(Utility.java:327)
    at com.edb.dbhandler.mysql.MySQLConnection.<init>(MySQLConnection.java:47)
    ... 4 more  

...据我了解,这可能意味着找不到mysql-connector-java-5.0.8-bin.jar

我在网上找到的所有关于该错误的链接都是特定于 Eclipse 或其他 IDE 的,所以我还不能解决这个依赖问题。

【问题讨论】:

  • 连接器必须放在您的项目中,而不是在 JRE 中

标签: java mysql postgresql


【解决方案1】:

解决方案

在一位精通Java的朋友的帮助下,他得到了这样的解决方案:

为了开始寻找问题,我们打开了runMTK.bat。执行行如下:

cscript //nologo "..\etc\sysconfig\runJavaApplication.vbs" "..\etc\sysconfig\edbmtk-49.config" "-Dprop=..\etc\toolkit.properties -classpath -jar edb-migrationtoolkit.jar %*"

然后我们打开了这个runJavaApplication.vbs,为了知道程序正在使用的JAVA_EXECUTABLE_PATH,我们在脚本中添加了这一行:

Wscript.Echo "JAVA_EXECUTABLE_PATH = " & JAVA_EXECUTABLE_PATH

根据这些信息,我们发现脚本使用的是C:\Program Files (x86) 下的Java 文件夹,而不是C:\Program Files 下的那个文件夹(我在其中删除了mysql jar)。所以我们把mysql-connector-java-5.0.8-bin.jar复制到x86的\ext文件夹下,现在脚本就可以运行了。

忠告:脚本在一半的导出表中抛出错误,因此所有的麻烦可能都不值得。但是如果有人有兴趣让这个迁移脚本从 A 到 Z 工作(这是一个相当大的挑战),这里是详细信息:


如何

免费工具(来自 entreprisedb): http://www.enterprisedb.com/downloads/postgres-postgresql-downloads

从 zip 中提取文件并以管理员身份使用安装程序 (ppasmeta-9.5.0.5-windows-x64.exe)。

要启用 MySQL 连接,请从以下地址下载 MySQL 的免费 JDBC 驱动程序:
http://www.enterprisedb.com/downloads/third-party-jdbc-drivers

mysql-connector-java-5.0.8-bin.jar文件放在“JAVA_HOME\jre\lib\ext”目录下(在我的例子中:“C:\Program Files\Java\jre1.8.0_60\lib\ext\mysql-connector-java- 5.0.8-bin.jar")。

可以找到迁移工具包文档:

首先:修改C:\Program Files\PostgresPlus\edbmtk\etc\toolkit.properties(Info here):

SRC_DB_URL=jdbc:mysql://SOURCE-HOST-NAME/SOURCE-DB-NAME
SRC_DB_USER=********
SRC_DB_PASSWORD=********

TARGET_DB_URL=jdbc:edb://localhost:5444/DESTINATION-DB-NAME
TARGET_DB_USER=enterprisedb
TARGET_DB_PASSWORD=********

然后:执行C:\Program Files\PostgresPlus\edbmtk\bin\runMTK.bat (Info here)。

runMTK.bat -sourcedbtype mysql -targetdbtype enterprisedb -allTables YOUR_DB_SCHEMA

// ...or with a limited subset of tables:

runMTK.bat -sourcedbtype mysql -targetdbtype enterprisedb -tables TABLE1,TABLE2,TABLE3 YOUR_DB_SCHEMA

为了从 MySQL 中获取这个表子集:

SELECT 
    GROUP_CONCAT(TABLE_NAME)
FROM
    information_schema.tables
WHERE
    TABLE_SCHEMA = 'your_db_name'

【讨论】:

  • 我正在尝试使用您的解决方案,但继续获取 DB-null: java.sql.SQLException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 2017-06-18 17: 07:00 堆栈跟踪:com.edb.MTKException:MTK-11009:在 com.edb.dbhandler.mysql.MySQLConnection.(MySQLConnection.java:48) 在 com.edb.common 连接数据库“MySQL 服务器”时出错.MTKFactory.createMTKConnection(MTKFactory.java:263) at com.edb.MigrationToolkit.createNewSourceConnection(MigrationToolkit.java:6357)
  • 你在哪里添加了这一行 Wscript.Echo "JAVA_EXECUTABLE_PATH = " & JAVA_EXECUTABLE_PATH ?
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 2018-02-05
  • 2012-11-26
  • 2013-09-14
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多