การเปิดใช้งาน LOAD DATA LOCAL INFILE ใน mysql


10

LOAD DATA LOCAL INFILEไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ปกติก็ควรเปิดใช้งานโดยการวางในlocal-infile=1 my.cnfแต่มันไม่ทำงานสำหรับการติดตั้งทั้งหมด จากประสบการณ์ของฉันมันใช้งานได้กับ Debian 7 แต่ไม่ใช่ Debian 7 ขั้นต่ำ แต่การติดตั้งทั้งสองนั้นมาจากแพ็คเกจ deb ที่คอมไพล์แล้ว ทั้งใน OpenVZ VPS

วิธีแก้ปัญหาทำไมlocal-infile=1ไม่ทำงานสำหรับการติดตั้งและวิธีการเปิดใช้งานอย่างปลอดภัยLOAD DATA LOCAL INFILE?

คำตอบ:


19

หากไม่สามารถใช้ MySQL Debian-7 น้อยที่สุดlocal_infileให้ดูไฟล์ make ทั้งหมดที่ใช้ในการรวบรวมเพื่อดูว่ามีการปิดใช้งานโดยค่าเริ่มต้นหรือหากlocal_infileเปิดใช้งาน Debian-7

ก่อนดำเนินการกับเวลาดังกล่าวโปรดเรียกใช้สิ่งต่อไปนี้:

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

มันควรจะดังต่อไปนี้:

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>

ถ้ามันยังพูดอยู่'OFF'ให้มองลึกเข้าไปในการตั้งค่าคอมไพเลอร์เพื่อเปิดใช้งาน

ถ้าตั้งเป็น'ON'คุณก็โอเค

โปรดทราบฉันไม่ได้พูด

SET GLOBAL local_infile = 1;

ฉันว่าการใช้

SET GLOBAL local_infile = 'ON';

local_infile ตัวเลือกแบบบูลไม่ใช่ตัวเลข

หากตั้งค่านี้ใน my.cnf

[mysqld]
local_infile=ON

และการรีสตาร์ท mysql ก็ไม่ทำงานเช่นกันคุณจะต้องเริ่ม mysql ด้วยสิ่งนี้:

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

หรืออาจเพิ่มลงใน my.cnf

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

จากนั้นเริ่ม mysql ใหม่

ให้มันลอง !!!


ขอบคุณสำหรับคำแนะนำการใช้งานจริงสำหรับการแก้ไขข้อบกพร่องสิ่งที่ฉันต้องการจริงๆ local_infile | ON ในขั้นตอนแรกก็เผยให้เห็นผมในการติดตามที่ไม่ถูกต้องตามที่แสดงให้เห็นว่า ดูเหมือนว่าปัญหาไม่ใช่ mysql แต่PHPหรืออาจจะเป็นตัวเชื่อมต่อ / ไดรเวอร์ mysql-PHP (mysqli)
Googlebot

ฉันต้องใช้สิ่งนี้ใน PHP เพื่อให้ทำงานกับ msqli: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan

การเปิดใช้งาน PHP mysqli.allow_local_infile = Onนั้นดีสำหรับฉันเพราะเปิดใช้GLOBAL local_infile = 'ON';แล้ว
Rolands.EU

0

สำหรับการติดตั้งเริ่มต้นของ MySQL 8.0.20 บน Windows:

  1. C:\ProgramData\MySQL\MySQL Server 8.0\my.iniมองหาไฟล์เริ่มต้นอยู่ที่
  2. เปิดmy.iniไฟล์ด้วยโปรแกรมแก้ไขข้อความ
  3. มองหาส่วนหัว[client], [mysql]ตามมาตราไคลเอ็นต์และ[mysqld]ตามมาตราของเซิร์ฟเวอร์
  4. เพิ่มคำสั่งต่อไปนี้ภายใต้แต่ละส่วนหัวเหล่านี้:

    local_infile=ON

  5. บันทึกไฟล์และเริ่มบริการ MySQL80 ใหม่อีกครั้งภายใต้บริการท้องถิ่นของ Windows

มันควรจะทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.