Mysql'de LOAD DATA LOCAL INFILE'ı etkinleştirme


10

LOAD DATA LOCAL INFILEvarsayılan olarak etkin değildir. Normalde, yerleştirerek etkinleştirilmelidir local-infile=1içinde my.cnf. Ancak tüm kurulumlar için çalışmaz. Deneyimlerime göre, Debian 7 için çalıştı, ancak Debian 7 minimal değil, her iki kurulum da aynı önceden derlenmiş deb paketinden geliyor. Her ikisi de OpenVZ VPS'de.

local-infile=1Bir kurulum için neden çalışmaz ve nasıl güvenli bir şekilde etkinleştirilir LOAD DATA LOCAL INFILE?

Yanıtlar:


19

MySQL Debian-7 minimal kullanamıyorsa local_infile, varsayılan olarak devre dışı mı yoksa local_infileDebian-7 için etkin mi olduğunu görmek için derleme için kullanılan tüm make dosyalarına bakın .

Bu tür bir zaman ayırmadan önce lütfen aşağıdakileri çalıştırın:

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

Aşağıdaki yankılanmalıdır:

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>

Hala söylüyorsa 'OFF', etkinleştirmek için derleyici ayarlarının derinliklerine bakın.

Eğer olarak ayarlanırsa 'ON', sorun olmaz.

Lütfen söylemediğimi not et

SET GLOBAL local_infile = 1;

Kullan dedim

SET GLOBAL local_infile = 'ON';

Opsiyon local_infile Boole, sayısal değildir .

Eğer bunu my.cnf

[mysqld]
local_infile=ON

ve mysql'i yeniden başlatmak da çalışmaz, mysql'i böyle bir şeyle başlatmanız gerekir:

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

veya belki de my.cnf

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

sonra mysql'yi yeniden başlatın.

Bir şans ver !!!


Gerçekten ihtiyacım olan hata ayıklama için pratik talimatınız için teşekkürler. İlk adımda, gösterdiğim gibi yanlış yolda olduğumu ortaya koydu local_infile | ON . Sorun mysql değil, PHPya da muhtemelen mysql-PHP bağlayıcı / sürücü (mysqli) gibi görünüyor.
Googlebot

Ben msqli ile çalışmak için php kullanmak zorunda kaldı: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan

PHP'de etkinleştirme mysqli.allow_local_infile = Onbenim için iyiydi çünkü GLOBAL local_infile = 'ON';zaten açıktı.
Rolands.EU

0

MySQL 8.0.20'nin Windows'a varsayılan kurulumu için:

  1. Konumunda bulunan başlatma dosyasını arayın C:\ProgramData\MySQL\MySQL Server 8.0\my.ini.
  2. Açık my.inibir metin editörü ile dosya.
  3. Başlıklarını arayın [client], [mysql]MÜŞTERİ bölümünde & [mysqld]SUNUCU bölümünde.
  4. Bu başlıkların her birine aşağıdaki ifadeyi ekleyin:

    local_infile=ON

  5. Dosyayı kaydedin ve Windows yerel hizmetleri altında MySQL80 hizmetini yeniden başlatın.

İşe yaramalı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.