Włączanie LOAD DATA LOCAL INFILE w mysql

10

LOAD DATA LOCAL INFILEnie jest domyślnie włączony. Zwykle powinien być włączony poprzez umieszczenie local-infile=1w my.cnf. Ale to nie działa dla wszystkich instalacji. Z mojego doświadczenia wynika, że ​​działał on dla Debiana 7, ale nie dla Debiana 7 minimalnego, chociaż obie instalacje pochodzą z tego samego wstępnie skompilowanego pakietu deb. Oba na OpenVZ VPS.

Jak debugować, dlaczego local-infile=1nie działa w przypadku instalacji i jak bezpiecznie ją aktywować LOAD DATA LOCAL INFILE?

Googlebot
źródło

Odpowiedzi:

19

Jeśli nie można używać minimalnego MySQL Debian-7 local_infile, rozejrzyj się po plikach make używanych do kompilacji, aby sprawdzić, czy jest on domyślnie wyłączony lub czy local_infilejest włączony dla Debian-7.

Przed poświęceniem tego czasu uruchom następujące czynności:

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

Powinien odzwierciedlać następujące elementy:

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>

Jeśli nadal pojawia się komunikat 'OFF', zajrzyj głęboko w ustawienia kompilatora, aby go włączyć.

Jeśli jest ustawiony 'ON', wszystko jest w porządku.

Pamiętaj, że nie powiedziałem

SET GLOBAL local_infile = 1;

Powiedziałem use

SET GLOBAL local_infile = 'ON';

Opcja local_infile jest logiczna, nie numeryczny .

Jeśli to ustawienie my.cnf

[mysqld]
local_infile=ON

zrestartowanie mysql też nie działa, będziesz musiał uruchomić mysql z czymś takim:

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

a może dodanie tego do my.cnf

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

następnie uruchom ponownie mysql.

Spróbuj !!!

RolandoMySQLDBA
źródło
Dziękujemy za praktyczną instrukcję debugowania, której tak naprawdę potrzebowałem. W pierwszym kroku okazało się, że jestem na złym torze, jak pokazano local_infile | ON . Wygląda na to, że problemem nie jest mysql, ale PHPprawdopodobnie złącze / sterownik mysql-PHP (mysqli).
Googlebot
musiałem użyć tego w php, aby działało z msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan
Włączanie w PHP mysqli.allow_local_infile = Onbyło dla mnie dobre, ponieważ GLOBAL local_infile = 'ON';było już włączone.
Rolands.EU,
0

W przypadku domyślnej instalacji MySQL 8.0.20 w systemie Windows:

  1. Poszukaj pliku inicjalizacji znajdującego się pod adresem C:\ProgramData\MySQL\MySQL Server 8.0\my.ini.
  2. Otwórz my.iniplik za pomocą edytora tekstu.
  3. Poszukaj nagłówków [client], [mysql]w sekcji KLIENT i [mysqld]w sekcji SERWER.
  4. Dodaj następującą instrukcję pod każdym z tych nagłówków:

    local_infile=ON

  5. Zapisz plik i uruchom ponownie usługę MySQL80 w lokalnych usługach Windows.

To powinno działać.

Nowy dzieciak na MySQL
źródło