Abilitare LOAD DATA LOCAL INFILE in mysql


10

LOAD DATA LOCAL INFILEnon è abilitato per impostazione predefinita. Normalmente, dovrebbe essere abilitata ponendo local-infile=1in my.cnf. Ma non funziona per tutte le installazioni. Nella mia esperienza, ha funzionato per Debian 7, ma non per Debian 7 minimal, sebbene entrambe le installazioni provengano dallo stesso pacchetto deb precompilato. Entrambi su OpenVZ VPS.

Come eseguire il debug perché local-infile=1non funziona per un'installazione e come attivare in sicurezza LOAD DATA LOCAL INFILE?

Risposte:


19

Se MySQL Debian-7 minimal non può essere utilizzato local_infile, guarda in giro tutti i file make usati per la compilazione per vedere se è disabilitato di default o se local_infileè abilitato per Debian-7.

Prima di prendere quel tipo di tempo, eseguire quanto segue:

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

Dovrebbe fare eco a quanto segue:

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>

Se dice ancora 'OFF', allora guarda in profondità nelle impostazioni del compilatore per abilitarlo.

Se impostato su 'ON', stai bene.

Si prega di notare che non ho detto

SET GLOBAL local_infile = 1;

Ho detto di usare

SET GLOBAL local_infile = 'ON';

L' opzione local_infile è booleana, non numerica .

Se si imposta questo in my.cnf

[mysqld]
local_infile=ON

e il riavvio di mysql non funziona neanche, dovrai avviare mysql con qualcosa del genere:

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

o forse aggiungendo questo a my.cnf

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

quindi riavviare mysql.

Provaci !!!


Grazie per le tue istruzioni pratiche per il debug, ciò di cui avevo davvero bisogno. Nel primo passo, ha rivelato, sono sulla strada sbagliata, come mostrato local_infile | ON . Sembra che il problema non sia mysql, ma PHPo probabilmente il connettore / driver mysql-PHP (mysqli).
Googlebot,

ho dovuto usare questo in php per farlo funzionare con msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan,

L'abilitazione in PHP è mysqli.allow_local_infile = Onstata buona per me perché GLOBAL local_infile = 'ON';era già attiva.
Rolands.EU,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.