mariadb - Debezium 连接器无法连接到 MariaDB,错误 'LOAD DATA LOCAL INFILE 但功能在客户端被禁用'
问题描述
我们使用 Debezium 和 Kafka-Connect 从多个 MariaDB 数据库实例中提取数据。大多数数据库的连接器都成功运行,但其中一个连接器失败并出现以下错误:
at io.debezium.connector.mysql.AbstractReader.wrap(AbstractReader.java:241)
at io.debezium.connector.mysql.AbstractReader.failed(AbstractReader.java:218)
at io.debezium.connector.mysql.SnapshotReader.execute(SnapshotReader.java:848)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.sql.SQLException: Server asked for stream in response to LOAD DATA LOCAL INFILE but functionality is disabled at client by 'allowLoadLocalInfile' being set to 'false'.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.commit(ConnectionImpl.java:814)
at io.debezium.connector.mysql.SnapshotReader.execute(SnapshotReader.java:764)
... 3 more
服务器端变量 local_infile 设置为 ON,因此在服务器端一切都应该没问题。我想一个解决方案可能是以某种方式在连接字符串中传递客户端选项 allowLoadLocalInfile ,但我看不出如何在 Debezium 中配置它。我也觉得这个错误现在弹出很奇怪,而其他连接器没有这个问题。有没有人在使用 Debezium 时认识到这个错误,知道原因甚至有解决方案?
解决方案
我找到了解决方案。在连接器配置中,例如注册/更新连接器的 json 文件我更改了设置: 从这里:
"min.row.count.to.stream.results": "0"
对此:
"min.row.count.to.stream.results": "1000"
当该属性设置为 0 时,将流式传输结果。不知何故,对于一个相当大的表,这导致了上述错误。LOAD DATA LOCAL INFILE 但功能在客户端被“allowLoadLocalInfile”设置为“false”而被禁用
我不知道 mariadb 的大表失败的确切原因,但至少问题得到了解决。
推荐阅读
- algorithm - 对于 T(n) = a2^(kn) 的算法,求解 n=20 的问题需要多长时间
- html - 字体样式文本区域
- visual-web-developer-2010 - 从 SQL 获取数据并显示在 Web 上的交互式图表中
- c++ - 如何让#include<> 查看标准系统目录的子文件夹?
- node.js - API 返回一个旧值,是否可以改进此过程?
- python - 执行代码时收到以下错误 - EOFError: EOF when reading a line
- bash - 用于参数检查的 getopts bash 查询
- mysql - 如何在 Laravel 中优化这个数据库查询?
- liquid - 如果未设置参数,则在液体中失败
- json - JMeter: JSON Extractor - 使用多个条件进行提取