一、背景
最近在用kettle的时候,客户现场用的是kettle8.3版本,业务系统数据库是mysql8。
二、问题
kettle连接业务系统mysql数据库时发现,连接失败,提示驱动异常,检查了驱动,已经放到kettle的lib文件夹下了;
然后根据报错问了AI,AI的意思是mysql官方的驱动中的类是com.mysql.cj.jdbc.Driver、com.mysql.jdbc.Driver分别适配mysql8和mysql5,而报错的内容选择的驱动类是过时的、旧版的org.gjt.mm.mysql.Driver。
三、解决方式
方式1 直接修改驱动类(失败)
直接在“特征列表”修改驱动类Driver Class 为com.mysql.cj.jdbc.Driver。
结果是修改了但是保存不了。
当然如果有大佬知道怎么改能保存的,希望不吝赐教。
(个人觉得,8.x版本的文件管理和UI还是比较好用的比起9.x版本)
方式2 升级kettle版本(成功,推荐)
我又用kettle9.4版本连接了一下,可以,打开特征列表发现驱动类是com.mysql.cj.jdbc.Driver。
需要注意,虽然这个驱动类在一定程度上兼容mysql5,但还是推荐先用简单的语法抽取到我们的目标数据库的一个中间表后再处理。
方法3 使用旧版驱动(成功,不推荐)
下载旧版的mysql驱动,里面有驱动类org.gjt.mm.mysql.Driver,MySQL驱动下载
选择版本5.x版(我试过了最多到5.49版本是有的);
下载解压后,将里面的jar包(两个随便放一个就行)放到kettle的lib文件夹下,重启kettle。
这个方法的注意点和方式2一样,先抽取到中间库再处理。
方法 4 JNDI方式连接(成功,很不推荐)
选择JDNI方式,设置JDNI的名称,这里的名称后面要用到;
打开kettle目录下的simple-jndi文件夹下的jdbc.properties文件
在最下面添加如图所示的mysql代码
注意前面的kettle_mysql8就是JNDI名称
# mysql8 kettle 配置
kettle_mysql8/type=javax.sql.DataSource
kettle_mysql8/driver=com.mysql.cj.jdbc.Driver
kettle_mysql8/url=jdbc:mysql://localhost:3306/kettle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
kettle_mysql8/user=root
kettle_mysql8/password=123456
其中需要改成自己的部分的有
url:IP地址:端口号/数据库名,编码方式characterEncoding=编码方式(一般都是utf8,后面的时区我设定的是上海,国内设这个就行)
剩下的就是用户名和密码
方法5 自定义连接(成功,非常不推荐)
连接是没问题,但是好像不能作为存储库,例如资源库;
还是说一下配置方式吧,就是选择通用数据库 Generic database
配置自定义URL:
jdbc:mysql://localhost:3306/kettle?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=CONVERT_TO_NULL
注意替换IP地址:端口号/数据库名
用户名和密码就是数据库的用户名和密码