在mysql中启用LOAD DATA LOCAL INFILE


10

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

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

Answers:


19

如果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。

试试看 !!!


感谢您提供调试的实用指导,这是我真正需要的。如图所示,它第一步显示出我走错了路local_infile | ON 。看来问题出在mysql,而不是mysql PHP-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

对于Windows上的MySQL 8.0.20的默认安装:

  1. 查找位于的初始化文件C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
  2. my.ini使用文本编辑器打开文件。
  3. 找头[client][mysql]下客户端单元与[mysqld]下的服务器部分。
  4. 在每个标题下添加以下语句:

    local_infile=ON

  5. 保存文件,然后在Windows本地服务下重新启动MySQL80服务。

它应该工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.