背景 :业务需求,需将Mysql源库中一表A同步到数仓oracle中,工具依然选用 pentaho kettle 8.2。
问题 :没想到被遇到的一个小问题耽误了许久。
步入正题。
报错如下: Invalid column type:16
很显然的字段类型不匹配,但因此表的字段过多(40个左右),数据量颇大(近2000W)。通过目测判断可能出错的字段类型: date,time,timestamp,并且一一尝试,但是都一直报错。
在观察报错日志,显然是Boolean,显然是布尔型的报错.....
我在oracle端create此表的时候, 没有根据kettle自动生成的建表SQL 。因为自动生成的往往会有一些小问题。
下图是我在MySQL使用show create table A ,展示的建表语句。 注意我标注的字段 ,就是此字段导致的问题。
如下图,相同的表,相同的字段。
mysql 认为是char(1),但是kettle认为是Boolean。
使用 cast(deleted as char) 此函数处理,就是把deleted转为字符型。
问题解决。
1 mysql 错误 ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'www.2cto.com
解决办法:关闭防火墙,linux下命令
[root@etl01 bin]# chkconfig --list | grep -i iptables ====check fire wall
iptables0:off 1:off 2:on3:on4:on5:on6:off
[root@etl01 bin]# /sbin/service iptables stop ====stop fire wall
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: nat filter [ OK ]
Unloading iptables modules: [ OK ]
2 报错:1130-host ... is not allowed to connect to this MySql server
解决办法:
授权形式
比如账户为root,密码为root
use mysql
用root账户从任何主机上访问mysql数据库了
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION
如果你想允许用户zz从ip为192.168.1.3的主机连接到mysql服务器,并使用123456作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY '123456' WITH GRANT OPTION
kettle作业在运行一段时间后会报错,原因是mysql会默认每8小时回收一次无用连接。错误日志如下:
然后你的作业就失败了,必须重新启动kettle才能解决。
经过多次排查,最终解决。
加上 autoReconnect=true 参数
虽然能解决8小时mysql自动丢弃无用连接的问题,但是不能解决mysql宕机后的自动重连。
修改方式,自行百度
例如wait_timeout是8小时,只需把调度周期设为<8小时即可
在kettle5.4测试不通过,在kettle7测试通过。
配置数据源连接时,采用连接池,配置如下
关于连接池参数,kettle使用的是apache dbcp connetions pool.
修改方式,自行百度
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)