
【Kettle(PDI)】使用 mysql-connector-java-8.0.xx.jar 时,提示 Couldn‘t execute SQL: LOAD DATA LOCAL INFILE
使用 mysql-connector-java-8.0.xx.jar 时,Kettle Transformation (.ktr)文件中采用 MySQLBulkLoader 从管道 fifo 文件读数据写到 MySQL 数据库中。),所以,在生成 mysql-connector-java-8.0.xx.jar 时,默认把。工具:PDI (Pentaho Data Integration,旧名字是
1. 场景
工具:PDI (Pentaho Data Integration,旧名字是 Kettle)
使用 mysql-connector-java-8.0.xx.jar 时,Kettle Transformation (.ktr)文件中采用 MySQLBulkLoader 从管道 fifo 文件读数据写到 MySQL 数据库中。
2. 问题
从管道文件(本地数据)读数据往远端 MySQL 服务器写数据时,会执行 LOAD DATA LOCAL INFILE
sql 语句,
由于 LOAD DATA LOCAL INFILE
语句存在安全漏洞(参考:官方文档 Security Considerations for LOAD DATA LOCAL ),
在生成 mysql-connector-java-8.0.xx.jar 时,默认把 LOAD DATA LOCAL INFILE
sql 语句禁用了,
所以会提示 Couldn't execute SQL: LOAD DATA LOCAL INFILE
。
出现问题时的 log:
org.pentaho.di.core.exception.KettleDatabaseException
Couldn't execute SQL: LOAD DATA LOCAL INFILE ......
The used command is not allowed with this MySQL version
Caused by: java.sql.SQLSyntaxErrorException: The used command is not allowed with this MySQL version
3. 解决方法
Client 端(PDI 工具所在的服务器)在连接数据库的 URL 中添加 allowLoadLocalInfile=true
。
需要注意的是 allowLoadLocalInfile
是小写字母开头。
例如:jdbc:mysql://host:port/db_name?allowLoadLocalInfile=true
还需要打开 MySQL Bulk Loader (Kettle 中的)的设置 Local data
勾选上。
在 .ktr 文件中,显示的是这样: <local>Y</local>
4. 参考
https://mysqlconnector.net/troubleshooting/load-data-local-infile/
需要注意的是 allowLoadLocalInfile
是小写字母开头。
更多推荐
所有评论(0)