MySQL:启用LOAD DATA LOCAL INFILE

Krt*_*lta 119 mysql

我在Ubuntu 12 LTS上运行Mysql 5.5.我应该如何在my.cnf中启用LOAD DATA LOCAL INFILE?

我已经尝试在我的配置中在各个地方添加local-infile但是我仍然得到"这个MySQL版本不允许使用的命令"

dAm*_*m2K 193

从MySQL 5.5手册页:

仅当您的服务器和客户端都已配置为允许时,LOCAL才有效.例如,如果mysqld以--local-infile = 0启动,则LOCAL不起作用.请参见第6.1.6节"LOAD DATA LOCAL的安全问题".

您应该设置选项:

local-infile=1
Run Code Online (Sandbox Code Playgroud)

进入my.cnf文件的[mysql]条目或使用--local-infile选项调用mysql客户端:

mysql --local-infile -uroot -pyourpwd yourdbname
Run Code Online (Sandbox Code Playgroud)

您必须确保在[mysqld]部分中定义了相同的参数,以启用"本地infile"功能服务器端.

这是一个安全限制.

  • 谢谢.顺便说一下,我的机器(AWS EC2)中的`my.cnf`路径是`/ etc/mysql/my.cnf`. (4认同)
  • 将mySQL更新到6.2.5为我解决了这个问题 (2认同)

小智 56

你应该修改my.cnf文件是/etc/mysql/my.cnf文件.只是:

sudo nano /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

然后加:

[mysqld]
local-infile 

[mysql]
local-infile 
Run Code Online (Sandbox Code Playgroud)

已经给出了头文件[mysqld][mysql],只需在文件中找到它们,并在每个文件下面添加local-infile.

它适用于Ubuntu 12.04 LTS上的MySQL 5.5.

  • 我也可以确认`Ubuntu 14.04.2 LTS不工作'. (4认同)

小智 29

用本机驱动程序替换驱动程序php5-mysql

关于debian

apt-get install php5-mysqlnd
Run Code Online (Sandbox Code Playgroud)


小智 16

我使用mysql终端命令在MySQL 8.0.11上解决了这个问题:

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

我的意思是我先用平时登录:

mysql -u user -p*
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用以下命令查看状态:

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

它应该是ON.我不会写关于在这里将本地文件加载到数据库中的安全性.

  • 只有这个答案在 Windows 上的 `8.0.12 MySQL Community Server` 上对我有用。 (3认同)
  • 不幸的是,重新启动服务器后该变量再次关闭。 (2认同)

ton*_*gil 13

如果你在ubuntu上的mysql的味道在任何情况下都没有工作,你仍然得到1148错误,你可以load data infile通过命令行运行命令

打开终端窗口

mysql -u YOURUSERNAME -p --local-infile YOURDBNAME

您将被要求插入mysqluser密码

你将运行MySQLMonitor,你的命令提示符将是 mysql>

运行你的load data infile命令(别忘了用分号结束; )

像这样:

load data local infile '/home/tony/Desktop/2013Mini.csv' into table Reading_Table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Run Code Online (Sandbox Code Playgroud)


Mad*_*ota 7

添加local_infilemysql部分mysqld

[mysql]
local_infile=1
...

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

在 Windows 和 Linux 中的 MySQL 8.x 中进行了测试。


brf*_*fox 6

此外,对于其他读者,如果您尝试在 Django 中执行此操作,并且您的服务器允许 local_infile(您可以通过 mysql 客户端键入 SHOW VARIABLES 进行检查),那么您可以将其添加到您的settings.py文件中(因为 python MySQLdb 没有) t 默认读取 .my.cnf 文件):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'myname',
        'PASSWORD': 'mypass',
        'HOST': 'myserver',
        'PORT': '3306',
        'OPTIONS' : {
            'local_infile':1,
        },
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

见下图...

我已经添加--local-infile=1到普通的mysql命令 mysql -u root -p

所以总行将是:

mysql --local-infile = 1 -u根-p

在此处输入图片说明


小智 6

我知道这并不完全是OP所要求的,但由于这个线程已经很老了,而且这里提出的解决方案都不适合我,所以我决定分享这个。

如果有人在 MySql 版本 8 中启用 local_infile 时遇到问题,这里的命令可以解决我的问题:

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

它将配置保存在“mysqld-auto.cnf”配置文件中,然后在服务或服务器重新启动后将记住更改。