Activer LOAD DATA LOCAL INFILE dans mysql

10

LOAD DATA LOCAL INFILEn'est pas activé par défaut. Normalement, il doit être activé en plaçant local-infile=1dans my.cnf. Mais cela ne fonctionne pas pour toutes les installations. D'après mon expérience, cela a fonctionné pour Debian 7, mais pas Debian 7 minimal, bien que les deux installations proviennent du même paquet deb précompilé. Les deux sur OpenVZ VPS.

Comment déboguer pourquoi local-infile=1ne fonctionne pas pour une installation, et comment l'activer en toute sécurité LOAD DATA LOCAL INFILE?

Googlebot
la source

Réponses:

19

Si la version minimale de MySQL Debian-7 ne peut pas être utilisée local_infile, parcourez tous les fichiers make utilisés pour la compilation pour voir si elle est désactivée par défaut ou si elle local_infileest activée pour Debian-7.

Avant de prendre ce genre de temps, veuillez exécuter ce qui suit:

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

Il devrait faire écho aux éléments suivants:

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>

Si cela dit toujours 'OFF', regardez en profondeur dans les paramètres du compilateur pour l'activer.

S'il est défini sur 'ON', vous êtes OK.

Veuillez noter que je n'ai pas dit

SET GLOBAL local_infile = 1;

J'ai dit utiliser

SET GLOBAL local_infile = 'ON';

L' option local_infile est booléenne et non numérique .

Si vous le définissez dans my.cnf

[mysqld]
local_infile=ON

et redémarrer mysql ne fonctionne pas non plus, vous devrez démarrer mysql avec quelque chose comme ceci:

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

ou peut-être l'ajouter à my.cnf

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

puis redémarrez mysql.

Essaie !!!

RolandoMySQLDBA
la source
Merci pour vos instructions pratiques pour le débogage, ce dont j'avais vraiment besoin. Dans la première étape, il a révélé que je suis sur la mauvaise voie, comme indiqué local_infile | ON . Il semble que le problème ne soit pas mysql, mais PHPou probablement le connecteur / pilote mysql-PHP (mysqli).
Googlebot
j'ai dû utiliser ceci en php pour le faire fonctionner avec msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan
L'activation en PHP mysqli.allow_local_infile = Onétait bonne pour moi car elle GLOBAL local_infile = 'ON';était déjà activée.
Rolands.EU