使用Kettle报错的解决方法

本文介绍了使用Kettle连接MySQL时遇到的“maxAllowedPacket”错误,并提供了两种解决方案:一是通过SQL语句临时调整参数;二是修改my.ini文件中的配置并重启MySQL服务。

1.当你在navicat上面测试数据库连接的时候可以看到数据库连接成功。而在Kettle上面连接同样的库的时候报出一大段错误出来,这时候是不是感觉有点懵逼了。

 

 错误内容如下:

错误连接数据库 [test库] : com.tyky.di.core.exception.XbridgeDatabaseException:
Error occured while trying to connect to the database

Error connecting to database: (using class org.gjt.mm.mysql.Driver)
Connection setting too low for 'maxAllowedPacket'. When 'useServerPrepStmts=true', 'maxAllowedPacket' must be higher than 8203. Check also 'max_allowed_packet' in MySQL configuration files.


com.tyky.di.core.exception.XbridgeDatabaseException:
Error occured while trying to connect to the database

Error connecting to database: (using class org.gjt.mm.mysql.Driver)
Connection setting too low for 'maxAllowedPacket'. When 'useServerPrepStmts=true', 'maxAllowedPacket' must be higher than 8203. Check also 'max_allowed_packet' in MySQL configuration files.


    at com.tyky.di.core.database.Database.normalConnect(Database.java:374)
    at com.tyky.di.core.database.Database.connect(Database.java:323)
    at com.tyky.di.core.database.Database.connect(Database.java:285)
    at com.tyky.di.core.database.Database.connect(Database.java:275)
    at com.tyky.di.core.database.DatabaseFactory.getConnectionTestReport(DatabaseFactory.java:76)
    at com.tyky.di.core.database.DatabaseMeta.testConnection(DatabaseMeta.java:2455)
    at com.tyky.ui.database.event.DataHandler.testDatabaseConnection(DataHandler.java:511)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.pentaho.ui.xul.impl.AbstractXulDomContainer.invoke(AbstractXulDomContainer.java:329)
    at org.pentaho.ui.xul.impl.AbstractXulComponent.invoke(AbstractXulComponent.java:139)
    at org.pentaho.ui.xul.impl.AbstractXulComponent.invoke(AbstractXulComponent.java:123)
    at org.pentaho.ui.xul.swt.tags.SwtButton.access$500(SwtButton.java:26)
    at org.pentaho.ui.xul.swt.tags.SwtButton$4.widgetSelected(SwtButton.java:119)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
    at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
    at org.eclipse.jface.window.Window.open(Window.java:796)
    at org.pentaho.ui.xul.swt.tags.SwtDialog.show(SwtDialog.java:378)
    at org.pentaho.ui.xul.swt.tags.SwtDialog.show(SwtDialog.java:304)
    at com.tyky.di.ui.core.database.dialog.XulDatabaseDialog.open(XulDatabaseDialog.java:104)
    at com.tyky.di.ui.core.database.dialog.DatabaseDialog.open(DatabaseDialog.java:51)
    at com.tyky.di.ui.spoon.delegates.SpoonDBDelegate.editConnection(SpoonDBDelegate.java:78)
    at com.tyky.di.ui.spoon.Spoon.doubleClickedInTree(Spoon.java:3010)
    at com.tyky.di.ui.spoon.Spoon.access$19(Spoon.java:2974)
    at com.tyky.di.ui.spoon.Spoon$23.widgetDefaultSelected(Spoon.java:5960)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
    at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at com.tyky.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1259)
    at com.tyky.di.ui.spoon.Spoon.start(Spoon.java:7896)
    at com.tyky.di.ui.spoon.Spoon.main(Spoon.java:582)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.pentaho.commons.launcher.Launcher.main(Launcher.java:134)
