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