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