MySQL:驱动程序从 5 更新到 8 后,LOAD DATA LOCAL INFILE 不起作用

Posted

技术标签:

【中文标题】MySQL:驱动程序从 5 更新到 8 后,LOAD DATA LOCAL INFILE 不起作用【英文标题】:MySQL: LOAD DATA LOCAL INFILE not working after driver update from 5 to 8 【发布时间】:2019-03-08 07:50:26 【问题描述】:

我们最近将我们的客户端电脑从 Windows 7 更新到了 Windows 10,与此同时,我们的 mysql 驱动程序从“MySQL ODBC 5.3 Unicode 驱动程序”更新为“MySQL ODBC 8.0 Unicode 驱动程序”。

我通过RODBC R 包使用LOAD DATA LOCAL INFILE 命令将数据从本地CSV 文件导入到MySQL 服务器。服务器上没有做任何更改,SQL 语句仍然和以前一样,但是由于驱动程序更新,我收到以下错误消息:

“此 MySQL 版本不允许使用的命令”

当我在一台旧的 Win7 机器上运行该命令时,它仍然有效,这意味着它不是基于服务器的问题(例如配置文件中的local-infile=0)。

有其他人经历过吗?

感谢和亲切的问候,

约翰内斯

【问题讨论】:

这也是在客户端连接到数据库时需要启用的东西。 RODBC 包应该有一个选项。 感谢您的快速回复!我似乎无法在 RODBC 包中找到启用客户端本地文件的选项。也许这个包太旧了,无法支持一个明确的选项。无论如何,这是我的解决方法:我通过 curl 将 csv 文件上传到服务器并读取没有 LOCAL 部分的内容。我知道,这不是最好的选择,但我必须尽快找到可行的解决方案。 MySQL LOAD DATA LOCAL INFILE not allowed over ODBC的可能重复 【参考方案1】:

最新版本的 MySQL ODBC 连接器 (> 8.0.14) 允许您设置

ENABLE_LOCAL_INFILE=1

在 odbc.ini 连接详情中。

在你的 R 代码中,尝试:

odbcDriverConnect("DSN=dsnName;ENABLE_LOCAL_INFILE=1")

或者,尝试为您的 ODBC 连接编辑 Windows 注册表项:

    打开 Windows 注册表编辑器 - 单击 Windows 图标并键入 regedit 转到HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI。这是我的 ODBC 条目所在的位置。 选择要更改的 ODBC 连接,然后从菜单中选择 Edit>New>String Value。 将新条目命名为 ENABLE_LOCAL_INFILE 并将其值设置为 1。

https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html

升级我的连接器和更新 odbc.ini 对我来说是成功的。

【讨论】:

优秀。您的回答是我唯一可行的解​​决方案。【参考方案2】:

由于 MySQL 客户端驱动程序在客户端处理 local-infile 的方式存在漏洞,它已被禁用,另请参阅: Percona Responds to MySQL LOCAL INFILE Security Issues.

在客户端上启用该功能会使您的客户端驱动程序容易受到(外部)注入的影响。所以考虑一下,如果使用 odbc 驱动程序的机器可以(ab)被外部连接使用,它可能会受到 local-infile 指令的攻击。

【讨论】:

【参考方案3】:

有两个设置会影响LOAD DATA LOCAL INFILE

local-infile,在服务器上 local-infile,在客户端

参考the doc:

这也会影响连接器,LOAD DATA LOCAL INFILE 是 now disabled by default in the ODBC connector in 8.0.14。

【讨论】:

以上是关于MySQL:驱动程序从 5 更新到 8 后,LOAD DATA LOCAL INFILE 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 8 JPA 2.0 mysql 在 JPA 保存后将 1 秒添加到当前日期

从 4.1 升级到 MySQL 5.5 后,Php-MySQL UPDATE & INSERT 停止工作

将MySQL版本从5.7升级到8.0的操作过程和注意事项

[超详细]MySQL本地版本升级(从5.5.20到8.0.21)

iOS 8 中的 Facebook SDK 与 Swift/Xcode beta 5 返回 accessToken 但更新后没有用户 ID

更新后 NPM 死机 - 找不到模块 (OSX)