使用Logstash同步SQLServer至Elasticsearch时JDBC连接端口错误
解决Logstash同步SQL Server到Elasticsearch的端口无效错误
你的问题核心很清晰——JDBC连接字符串的格式不符合SQL Server的规范,导致驱动错误地把1433/DB_name当成了完整的端口号(端口只能是纯数字),这才抛出了"The port number 1433/DB_name is not valid"的错误。
错误根源
你当前的连接字符串写法是:
jdbc:sqlserver://xxx.xxx.x.xxx:1433/DB_name
这种斜杠分隔端口和数据库名的格式是MySQL等数据库的常用写法,但SQL Server的JDBC URL要求端口和数据库名之间用**分号;**分隔,且数据库名需要明确指定databaseName=参数。
修正后的完整配置文件
只需要修改JDBC连接字符串部分,其余配置保持不变即可:
input { jdbc { jdbc_connection_string => "jdbc:sqlserver://xxx.xxx.x.xxx:1433;databaseName=DB_name" jdbc_user => "devuser" jdbc_password => "devuser" jdbc_driver_library => "D:/Mssqljdbc/sqljdbc4-2.0.jar" jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver" statement => "SELECT * FROM sample" } } output { stdout { codec => json_lines } elasticsearch { hosts => "localhost" index => "testmigrate" document_type => "data" } }
额外验证建议
为了确保后续同步顺利,你还可以做这些检查:
- 确认
sqljdbc4-2.0.jar的版本适配你的SQL Server版本(该驱动通常兼容SQL Server 2012及以上版本) - 验证
devuser账号拥有访问DB_name数据库和sample表的权限 - 用
Test-NetConnection xxx.xxx.x.xxx -Port 1433(PowerShell)或telnet xxx.xxx.x.xxx 1433再次确认端口连通性
修改后重新执行bin\logstash -f sqltable.conf,应该就能正常建立连接并开始同步数据了。
内容的提问来源于stack exchange,提问作者Ironman
相关产品推荐
相关产品推荐

