Ошибка #3948 - Loading local data is disabled
Хочу загрузить большой txt файл в mysql с помощью запроса:
LOAD DATA LOCAL INFILE '/large_data.txt' INTO TABLE temp_import
FIELDS TERMINATED BY ','
Получаю ошибку:
#3948 - Loading local data is disabled; this must be enabled on both the client and server sides
Что нужно исправить? Читала про настройку local-infile=1 , но не ясно, как применить ее в php? У меня нет доступа к настройкам Mysql.
3 ответа
Правила ответов
- Указывайте ссылку на источник, если ответ нашли в интернете.
- Давайте развернутый ответ, основанный на реальном опыте, то что вы уже делали.
- Все ответы проходят модерацию, кроме ответов, от пользователей со статусом Эксперт.
- Разрешены теги: <b>, <img src>, <a href>
Есть 2 момента, которые стоит проверить.
1. Какая у вас версия PHP? Если последние версии 7.4 или 8.x, то обратите внимание на то, что PHP запретили такое на своей стороне в опции mysqli.allow_local_infile. Вот ссылка https://www.php.net/manual/en/mysqli.configuration.php
То есть, даже если настроете mysql, то скорее всего получите ошибку
#2000 - LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile
Вам нужно добавить в файл php.ini такой код:
mysqli.allow_local_infile = On
После чего перезапустить Apache, если вы его используете.
2. Проверьте, что стоит в поле local_infile на стороне mysql. Сделайте такой sql запрос, например в phpmyadmin:
show global variables like 'local_infile';
Вы получите сообщение, примерно как на фото ниже
Сделайте запрос
SET GLOBAL local_infile = true;
Теперь все должно заработать.
1. Уберите слово LOCAL из запроса.
2. Проверьте mysql опцию secure_file_priv
Если вы сами настраивали MySql, то по-умолчанию, ее значение равно NULL. Это значит, что вы не можете пользоваться загрузкой файлов.
Для проверки введите такой запрос:
SHOW VARIABLES LIKE "secure_file_priv"
Если в поле Value будет NULL, значит вам нужно добавить такое поле в ваш файл my.ini
secure_file_priv=""
После этого остановите и запустите mysql командами
net mysql stop
net mysql start
3. Проверьте путь к файлу. Если вы работаете в Windows, то путь должен быть такого вида:
C:/mysql/data/file.txt
Ваш файл может быть расположен в любом месте.
Сталкивался с такой же ошибкой в phpmyadmin. В итоге понял, что у них есть баг и даже если сделать все, что здесь ответили, то ошибка все равно будет. Так что, если у вас старая версия phpmyadmin, то обновитесь до последней. У меня была версия 5.0.x
Это касается вашего запроса с LOCAL, без него работает, если убрать NULL в опции secure_file_priv, как в ответе.