Mysql 导入导出数据时报错 --secure-file-priv option 问题

1,057 阅读2分钟

MYSQL导入CSV格式文件数据执行提示错误(ERROR 1290):

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement.

一、分析原因

其实原因很简单,因为在安装MySQL的时候限制了导入与导出的目录权限。只允许在规定的目录下才能导入。

可以通过以下命令查看secure-file-priv当前的值是什么

SHOW VARIABLES LIKE "secure_file_priv";

执行结果如下:

ssssss1.png

可以看到,本地value的值为NULL。NULL代表什么意思呢?经查资料:

(1)NULL,表示禁止。

(2)如果value值有文件夹目录,则表示只允许该目录下文件(PS:测试子目录也不行)。

(3)如果为空,则表示不限制目录。

二、解决方案

把secure-file-priv的value值修改为准备导入文件的放置路径

首先先看看你的mysql在哪,通过which命令

which mysql

显示出目录,例如:

/usr/bin/mysql

接下来就可以针对这个目录通过一些命令查看配置文件在哪了,如下.

# 查看 mysql 配置文件加载顺序
/usr/bin/mysql --verbose --help | grep -A 1 'Default options'

结果如下:

root@10433da45406:/# /usr/bin/mysql --verbose --help | grep -A 1 'Default options'
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

这个信息的意思是:

服务器首先读取的是 /etc/my.cnf 文件,如果前一个文件不存在则继续读 /etc/mysql/my.cnf 文件,依此类推,如若还不存在便会去读~/.my.cnf文件。

如果以上文件都不存在,则说明在对mysql编译完成之后你没有对mysql进行配置,需要你自己复制一份mysql提供的默认配置文件到上面提到的目录中,然后改名为my.cnf,修改文件的所有者和所属组并赋予执行权限。

mkdir /usr/local/mysql/etc

cp /usr/local/mysql/support-files/my-default.cnf /usr/local/mysql/etc/my.cnf

chown -R mysql:mysql /usr/local/mysql/etc/

chmod 755 /usr/local/mysql/etc/my.cnf

如果修改my.cnf后mysql启动不了,可以通过如下方式查看错误信息

/usr/bin/mysqld --verbose --help | grep -A 1 'Default options'

去掉导入的目录限制。可修改mysql配置文件(Windows下为my.ini, Linux下的my.cnf),在[mysqld]下面,查看是否有:

secure_file_priv =

如上这样一行内容,如果没有,则手动添加。如果存在如下行:

secure_file_priv = /home 

这样一行内容,表示限制为/home文件夹。而如下行:

secure_file_priv =

这样一行内容,表示不限制目录,等号一定要有,否则mysql无法启动。

修改完配置文件后,重启mysql生效。

重启后:

关闭:service mysqld stop

启动:service mysqld start