mysql load data infile 文件没有找到(can't get file stat) ERROR 1148: The used command is not allowed with

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在Windows启动时报错‘Can't get stat of '' (OS errno 2 - No such file or directory)’的问题。首先,我需要根据提供的引用内容来分析可能的原因和解决方案。 根据引用[1],这个错误通常是因为MySQL不到指定的文件或目录,可能由于路径错误、权限问题或文件不存在。引用[2]和[3]提到修改basedir和datadir路径到正确的解压路径,并且确保路径中的斜杠正确,比如使用双反斜杠或正斜杠。这可能是一个关键点,用户可能在配置文件中路径设置错误或者使用了不正确的目录结构。 另外,引用[4]提到Docker中的类似问题,通过挂载卷来解决,但用户的问题是在Windows原生环境下,所以可能需要检查配置文件的位置和权限。比如,是否my.ini文件存在,路径是否正确,以及MySQL是否有权限访问这些目录。 接下来,我需要一步步分析可能的解决方案。首先检查配置文件中的basedir和datadir是否正确,路径是否存在,尤其是注意转义字符的问题。然后确认数据目录是否存在,特别是如果datadir指向MySQL解压后的Data文件夹,而用户可能没有手动创建这个目录,或者路径中有空格或特殊字符导致的问题。另外,权限问题也可能导致无法访问目录,需要确保MySQL服务账户有足够的权限。 另外,用户可能在安装过程中没有正确初始化数据目录,导致必要的系统表缺失,这时可能需要运行mysqld --initialize命令。同时,配置文件中的其他路径,如日志文件或socket文件的路径,也需要检查是否存在。 可能还需要检查MySQL的错误日志,以获取更详细的错误信息,帮助定位具体是哪个文件或目录无法访问。最后,如果所有配置都正确,但问题依旧,可能需要完全卸载并重新安装MySQL,确保每一步都正确执行。 现在需要将这些思考整理成结构化的解决方案,分步骤明,确保用户能够逐步排查和解决问题。同时,生成相关问题,帮助用户进一步理解可能相关的其他问题,比如权限设置、配置文件优化或数据迁移等。</think>### 分步解决方案:MySQL启动时出现‘Can't get stat of ''’错误 #### 步骤1:检查配置文件路径 1. 打开MySQL配置文件`my.ini`(通常位于MySQL安装目录下) 2. 确认`basedir`和`datadir`路径: - `basedir`应为MySQL解压目录,例如:$D:\MySQL\mysql-8.1.0-winx64$[^2] - `datadir`应为数据存储目录,例如:$D:\MySQL\mysql-8.1.0-winx64\Data$[^3] 3. 注意路径格式: - 使用双反斜杠`\\`或正斜杠`/` - 避免中文/空格等特殊字符 #### 步骤2:验证目录存在性 ```shell # 检查示例路径是否存在 dir D:\MySQL\mysql-8.1.0-winx64 dir D:\MySQL\mysql-8.1.0-winx64\Data ``` 若目录不存在: - 手动创建`Data`目录 - 重新运行初始化命令:$mysqld --initialize --console$[^3] #### 步骤3:检查文件权限 1. 右键点击MySQL安装目录 2. 选择「属性」→「安全」选项卡 3. 确保`SYSTEM`和`Administrators`组有完全控制权限 #### 步骤4:核对服务配置 1. 打开服务管理器(services.msc) 2. 找到MySQL服务 3. 检查「登录」选项卡: - 选择「本地系统账户」 - 勾选「允许服务与桌面交互」 #### 步骤5:查看错误日志 在`datadir`目录下查`.err`文件,定位具体缺失的文件路径。例如: $$ [ERROR] [MY-010095] [Server] Can't read from the data directory. Could not find required file: mysql.ibd $$ #### 步骤6:执行彻底重装(可选) 1. 完全卸载MySQL 2. 删除残留的注册表项 3. 重新解压安装包到纯英文路径 4. 运行初始化命令: ```shell mysqld --initialize-insecure --user=mysql ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值