Используйте файл csv для mysql - PullRequest
2 голосов
/ 01 августа 2020

Я пытаюсь вставить несколько строк из файла csv в MySQL базу данных с помощью командной строки. Имя файла - «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 был "ВЫКЛЮЧЕН". Затем я попытался установить его на «ВКЛ», используя следующий код:

`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`

Хотя, когда я проверяю гранты для пользователь «student», с которым я работаю:

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)

, что означает, что «студент» имеет все привилегии в базе данных «elevage».

Пожалуйста, посоветуйте.

1 Ответ

1 голос
/ 01 августа 2020

Привилегия SYSTEM_VARIABLES_ADMIN (а также устаревшая привилегия SUPER) не является привилегией для каждой базы данных, а скорее привилегией для каждого сервера. И это привилегия администратора, а не пользователя.

Зачем вам нужны такие привилегии для использования LOAD DATA? Поскольку эта команда требует, чтобы ее пользователь записывал файлы непосредственно в файловое пространство компьютера сервера базы данных. Таким образом, сервер базы данных должен полностью доверять пользователям этой команды.

Чтобы использовать LOAD DATA LOCAL, вам нужно, чтобы администратор сервера предоставил вам эти привилегии, примерно так:

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

Если это общий сервер, маловероятно, что ваш администратор предоставит вам эту привилегию. Если это ваш собственный сервер, вы являетесь администратором и можете использовать свою учетную запись root либо для предоставления привилегии своей учетной записи учащегося, либо использовать учетную запись root напрямую для выполнения своей команды LOAD DATA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...