Kích hoạt LOAD DATA INFILE INFILE trong mysql


10

LOAD DATA LOCAL INFILEkhông được bật theo mặc định. Thông thường, nó nên được kích hoạt bằng cách đặt local-infile=1vào my.cnf. Nhưng nó không hoạt động cho tất cả các cài đặt. Theo kinh nghiệm của tôi, nó hoạt động cho Debian 7, nhưng không phải tối thiểu Debian 7, mặc dù cả hai cài đặt đều đến từ cùng một gói deb được biên dịch trước. Cả trên VPS OpenVZ.

Làm cách nào để gỡ lỗi tại sao local-infile=1không hoạt động để cài đặt và làm thế nào để kích hoạt an toàn LOAD DATA LOCAL INFILE?

Câu trả lời:


18

Nếu tối thiểu MySQL Debian-7 không thể sử dụng local_infile, hãy xem xung quanh tất cả các tệp tạo được sử dụng để biên dịch để xem liệu nó bị tắt theo mặc định hay nếu local_infileđược bật cho Debian-7.

Trước khi sử dụng loại thời gian đó, vui lòng chạy như sau:

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

Nó sẽ lặp lại như sau:

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>

Nếu nó vẫn nói 'OFF', thì hãy nhìn sâu vào bên trong các cài đặt trình biên dịch để kích hoạt nó.

Nếu nó được đặt thành 'ON', bạn ổn.

Xin lưu ý tôi không nói

SET GLOBAL local_infile = 1;

Tôi nói sử dụng

SET GLOBAL local_infile = 'ON';

Các tùy chọn local_infile là Boolean, không số .

Nếu đặt cái này trong my.cnf

[mysqld]
local_infile=ON

và khởi động lại mysql cũng không hoạt động, bạn sẽ phải khởi động mysql bằng một cái gì đó như thế này:

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

hoặc có lẽ thêm nó vào my.cnf

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

sau đó khởi động lại mysql.

Hãy thử một lần !!!


Cảm ơn hướng dẫn thực tế của bạn để gỡ lỗi, những gì tôi thực sự cần. Trong bước đầu tiên, nó tiết lộ, tôi đang đi sai hướng, như đã chỉ ra local_infile | ON . Có vẻ như vấn đề không phải là mysql, mà PHPcó lẽ là trình kết nối / trình điều khiển mysql-PHP (mysqli).
Googlebot

tôi đã phải sử dụng cái này trong php để làm cho nó hoạt động với msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan

Kích hoạt trong PHP mysqli.allow_local_infile = Onlà tốt cho tôi vì GLOBAL local_infile = 'ON';đã có sẵn.
Rolands.EU
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.