Caused by: com.tyky.di.core.exception.XbridgeDatabaseException:
Error connecting to database: (using class org.gjt.mm.mysql.Driver)
Connection setting too low for 'maxAllowedPacket'. When 'useServerPrepStmts=true', 'maxAllowedPacket' must be higher than 8203. Check also 'max_allowed_packet' in MySQL configuration files.

    at com.tyky.di.core.database.Database.connectUsingClass(Database.java:510)
    at com.tyky.di.core.database.Database.normalConnect(Database.java:358)
    ... 43 more
Caused by: java.sql.SQLException: Connection setting too low for 'maxAllowedPacket'. When 'useServerPrepStmts=true', 'maxAllowedPacket' must be higher than 8203. Check also 'max_allowed_packet' in MySQL configuration files.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)
    at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3305)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2278)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:790)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
    at sun.reflect.GeneratedConstructorAccessor32.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:395)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at com.tyky.di.core.database.Database.connectUsingClass(Database.java:490)
    ... 44 more

主机名       : 127.0.0.0.1
端口           : 3306
数据库名:test

2.解决办法:该错误由所连数据库中的max_allowed_packet字段引起,查询所连接数据库的该字段将字段大小设置更大问题解决。修改max_allowed_packet字段大小有两种方法,具体如下:

 方法1:用语句设置,但是这种情况可能会出现mysql重启后所设置的值失效。

show VARIABLES like '%max_allowed_packet%';
set global max_allowed_packet = 1024*1024

2.1方法2:在数据库下my.ini文件中添加如下语句。将max_allowed_packet改为1G.如下图所示。修改完成后,需要重启mysql。

使用 Kettle Spoon 连接 MySQL 8.0 数据库时,常见的报错信息包括无法连接数据库、驱动类找不到等问题。以下是综合多个引用信息得出的解决方案: ### 1. 添加 MySQL JDBC 驱动包 Kettle 默认的 lib 目录中可能缺少 MySQL 8.0 的 JDBC 驱动包。需要将 `mysql-connector-java-8.0.x.jar` 文件复制到 `kettle\data-integration\lib` 目录下,确保 Kettle 能够加载正确的驱动类 `com.mysql.cj.jdbc.Driver` [^1]。 ### 2. 配置 JNDI 数据源 如果使用 JNDI 方式连接数据库,需要修改 `simple-jndi` 目录下的 `jdbc.properties` 文件,添加如下配置: ```properties mysql8_test/type=javax.sql.DataSource mysql8_test/driver=com.mysql.cj.jdbc.Driver mysql8_test/url=jdbc:mysql://<host>:<port>/<database>?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai mysql8_test/user=<username> mysql8_test/password=<password> ``` 确保将 `<host>`、`<port>`、`<database>`、`<username>` 和 `<password>` 替换为实际的数据库连接信息 [^3]。 ### 3. 自定义 JDBC URL 配置 在 Kettle数据库连接配置界面中,可以手动输入自定义的 JDBC URL,确保包含以下参数以提高兼容性和性能: ```plaintext jdbc:mysql://<host>:<port>/<database>?useUnicode=true&characterEncoding=UTF-8&useServerPrepStmts=false&rewriteBatchedStatements=true&defaultFetchSize=500&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL ``` 其中: - `useUnicode=true` 和 `characterEncoding=UTF-8` 用于支持 UTF-8 编码。 - `useServerPrepStmts=false` 和 `rewriteBatchedStatements=true` 可以优化批量插入性能。 - `serverTimezone=Asia/Shanghai` 设置服务器时区。 - `zeroDateTimeBehavior=CONVERT_TO_NULL` 用于处理 0000-00-00 日期格式 [^5]。 ### 4. 检查 MySQL 服务和网络配置 确保 MySQL 服务正在运行,并且可以通过指定的 IP 地址和端口访问。检查防火墙设置,确保端口 3306(或自定义端口)未被阻止 [^1]。 ### 5. 验证 Kettle 数据库配置 在 Kettle Spoon 中,打开数据库连接配置界面,确保选择了正确的数据库类型(MySQL),并正确填写了主机名、端口、数据库名、用户名和密码。测试连接以确认配置是否正确 [^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值