在 mysql 中启用 LOAD DATA LOCAL INFILE

Goo*_*bot 10 mysql linux my.cnf configuration mysql-5.5

LOAD DATA LOCAL INFILE默认情况下不启用。通常,它应该通过放置local-infile=1my.cnf. 但它不适用于所有安装。根据我的经验,它适用于 Debian 7,但不适用于 Debian 7 minimum,尽管这两个安装都来自同一个预编译的 deb 包。两者都在 OpenVZ VPS 上。

如何调试为什么local-infile=1对安装不起作用,以及如何安全激活LOAD DATA LOCAL INFILE

Rol*_*DBA 25

如果 MySQL Debian-7 minimum 无法使用local_infile,请查看用于编译的所有 make 文件,看看它是否默认禁用或是否local_infile为 Debian-7 启用。

在花这种时间之前,请运行以下命令:

SHOW GLOBAL VARIABLES LIKE 'local_infile';
SET GLOBAL local_infile = 'ON';
SHOW GLOBAL VARIABLES LIKE 'local_infile';
Run Code Online (Sandbox Code Playgroud)

它应该回应以下内容:

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>
Run Code Online (Sandbox Code Playgroud)

如果它仍然显示'OFF',则深入查看编译器设置以启用它。

如果它设置为'ON',你就可以了。

请注意我没有说

SET GLOBAL local_infile = 1;
Run Code Online (Sandbox Code Playgroud)

我说用

SET GLOBAL local_infile = 'ON';
Run Code Online (Sandbox Code Playgroud)

选项local_infile是布尔型,而不是数字

如果设置这个 my.cnf

[mysqld]
local_infile=ON
Run Code Online (Sandbox Code Playgroud)

并且重新启动 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
Run Code Online (Sandbox Code Playgroud)

或者也许将其添加到 my.cnf

[mysqld]
init-file=/var/lib/mysql/init_file.sql
Run Code Online (Sandbox Code Playgroud)

然后重启mysql。

试一试 !!!