我正在尝试从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的,所以我还没有能够解决这个依赖性问题。
答案 0 :(得分: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“)。
可以找到Migration Toolkit文档:
首先:修改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'