MYSQL-执行“load data local infile”报错“The used command is not allowed with this MySQL version”

本文详细记录了解决MySQL版本5.5.38下root和普通用户在不同机器间使用loaddata命令导数据时遇到的问题。包括root用户直接使用loaddata命令、普通用户使用loaddata命令时的权限问题、以及非root用户从client机器导数据至remote MySQL server的安全限制。提供了详细的解决方案,如使用loaddatalocalinfile命令、为普通用户赋予FILEPrivilege和配置.my.cnf文件,以及如何在命令行客户端中启用LOADDATALOCAL功能。

MYSQL在执行“load data local infile”的时候报错“The used command is not allowed with this MySQL version”,本人所用的版本是 “5.5.38-0+wheezy1”,然后在网上找到了下面这篇文章,得到的解决方案。


在部署在不同机器上的mysql数据库之间导数据时,load data infile是一个很高效的命令,从host1的db1.table1通过select ... into outfile将数据导入文本文件,然后通过load data infile将数据导入host2的db2.table1。

       使用过程中碰到一些典型问题及并最终找到解决方法。作为笔记,记录与此。

1. root用户(这里只mysql的root,非Linux系统的root)在mysql server部署机器通过load data infile命令导入数据时,只要文件路径指定正确,一般不会有问题

2. 非root用户在mysql server部署机器通过load data infile命令导入数据时,报错:
       ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES)
       可能原因:这个一般是因为非root用户没有FILE Privilege,可以通过show grants查看当前登陆用户的权限,也可以通过select mysql.user查看某用户的权限,一般情况下,normal user是无FILE权限的
       三种解决办法:
       1)命令加local参数,用load data local infile 'filename' into table xxx.xxx来导数据(推荐使用)
       2)给normal user开通FILE Privilege,注意:FILE权限与SELECE/DELETE/UPDATE等不同,后者是可以具体指定到某个db的某个表的,而FILE则是全局的,即只能通过grant FILE on *.* to 'xxx'@'xxx'才能使FILE权限对所有db的所有tables生效。通过grant all on db.* to 'xxx'@'xxx'不能使指定的user在指定的db上具有FILE权限。
       根据最小权限原则(操作系统安全的概念),这个方法并不安全,故不推荐使用。
       3)修改.my.cnf中的配置,具体方法见此处

3. 非root用户从client机器load data local infile至remote mysql server时,报错:
       ERROR 1148 (42000): The used command is not allowed with this MySQL version
       可能原因(from mysql reference manual):
       If LOAD DATA LOCAL is disabled, either in the server or the client, a client that attempts to issue such a statement receives the following error message:
       ERROR 1148: The used command is not allowed with this MySQL version
       可见,出于安全考虑,默认是不允许从client host远程通过load data命令导数据的
       解决办法:
       For the mysql command-line client, enable LOAD DATA LOCAL by specifying the --local-infile[=1]option, or disable it with the --local-infile=0 option
       也即,在需要从client host导数据的情况下,登陆mysql时,需用--local-infile[=1]显式指定参数,典型命令形式为:
        mysql --local-infile -u user -ppasswd
       登陆成功后,执行load data infile 'filename' into table xxx.xxx即可


原文:http://blog.youkuaiyun.com/slvher/article/details/8768468

<think>好的,用户遇到了MySQL的SQL error 1148,即命令不允许在当前版本中使用。我需要先理解这个错误的具体原因。根据经验,错误1148通常与MySQL客户端在执行某些命令时未启用特定选项有关,比如使用LOAD DATA LOCAL INFILE时未开启本地文件加载功能。 首先,用户可能是在尝试执行需要本地文件加载的命令,但MySQL服务器或客户端配置中未启用相关选项。需要检查服务器端的local_infile参数是否设置为ON,这可以通过SHOW GLOBAL VARIABLES LIKE 'local_infile'来确认。如果该参数是OFF,用户需要修改MySQL配置文件(如my.cnf或my.ini),在[mysqld]部分添加local_infile=1,并重启服务。 其次,客户端连接时也需要指定允许本地文件加载。用户可能在连接命令中遗漏了--local-infile=1选项,正确的连接方式应该是mysql -u 用户名 -p --local-infile=1。此外,确保使用的客户端库支持该功能,比如某些PHP版本可能需要额外配置。 另外,用户可能在使用某些工具或编程语言时遇到此问题,这时需要检查对应驱动程序的设置。例如,在Python的mysql-connector中,需要在连接参数中添加allow_local_infile=True。同时,用户权限也是一个考虑因素,确保执行命令的账户拥有FILE权限,可以通过GRANT命令授予。 最后,需要提醒用户注意安全风险,因为启用本地文件加载可能带来潜在的安全隐患,应确保仅从可信源加载文件。总结解决方案步骤后,建议用户逐步检查配置、连接方式和权限设置,以解决错误1148。</think>### MySQL Error 1148 解决方案 当出现 `SQL Error 1148: The used command is not allowed with this MySQL version` 时,通常是因为MySQL服务器或客户端配置限制了特定命令(如 `LOAD DATA LOCAL INFILE`)的执行。以下是逐步解决方案: --- #### 1. **检查服务器配置** - **启用 `local_infile` 参数** MySQL服务器默认可能禁用本地文件加载功能。需在配置文件(如 `my.cnf` 或 `my.ini`)中添加以下配置: ```ini [mysqld] local_infile = 1 ``` 修改后重启MySQL服务[^1]。 - **验证参数状态** 登录MySQL执行: ```sql SHOW GLOBAL VARIABLES LIKE 'local_infile'; ``` 若结果为 `ON` 表示配置生效。 --- #### 2. **客户端连接时启用本地文件加载** 在连接MySQL时需显式启用 `--local-infile` 选项: ```bash mysql -u 用户名 -p --local-infile=1 ``` 或通过编程语言连接时添加对应参数(如Python的 `mysql-connector` 需设置 `allow_local_infile=True`)[^2]。 --- #### 3. **检查权限设置** - 确保用户拥有 `FILE` 权限: ```sql GRANT FILE ON *.* TO '用户名'@'主机名'; FLUSH PRIVILEGES; ``` --- #### 4. **验证命令语法** 使用 `LOAD DATA LOCAL INFILE` 时需确保路径正确且文件可访问: ```sql LOAD DATA LOCAL INFILE '/path/to/file.csv' INTO TABLE 表名 FIELDS TERMINATED BY ','; ``` --- #### 5. **安全注意事项** 启用 `local_infile` 可能带来安全风险,建议仅临时开启并在操作完成后恢复默认配置[^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值