前情:
这是一位群友的问题,有一定代表性,总结一下。
问题描述:
Windows上运行不报错,在Linux上就报错,
报错信息:插入/更新-Communicationslinkfailure
首先这个错误是当前环境的Kettle连接数据库时网络链路不通,连接失败了。由此来确认一下问题:
1、使用数据库客户端工具,尝试访问这个数据库,确定数据库本身的可用性。以及对外可连通性。
2、在这台不通的Linux机器上执行命令:telnetIP,以确定本台机器到数据库之间的连通性,(这也是一个确定到某台机器某个端口的有效连通性的常用方法,不能使用Ping命令确定,Ping只能确定到达,但某些端口通不通不能确定),如下图表示通。
如果出现下图类似这样表示不通:
不通在Kettle执行中就会报:Communicationslinkfailure
3、排查Linux机器的防火墙,以centos为例。
防火墙相关命令:
查询状态
systemctlstatusfirewalld.service
打开
systemctlstartfirewalld.service
停止
systemctlstopfirewalld.service
永久关闭
systemctldisablefirewalld.service
下图表示开启中:
下图表示关闭状态:
关闭后再尝试telnetIP,以及Kettle执行,此时可以正确执行了。
总结:Linux一般初始的防火墙都是打开的,所以都需要关闭或者增加相应的策略,如果是一些云环境的机器,比如阿里云,要在相应的控制台中进行设置。