溯源:mysql导入导出文件报错ERROR 1290 (HY000):–secure-file-priv
编辑:狂族晨曦 来源:系统运维,经验杂笔 日期:2017-08-12 阅读: 4,106 次 1 条评论 » 百度已收录
近期遇到mysql导出文件的错误,之前遇到这个错误,因为需要导出的数据少,所以直接将结果手动复制。
mysql> select * from childrenzone_order into outfile '/tmp/test.txt' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
但后来遇到大量的数据需要导出,简单的复制就不能满足需求了。
进行百度,发现解决方法很简单,在配置文件里增加配置,重启Mysql即可。只是,生产环境中,数据库是不能随意重启的,所以这个问题就很麻烦了。为了避免往后出现这种问题,先森觉得有必要研究清楚这个问题究竟影响了多少Mysql。
解决方法
首先是解决此类问题的方法,通过secure_file_priv 来完成对导入|导出的限制。
secure_file_priv是在 /etc/my.cnf 中的[mysqld]下配置,共有三种限制方式。
1、限制mysqld 不允许导入 | 导出:
secure_file_priv = null
2、限制mysqld 的导入 | 导出 只能发生在指定目录下,如/tmp目录:
secure_file_priv = /tmp
3、不对mysqld 的导入 | 导出做限制,有两种书写方式:
secure_file_priv = / 或 secure_file_priv =
而查询secure_file_priv的方式如下:
mysql> show variables like '%secure%';
查询secure_file_priv变量配置
secure_file_priv变量配置的默认值为“NULL”,也就是默认不允许导入导出。
溯源
虽然知道了解决方法,但是前文也提到过,生产环境的Mysql并不能随意的重启,即使有主备。所以,弄明白受到默认禁止导入导出的Mysql版本有哪些就有必要了。
通过查询官方文档,先森找到了影响版本,见下图(点击放大)。
官方文档变量介绍
通过上图可以看到,最后一个被红框框选的文字:“Before MySQL 5.5.53, this variable is empty by default.(在MySQL 5.5.53,这个变量默认是空的。)”。这个变量在Mysql 5.5.53之后新增了“NULL”的配置,且默认为“NULL”。所以,如果发现自己的Mysql版本是5.5.53以后的,且不想限制导入导出的话,最好把变量的值配置好后择时重启Mysql。
另外,上图还介绍了,secure_file_priv这个变量是全局变量,且不能动态修改。这也是必须写入配置文件并重启Mysql的原因。
历史上的今天:
转载请注明出处来自https://www.capjsj.cn/mysql_secure_file_priv.html
这个厉害,保存备用