mysql - 替代 LOAD_FILE() 函数?

标签 mysql

我搜索并找到了这篇文章 (http://stackoverflow.com/questions/1814297/cant-load-file-data-in-the-mysql-directory),但它对我不起作用。

我是 un Ubuntu 12.04,MySQL 版本是 5.5.22-0ubuntu1

我已经以 root 身份登录到 MySQL,所以授权应该没问题:

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+

我正在尝试将文本文件中的一些数据插入 MySQL 数据库,但 LOAD_FILE 函数似乎无法正常工作

我创建了一个测试文件,权限为 777 并复制到安装的根目录(我尝试将所有者/组更改为 root:root 和 mysql:mysql 但仍然没有用):

mysql> select load_file('/test.txt');
+------------------------+
| load_file('/test.txt') |
+------------------------+
| NULL                   |
+------------------------+
1 row in set (0.00 sec)

但如果我尝试这样做:

mysql> select load_file('/etc/hosts');

它工作正常。如果我将测试文件复制到 /etc 中,它仍然失败。

有没有人以前见过这个或者可以告诉我另一种加载到数据库中的方法?

最佳答案

使用load_file ,必须满足以下条件(来自 documentation ):

  1. 文件必须位于服务器主机上
  2. 您必须指定文件的完整路径名,并且必须有 FILE特权。
  3. 文件必须对所有人都可读,并且其大小小于max_allowed_packet。字节。
  4. 如果secure_file_priv系统变量设置为非空目录名,要加载的文件必须位于该目录中。

如果文件包含您要执行的 SQL 语句,更简单的方法可能是将其通过管道输入:

mysql -u foo -p dbname < filename.sql

关于mysql - 替代 LOAD_FILE() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012445/

相关文章:

mysql - 如何从表中选择除最新 5 项之外的最后 50 项?

php - 错误查询 laravel 5.5

php - 如何使用 php 和 mysql 记录用户操作?

mysql - 如何强制Hibernate添加ID列来插入查询?

java - hibernate 时冗余数据多对一映射

php - 如果使用 codeigniter 某些列为空,则查询不显示结果

mysql按字母和数字排序

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column '' in 'where clause' (SQL: select * from `customer` where `` = 1 limit 1)

MySQL:根据查询结果设置用户变量

php - PDOException 语法错误或访问冲突 1142,当创建引用其他 View 的 View 时