SSIS包连接Linux本地MySQL频繁出现远程连接强制关闭错误求助
SSIS包连接本地Linux MySQL实例频繁断开:连接被远程主机强制关闭
问题背景
部署在Azure SQL Server的ssisdb中的SSIS项目,包含多个负责向本地Linux环境MySQL 5.7 InnoDB实例执行多数据流任务的包。此前运行正常,近期生产环境频繁执行失败,报错信息固定为:
Reading from the stream failed. System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
故障特征:
- 错误通常在执行开始后1-2分钟出现
- 无固定规律,多发生在夜间,且不针对特定包
- 测试环境(Azure上部署同版本MySQL)运行成功率100%,仅本地部署的生产环境出问题
- 可通过Workbench正常连接生产MySQL并执行查询,暂排除基础网络连通性问题
已尝试的排查与修复方案
- 通过ADO.NET MySQLConnector的
MySqlCommand拼接SET Session语句,将net_read_timeout和net_write_timeout设置为10分钟,仅生效一晚后故障复现 - 增大
max_packet_size(无BLOB数据查询场景),生产批次仅正常运行一晚后再次失败 - 确认生产MySQL配置:
interactive_timeout和wait_timeout均设为8小时,SSIS的commandTimeout设为1.5小时 - 联系离岸运维团队确认,执行时段服务器无压力/过载,慢查询日志无有效信息,已要求启用通用日志排查
下一步排查建议
网络层面抓包定位中断源
- 在SSIS执行服务器和MySQL服务器之间执行
tcpdump抓包,分析TCP连接断开时的RST包来源,确认是MySQL主动断开、中间网络设备(防火墙/负载均衡)清理连接,还是SSIS端异常 - 重点核查夜间时段的网络设备策略,比如防火墙的空闲连接超时配置,是否存在短于MySQL
wait_timeout的规则
- 在SSIS执行服务器和MySQL服务器之间执行
MySQL端深度日志分析
- 启用通用日志后,检查连接断开前的最后一条SQL语句,排查是否存在锁等待、资源耗尽等异常场景
- 查看MySQL错误日志(默认路径
/var/log/mysql/error.log),搜索Aborted connection相关记录,MySQL会明确标注连接断开的具体原因(如客户端超时、数据包异常、权限变更等)
SSIS连接与执行策略优化
- 修改SSIS连接管理器的连接字符串,添加
Pooling=false关闭连接池,避免复用的连接被中间设备中断 - 将大批次数据流任务拆分为多个小批次执行,缩短单连接的持续使用时间
- 核查SSIS执行账户的权限策略,确认夜间是否存在AD域账户临时失效等情况,间接引发连接中断
- 修改SSIS连接管理器的连接字符串,添加
中间网络设备配置核查
- 要求离岸团队检查生产环境与Azure之间的链路设备(VPN、防火墙、WAF等)的超时配置,确认TCP空闲超时是否短于MySQL的
wait_timeout - 确认夜间是否存在网络维护、带宽限制等操作,导致连接被强制中断
- 要求离岸团队检查生产环境与Azure之间的链路设备(VPN、防火墙、WAF等)的超时配置,确认TCP空闲超时是否短于MySQL的
内容的提问来源于stack exchange,提问作者SQLBoffin
相关产品推荐
相关产品推荐

