Habilitar CARGAR DATOS LOCALES INFILE en mysql

10

LOAD DATA LOCAL INFILEno está habilitado por defecto. Normalmente, debe habilitarse colocando local-infile=1en my.cnf. Pero no funciona para todas las instalaciones. En mi experiencia, funcionó para Debian 7, pero no para Debian 7 minimal, aunque ambas instalaciones provienen del mismo paquete de Deb precompilado. Ambos en OpenVZ VPS.

¿Cómo depurar por qué local-infile=1no funciona para una instalación y cómo activar de forma segura LOAD DATA LOCAL INFILE?

Googlebot
fuente

Respuestas:

19

Si el MySQL Debian-7 minimal no se puede usar local_infile, mire a su alrededor todos los archivos make utilizados para la compilación para ver si está deshabilitado de manera predeterminada o si local_infileestá habilitado para el Debian-7.

Antes de tomar ese tipo de tiempo, ejecute lo siguiente:

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

Debería hacer eco de lo siguiente:

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 aún así dice 'OFF', busque en la configuración del compilador para habilitarlo.

Si se establece en 'ON', estás bien.

Tenga en cuenta que no dije

SET GLOBAL local_infile = 1;

Dije usar

SET GLOBAL local_infile = 'ON';

La opción local_infile es booleana, no numérica .

Si configura esto en my.cnf

[mysqld]
local_infile=ON

y reiniciar mysql tampoco funciona, tendrás que iniciar mysql con algo como esto:

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 quizás agregando esto a my.cnf

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

luego reinicie mysql.

Darle una oportunidad !!!

RolandoMySQLDBA
fuente
Gracias por sus instrucciones prácticas para la depuración, lo que realmente necesitaba. En el primer paso, reveló, estoy en el camino equivocado, como se muestra local_infile | ON . Parece que el problema no es mysql, sino PHPprobablemente el conector / controlador mysql-PHP (mysqli).
Googlebot
Tuve que usar esto en PHP para que funcione con msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan
Habilitar en PHP mysqli.allow_local_infile = Onfue bueno para mí porque GLOBAL local_infile = 'ON';ya estaba activado.
Rolands.EU