问题描述
环境:win7 MySQL Server 8.0
MySQL直接安装到本机,利用"LOAD DATA LOCAL INFILE filename INTO TABLE tablename"将EXCEL转换成的csv文件导入数据库中表时,提示如下错误:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
官方描述
根据官方描述,LOAD DATA 功能是将主机上的文件(.txt、.csv等)加载到指定表中;加上LOCAL关键字,则可以将客户机上的文件加载到指定表中。但是,加上LOCAL关键字后,会存在两个潜在的安全问题:
1. 服务器端可以访问客户端用户在客户端上可读的任何文件。
2. 在客户端从web服务器连接的情况下,用户可以通过LOAD DATA LOCAL读取Web服务器进程可读的任何文件。
为了让管理员和应用管理local data的功能,MySQL提供了LOCAL配置。
服务端
local_infile系统变量控制了服务器端的LOCAL能力。根据local_infile设置,服务器拒绝或者允许启用LOCAL的客户端加载客户端本地数据。默认情况下,local_infile被禁用。
客户端
对于MySQL客户端而言,默认情况下,LOCAL DATA 加载能力也被禁用。为了启用或禁用该功能,可使用--local-infile = 1或0控制。
以上问题详述见下述链接:
https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html
解决方案:
1. 修改MySQL服务器端的配置文件my.ini(windows)或my.cnf(Linux),在行末加上loose-local-infile=1。默认安装的情况下,Windows下的my.ini文件路径如下:
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini。
2. 客户端登录MySQL服务器后,命令修改客户端local_infile的值SET GLOBAL local_infile = 1。用SHOW VARIABLES LIKE ‘local_infile’,查看是否修改成功。
3. 退出MySQL服务器,使用mysql -u root -p --local-infile databasename重新登录即可。