一尘不染

在 mysql 中启用 LOAD DATA LOCAL INFILE

mysql

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

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


阅读 66

收藏
2022-10-17

共2个答案

一尘不染

如果 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';

它应该回显以下内容:

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。

2022-10-17
一尘不染

在 Windows 上默认安装 MySQL 8.0.20:

查找位于 的初始化文件C:\ProgramData\MySQL\MySQL Server 8.0\my.ini。
my.ini使用文本编辑器打开文件。
在 CLIENT 部分和SERVER 部分[client]下查找 headers 。[mysql][mysqld]
在每个标题下添加以下语句:

local_infile=ON

保存文件并在Windows本地服务下重启MySQL80服务。

2022-10-17