创建JdbcSourceConnector连接MySQL时遇Connection refused问题求助
问题描述
在本地Docker部署Confluent Platform后,尝试通过JdbcSourceConnector从MySQL拉取数据,始终抛出连接拒绝异常:
java.net.ConnectException: Connection refused (Connection refused)
连接器配置:
{"name":"mysql-login-connector","config":{"connector.class":"io.confluent.connect.jdbc.JdbcSourceConnector","connection.url":"jdbc:mysql://localhost:3306/test","connection.user": "root","connection.password": "Admin","topic.prefix": "mysql-01-","mode":"bulk"}}
Docker Compose中Connect服务配置:
connect: image: cnfldemos/cp-server-connect-datagen:0.6.4-7.6.0 hostname: connect container_name: connect depends_on: - broker - schema-registry ports: - "8083:8083" environment: CONNECT_BOOTSTRAP_SERVERS: 'broker:29092' CONNECT_REST_ADVERTISED_HOST_NAME: connect CONNECT_GROUP_ID: compose-connect-group CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1 CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000 CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1 CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1 CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 # CLASSPATH required due to CC-2422 CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.9.0.jar:/config/confluentinc-kafka-connect-jdbc-10.8.4/lib/mysql-connector-java-8.0.30.jar CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor" CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor" CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/usr/local/share/kafka/plugins,/usr/share/filestream-connectors,/config" volumes: - C:\Programs\cp-all-in-one\config:/config
问题原因及修复方案
核心问题
Connect运行在Docker容器内,配置里的localhost指向容器自身,而非你的宿主机。如果MySQL部署在宿主机上,容器自然无法通过localhost:3306连接到宿主机的MySQL服务。
具体修复步骤
修改JDBC连接URL
- 把
localhost替换成宿主机的实际IP地址(Windows用ipconfig查以太网IPv4,Linux/macOS用ip addr或ifconfig) - 示例:
jdbc:mysql://192.168.1.100:3306/test - 注意:不要用
127.0.0.1,同样指向容器自身
- 把
开放MySQL远程访问权限
- 登录MySQL执行授权命令,允许root用户从任意IP访问(或指定容器所在网段):
GRANT ALL PRIVILEGES ON test.* TO 'root'@'%' IDENTIFIED BY 'Admin'; FLUSH PRIVILEGES; - 修改MySQL配置文件(my.cnf/my.ini),将
bind-address设为0.0.0.0,重启MySQL服务
- 登录MySQL执行授权命令,允许root用户从任意IP访问(或指定容器所在网段):
验证连通性
- 进入Connect容器测试端口是否开放:
docker exec -it connect bash telnet 192.168.1.100 3306
- 进入Connect容器测试端口是否开放:
可选方案(MySQL也在Docker中)
如果MySQL是Docker部署的,把它加入Confluent Platform的同一Docker网络,然后JDBC URL用MySQL容器名作为主机名,比如jdbc:mysql://mysql-container:3306/test
内容的提问来源于stack exchange,提问作者walruz




