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.5.20到8.0.21)
iOS 8 中的 Facebook SDK 与 Swift/Xcode beta 5 返回 accessToken 但更新后没有用户 ID