Включение LOAD DATA LOCAL INFILE в MySQL

10

LOAD DATA LOCAL INFILEне включен по умолчанию. Обычно, это должно быть включено, помещая local-infile=1в my.cnf. Но это не работает для всех установок. По моему опыту, он работал для Debian 7, но не для Debian 7 минимальной, хотя обе установки происходят из одного предварительно скомпилированного пакета deb. Оба на OpenVZ VPS.

Как отладить, почему local-infile=1не работает установка, и как безопасно активировать LOAD DATA LOCAL INFILE?

Googlebot
источник

Ответы:

19

Если MySQL Debian-7 минимальный не может использовать local_infile, просмотрите все файлы make, используемые для компиляции, чтобы увидеть, отключен ли он по умолчанию или local_infileвключен ли для Debian-7.

Перед тем, как взять такое время, выполните следующее:

SHOW GLOBAL VARIABLES LIKE 'local_infile';
SET GLOBAL local_infile = 'ON';
SHOW GLOBAL VARIABLES LIKE 'local_infile';

Следует повторить следующее:

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL local_infile = 'ON';
Query OK, 0 rows affected (0.06 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

Если он все еще говорит 'OFF', то посмотрите в настройках компилятора, чтобы включить его.

Если он установлен на 'ON', вы в порядке.

Обратите внимание, я не сказал

SET GLOBAL local_infile = 1;

Я сказал использовать

SET GLOBAL local_infile = 'ON';

Вариант local_infile булево, а не числовое .

Если установить это в my.cnf

[mysqld]
local_infile=ON

и перезапуск mysql тоже не работает, вам придется запустить mysql примерно так:

echo "SET GLOBAL local_infile = 'ON';" > /var/lib/mysql/init_file.sql
chown mysql:mysql /var/lib/mysql/init_file.sql
service mysql stop
service mysql start --init-file=/var/lib/mysql/init_file.sql
rm -f /var/lib/mysql/init_file.sql

или, возможно, добавив это к my.cnf

[mysqld]
init-file=/var/lib/mysql/init_file.sql

затем перезапустите MySQL.

Попробуйте!

RolandoMySQLDBA
источник
Спасибо за вашу практическую инструкцию по отладке, что мне действительно нужно. На первом этапе выяснилось, что я на неверном пути, как показало local_infile | ON . Кажется, проблема не в MySQL, а, PHPвозможно, в соединителе / ​​драйвере mysql-PHP (mysqli).
Googlebot
я должен был использовать это в php, чтобы заставить его работать с msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Раду Богдан
Включение в PHP mysqli.allow_local_infile = Onбыло хорошо для меня, потому что GLOBAL local_infile = 'ON';уже было включено.
Rolands.EU
0

Для установки по умолчанию MySQL 8.0.20 в Windows:

  1. Ищите файл инициализации, расположенный в C:\ProgramData\MySQL\MySQL Server 8.0\my.ini.
  2. Откройте my.iniфайл в текстовом редакторе.
  3. Посмотрите на заголовки [client], [mysql]в разделе КЛИЕНТА и [mysqld]в разделе SERVER.
  4. Добавьте следующее утверждение под каждым из этих заголовков:

    local_infile=ON

  5. Сохраните файл и перезапустите службу MySQL80 под локальными службами Windows.

Он должен работать.

Новый ребенок на MySQL
источник