MySQL到PostgreSQL迁移:MySQL连接器

4

我正在尝试从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文档,并选择了可以从企业版下载的免费工具(可以在这里下载)开始迁移。

从安装自述文件中,他们告诉您默认情况下未安装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的,因此我还没有能够解决这个依赖问题。


1
连接器必须放置在您的项目中,而不是JRE中。 - Mohamed Nabli
1个回答

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 文件夹,而不是我放置 mysql jar 的 C:\Program Files 下的文件夹。因此,我们将 mysql-connector-java-5.0.8-bin.jar 复制到 x86 的 \ext 文件夹中,现在脚本可以正常工作。
建议:脚本在导出一半的表格时会抛出错误,所以所有的麻烦可能不值得。但如果有人有兴趣使这个迁移脚本从头到尾都能正常工作(这是相当具有挑战性的),以下是详细信息:

如何操作

免费工具(来自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此处提供信息):

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 (这里有相关信息)。

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:连接数据库“MySQL Server”时出错 在com.edb.dbhandler.mysql.MySQLConnection.<init>(MySQLConnection.java:48) 在com.edb.common.MTKFactory.createMTKConnection(MTKFactory.java:263) 在com.edb.MigrationToolkit.createNewSourceConnection(MigrationToolkit.java:6357) - yoav.str
你在哪里添加了这行代码 Wscript.Echo "JAVA_EXECUTABLE_PATH = " & JAVA_EXECUTABLE_PATH - yoav.str

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接