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";
执行结果如下:
可以看到,本地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