首页 > 解决方案 > 使用csv文件到mysql

问题描述

我尝试通过命令行将一些行从 csv 文件插入 MySQL 数据库“elevage”。该文件名为“animal.csv”。以下是我的要求:

`mysql> LOAD DATA LOCAL INFILE 'F:/MYSQL/animal.csv'
    -> INTO TABLE Animal
    -> FIELDS TERMINATED BY ';' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n'
    -> (espece, sexe, date_naissance, nom, commentaires);

我遇到了这个错误信息

`ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides`.

然后使用了以下代码:

`SHOW GLOBAL VARIABLES LIKE 'local_infile'`; 

我发现:local_file 是“OFF”。然后我尝试使用以下代码将其设置为“ON”:

`SET GLOBAL local_infile=1;`

不幸的是,我遇到了另一个错误消息:

`ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation`

虽然,当我检查我正在工作的用户“学生”的资助时:

mysql> SHOW GRANTS FOR CURRENT_USER();

我得到:

+--------------------------------------------------------------+
| Grants for student@localhost                                 |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `student`@`localhost`                  |
| GRANT ALL PRIVILEGES ON `elevage`.* TO `student`@`localhost` |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)

这意味着“student”拥有数据库“elevage”的所有权限。

请指教。

标签: mysqlload-data-infile

解决方案


SYSTEM_VARIABLES_ADMIN特权(以及已弃用的特权SUPER)不是每个数据库的特权,而是每个服务器的特权。而且,这是管理员的权限,而不是用户的权限。

为什么需要这样的权限才能使用LOAD DATA?因为该命令要求其用户将文件直接写入数据库服务器机器的文件空间。因此,该命令的用户必须完全受到数据库服务器的信任。

要使用LOAD DATA LOCAL,您需要让服务器管理员授予您这些权限,如下所示:

GRANT SUPER, SYSTEM_VARIABLES_ADMIN ON *.* TO 'student'@'localhost';

如果这是共享服务器,您的管理员似乎不太可能授予您此权限。如果是您自己的服务器,您就是管理员,您可以使用您的 root 帐户授予学生帐户权限,或者直接使用 root 帐户运行您的LOAD DATA命令。


推荐阅读