报错ERROR 29 (HY000): File '/usr/local/hive/stocks.csv' not found (Errcode: 13 - Permission denied)
时间: 2024-04-23 18:21:56 浏览: 253
这个错误通常是由于MySQL服务器没有足够的权限来读取`/usr/local/hive/stocks.csv`文件导致的。您可以尝试以下几种方法来解决这个问题:
1. 检查文件路径是否正确:确认文件路径是否真实存在,并且MySQL用户有足够的权限读取该文件。可以使用`ls -l /usr/local/hive/stocks.csv`命令查看文件的权限和所有者等信息。
2. 更改文件权限:如果MySQL用户没有足够的权限读取该文件,可以使用`chmod`命令修改文件权限,例如`sudo chmod 644 /usr/local/hive/stocks.csv`。
3. 更改文件所有者:如果文件所有者不是MySQL用户,可以使用`chown`命令将文件的所有者更改为MySQL用户,例如`sudo chown mysql:mysql /usr/local/hive/stocks.csv`。
4. 将文件移动到MySQL用户有权限读取的目录下:将文件移动到MySQL用户有权限读取的目录下,例如`/tmp`目录,并使用`LOAD DATA INFILE`语句中的新路径。注意,如果将文件移动到`/tmp`目录下,请确保在MySQL中使用的是相对路径,例如`LOAD DATA INFILE 'stocks.csv' INTO TABLE stocks`。
一旦解决了文件权限问题,您应该能够使用`LOAD DATA INFILE`语句成功地将数据从CSV文件导入到MySQL表中。
相关问题
/usr/local/hive/stocks.csv权限-rw-r--r-- 1 hadoop0306 hadoop0306 116497085 1月 22 2014 /usr/local/hive/stocks.csv
根据您提供的信息,`/usr/local/hive/stocks.csv`文件的权限为`-rw-r--r--`,所有者为`hadoop0306`,所属组为`hadoop0306`。这意味着只有`hadoop0306`用户有读写权限,其他用户只有读取权限。
如果您正在使用MySQL的`LOAD DATA INFILE`语句导入数据,MySQL需要有足够的权限读取该文件。一种解决方法是将`/usr/local/hive/stocks.csv`文件的所有者更改为MySQL用户,例如`mysql:mysql`,并将文件权限设置为`644`,即:
```
sudo chown mysql:mysql /usr/local/hive/stocks.csv
sudo chmod 644 /usr/local/hive/stocks.csv
```
这样一来,MySQL用户就可以读取该文件了。如果您不想更改文件的所有者或权限,可以将`/usr/local/hive/stocks.csv`文件复制到MySQL用户有权限读取的目录下,并使用`LOAD DATA INFILE`语句中的新路径。
注意,如果您使用的是SELinux安全模块,还需要确保MySQL用户有读取`/usr/local/hive/stocks.csv`文件的SELinux权限。可以使用`ls -Z /usr/local/hive/stocks.csv`命令查看该文件的SELinux上下文,并使用`chcon`命令修改MySQL用户的SELinux上下文。例如:
```
sudo chcon -t mysqld_db_t /usr/local/hive/stocks.csv
```
load data infile '/usr/local/hive/stocks.csv' into table stocks与load data local infile '/usr/local/hive/stocks.csv' into table stocks有什么区别
这两个命令都是将数据从一个 CSV 文件加载到 Hive 表中。区别在于数据文件的位置。
- `load data infile '/usr/local/hive/stocks.csv' into table stocks`:这个命令将会在 Hive 客户端机器上寻找数据文件 `/usr/local/hive/stocks.csv`,然后将数据加载到 Hive 表 `stocks` 中。
- `load data local infile '/usr/local/hive/stocks.csv' into table stocks`:这个命令与上一个命令的区别在于 `local` 关键字,它表示在当前机器上寻找数据文件 `/usr/local/hive/stocks.csv`,然后将数据加载到 Hive 表 `stocks` 中。
因此,如果数据文件在 Hive 客户端机器上,你应该使用第一个命令;如果数据文件在当前机器上,你应该使用第二个命令。
阅读全文