Mengaktifkan LOAD DATA LOCAL INFILE di mysql

10

LOAD DATA LOCAL INFILEtidak diaktifkan secara default. Biasanya, itu harus diaktifkan dengan menempatkan local-infile=1di my.cnf. Tetapi itu tidak bekerja untuk semua instalasi. Dalam pengalaman saya, itu bekerja untuk Debian 7, tetapi tidak minimal Debian 7, meskipun kedua instalasi berasal dari paket deb yang sama dikompilasi. Keduanya di OpenVZ VPS.

Bagaimana cara debug mengapa local-infile=1tidak berfungsi untuk instalasi, dan bagaimana cara mengaktifkannya dengan aman LOAD DATA LOCAL INFILE?

Googlebot
sumber

Jawaban:

19

Jika MySQL Debian-7 minimal tidak dapat digunakan local_infile, lihat sekeliling semua file make yang digunakan untuk kompilasi untuk melihat apakah itu dinonaktifkan secara default atau jika local_infilediaktifkan untuk Debian-7.

Sebelum mengambil waktu semacam itu, silakan jalankan yang berikut:

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

Seharusnya menggema sebagai berikut:

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>

Jika masih mengatakan 'OFF', lihat ke dalam pengaturan kompiler untuk mengaktifkannya.

Jika diatur ke 'ON', Anda OK.

Harap dicatat saya tidak mengatakannya

SET GLOBAL local_infile = 1;

Saya katakan digunakan

SET GLOBAL local_infile = 'ON';

The pilihan local_infile adalah Boolean, tidak numerik .

Jika mengatur ini dalam my.cnf

[mysqld]
local_infile=ON

dan me-restart mysql juga tidak berfungsi, Anda harus memulai mysql dengan sesuatu seperti ini:

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

atau mungkin menambahkan ini ke my.cnf

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

kemudian restart mysql.

Cobalah !!!

RolandoMySQLDBA
sumber
Terima kasih atas instruksi praktis Anda untuk debugging, apa yang benar-benar saya butuhkan. Pada langkah pertama, terungkap, saya berada di jalur yang salah, seperti yang ditunjukkan local_infile | ON . Tampaknya masalahnya bukan mysql, tetapi PHPatau mungkin konektor / driver mysql-PHP (mysqli).
Googlebot
Saya harus menggunakan ini di php untuk membuatnya bekerja dengan msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan
Mengaktifkan dalam PHP mysqli.allow_local_infile = Onbaik untuk saya karena GLOBAL local_infile = 'ON';sudah aktif.
Rolands.EU