ERROR 1148 (42000): The used command is not allowed with this MySQL versio

本文介绍如何解决MySQL中LOAD DATA INFILE命令使用时遇到的常见问题,包括版本检查、编译安装参数、命令行参数调整等。并详细解析了路径、权限及安全问题,特别是跨主机使用时的注意事项。
关于MYSQL LOAD DATA LOCAL INFILE 支持问题

1.执行报错:ERROR 1148 (42000): The used command is not allowed with this MySQL version

解决方法:

先进入MYSQL检查一下版本号:5.1或者以上的都支持。
mysql> select version()


1.由于MYSQL编译安装时默认不允许执行这个命令。

1)安装时加上 --enable-local-infile 参数就可以了执行了。
./configure --prefix=/usr/local/mysql --enable-local-infile
make
make install


2.可以在执行命中加上--local-infile=1 参数即可解决。
如:/usr/local/mysql/bin/mysql -uroot -h192.168.0.2 -proot databaseName --local-infile=1 -e "LOAD DATA LOCAL INFILE 'data.txt' into table test(name,sex) "

 

 

使用mysql 的时候用到了load data infile 的命令,为什么用这个命令和命令怎么用不解释,参考手册已经很详细了,之说出现的问题。

 

1.被处理的文件需要严谨的文件格式。

 

2.路径问题,注意windows 下\\和linux 下/的区别。

 

3.权限问题,主要针对linux,其实也是程序处理linux文件都要考虑的问题。

 

4.安全问题,重点,我就为了解决这个问题搞了两天,网络上,就把文档上的东西贴上去完事,说的太模糊而且也不容易懂。

 

 

比如主机A上装了MYSQL,待处理文件F在A上,在A上用程序处理load data infile 是没有问题的。事情往往比想象的困难,现在主机B来了,需要用程序把B上的文件用程序处理 load data infile到A中的数据库中,如果不加任何处理的话是不能成功的,当你运行程序的时候,会给出找不到文件的错误提示。你会很奇怪明明文件就在那里怎么能 找不到呢?

 

 

且看文档中的内容。

如果指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径
名称,以指定确切的位置。如果给定的是一个相对的路径名称,则此名称会被理解为相对于启动客户端时所在的目录。

· 如果LOCAL没有被指定,则文件必须位于服务器主机上,并且被服务器直接读取。

当在服务器主机上为文件定位时,服务器使用以下规则:

· 如果给定了一个绝对的路径名称,则服务器使用此路径名称。

· 如果给定了带有一个或多个引导组件的相对路径名称,则服务器会搜索相对于服务器数据目录的文件。

· 如果给定了一个不带引导组件的文件名称,则服务器会在默认数据库的数据库目录中寻找文件。

注意,这些规则意味着名为./myfile.txt的文件会从服务器数据目录中被读取,而名为myfile.txt的同样的文件会从
默认数据库的数据库目录中读取。例如,下面的LOAD DATA语句会从db1数据库目录中读取文件data.txt,因为
db1是当前数据库。即使语句明确把文件载入到db2数据库中的表里,也会从db1目录中读取。

mysql> USE db1;
mysql> LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;
注意,使用正斜杠指定Windows路径名称,而不是使用反斜杠。如果您使用反斜杠,您必须使用两个。

出于安全原因,当读取位于服务器中的文本文件时,文件必须位于数据库目录中,或者是全体可读的。另外,要对服务
器文件使用LOAD DATA INFILE,您必须拥有FILE权限。


上面说的很多,刚开始看不好懂,简要说明下,就是说如果使用load data infile 命令加载文件的时候,不管你文件在哪里它只加载装了mysql 的机器上的本地文件,因此想上面说的 调用B机器上的程序处理load data infile 的命令的时候,A机器接收到这个命令就会从A机器上找这个文件,因此file not found exception 也是理所当然的,对数据来说它就是没有知道文件嘛。

说了这么多那怎么办呢,当然有办法

使用local关键字,即load data local infile

<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]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值