2016-07-25 175 views
3

我想从MySQL迁移到PostgreSQL,我有一个Java相关的问题,我无法修复。完全披露:我对Java一无所知,但是迁移使用了基于Java的脚本,所以对我来说这成为一个配置问题。MySQL到PostgreSQL迁移:mysql连接器

短版的问题:

迁移工具抛出此异常:

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

mysql-connector-java-5.0.8-bin.jar已经在 “JAVA_HOME \ JRE \ lib中\分机” 目录下,我不不知道如何解决这个依赖性问题。


龙版的问题:

我试图从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中\分机” 目录(在我的情况:“C:\ Program Files文件\的Java \ jre1.8.0_60 \ lib中\分机\ mysql-连接器的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 –

回答

1

SOLUTION

有了一个朋友说,掌握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此迁移脚本的工作(这一直是相当大的挑战),下面是详细信息:


HOW TO

免费工具(从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中\分机” 目录(在我的情况:“C:\ PROGRAM文件\的Java \ jre1.8.0_60 \ lib中\分机\ mysql的连接器的Java-5.0.8-bin.jar“)。

的迁移工具包文件,可以发现:

第一:修改C:\Program Files\PostgresPlus\edbmtk\etc\toolkit.propertiesInfo 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=******** 

T母鸡:执行C:\Program Files\PostgresPlus\edbmtk\bin\runMTK.batInfo 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' 
+0

我tryig与您的解决方案工作,但不断获取DB- null:java.sql.SQLException:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 2017-06-18 17:07:00堆栈跟踪: com.edb.MTKException:MTK-11009:错误连接数据库“ MySQL服务器“ \t at com.edb.dbhandler.mysql.MySQLConnection。 (MySQLConnection.java:48) \t在com.edb.common.MTKFactory.createMTKConnection(MTKFactory.java:263) \t在com.edb.MigrationToolkit.createNewSourceConnection(MigrationToolkit.java:6357) –

+0

哪里ü添加此行** Wscript.Echo“JAVA_EXECUTABLE_PATH =”&JAVA_EXECUTABLE_PATH **? –