Aktivieren von LOAD DATA LOCAL INFILE in MySQL

10

LOAD DATA LOCAL INFILEist standardmäßig nicht aktiviert. Normalerweise sollte es durch Platzieren aktiviert sein , local-infile=1in my.cnf. Es funktioniert jedoch nicht bei allen Installationen. Nach meiner Erfahrung hat es für Debian 7 funktioniert, aber nicht für Debian 7 minimal, obwohl beide Installationen aus demselben vorkompilierten Deb-Paket stammen. Beide auf OpenVZ VPS.

Wie kann ich debuggen, warum local-infile=1eine Installation nicht funktioniert, und wie kann ich sie sicher aktivieren LOAD DATA LOCAL INFILE?

Googlebot
quelle

Antworten:

18

Wenn das MySQL Debian-7-Minimal nicht verwendet werden kann local_infile, überprüfen Sie alle zum Kompilieren verwendeten make-Dateien, um festzustellen, ob es standardmäßig deaktiviert oder local_infilefür das Debian-7 aktiviert ist.

Bevor Sie sich diese Zeit nehmen, führen Sie bitte Folgendes aus:

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

Es sollte Folgendes wiedergeben:

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>

Wenn es immer noch angezeigt wird 'OFF', schauen Sie tief in die Compiler-Einstellungen, um es zu aktivieren.

Wenn es eingestellt ist, 'ON'sind Sie in Ordnung.

Bitte beachten Sie, dass ich nicht gesagt habe

SET GLOBAL local_infile = 1;

Ich sagte verwenden

SET GLOBAL local_infile = 'ON';

Die Option local_infile ist boolesch und nicht numerisch .

Wenn Sie dies einstellen my.cnf

[mysqld]
local_infile=ON

und ein Neustart von MySQL funktioniert auch nicht. Sie müssen MySQL mit so etwas starten:

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

oder vielleicht hinzufügen my.cnf

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

Starten Sie dann MySQL neu.

Versuche es !!!

RolandoMySQLDBA
quelle
Vielen Dank für Ihre praktische Anleitung zum Debuggen, was ich wirklich brauchte. Im ersten Schritt stellte sich heraus, dass ich, wie gezeigt, auf dem falschen Weg bin local_infile | ON . Es scheint, dass das Problem nicht MySQL ist, sondern PHPwahrscheinlich der MySQL-PHP-Connector / Treiber (MySQL).
Googlebot
Ich musste dies in PHP verwenden, damit es mit msqli funktioniert: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan
Das Aktivieren in PHP mysqli.allow_local_infile = Onwar gut für mich, da GLOBAL local_infile = 'ON';es bereits aktiviert war .
Rolands.EU