Увімкнення LOAD DATA LOCAL INFILE в mysql


10

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

Як налагодити, чому local-infile=1не працює установка, і як безпечно активувати LOAD DATA LOCAL INFILE?

Відповіді:


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.

Спробувати !!!


Дякую за вашу практичну інструкцію щодо налагодження, що мені справді було потрібно. На першому кроці виявилося, що я неправильно рухаюся, як показали 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.

Це має працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.