web-dev-qa-db-fra.com

Activer LOAD DATA LOCAL INFILE dans mysql

LOAD DATA LOCAL INFILE n'est pas activé par défaut. Normalement, il doit être activé en plaçant local-infile=1 dans 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=1 ne fonctionne pas pour une installation, et comment activer en toute sécurité LOAD DATA LOCAL INFILE?

10
Googlebot

Si MySQL Debian-7 minimal ne peut pas utiliser local_infile, parcourez tous les fichiers make utilisés pour la compilation pour voir s'il est désactivé par défaut ou si local_infile est activé 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>

S'il indique toujours 'OFF', puis regardez en profondeur dans les paramètres du compilateur pour l'activer.

S'il est défini sur 'ON', tu vas bien.

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 définissez ceci 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 !!!

18
RolandoMySQLDBA