Mysql导出表内容时显示 --secure-file-priv option so it cannot execute this statement

Mysql导出文件时显示:

mysql> select * from users into outfile '/root/users.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

 

原因不太清楚,网上说可能是像 INTO 这些操作只允许有FILE权限的用户使用。总之就是权限问题,这里需要用到一个表,这个表存放着Mysql的系统参数,:

mysql> show variables like 'secure_file_priv';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)

 

这里我的secure_file_priv 字段是有值的,且固定在/var/lib/mysql-files/中,代表Mysql导出数据只能导到这个目录中,导在其他地方都是没有权限的:

mysql> select * from users into outfile '/var/lib/mysql-files/users.txt';
Query OK, 6 rows affected (0.00 sec)

 

这里的secure_file_priv字段是值是可以设置的(怎么改我也不知道,自己百度)

  • 如果为空,则该变量无效,可以无限制导出,这不是一个安全的设置
  • 如果设置为目录的名称,服务器会将导入和导出操作限制为仅处理该目录中的文件。目录必须存在;服务器不会创建它。
  • 如果设置为NULL,服务器将禁用导入和导出操作。

 

修改系统变量

mysql> set global secure_file_priv = ''; 
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable //直接修改显示read only,所以只能从配置文件下手

另开一个窗口,直接修改配置文件my.cnf。我这里省略了很多注释,这里修改时需要注意的是,不能直接在最后一行添加:secure_file_priv=‘’ ,这样是不对的,因为最后一行在[mysql]一栏。变量是需要加到[mysqld]下的

[root@VM-0-7-centos mysql-files]# vim /etc/my.cnf
……
[mysqld]
……

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
……
secure_file_priv = ''   //正确的添加位置在这里,[mysqld]的里面
[mysqld_safe] 
…… 
[mysql]
……

 

添加后重启mysql服务

[root@VM-0-7-centos mysql-files]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service

 重启后重新登陆Mysql,发现已经改好了:

mysql> show variables like 'secure_file_priv';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)

 

上一篇:centos 升级内核 开启 bbr


下一篇:Fence Repair(poj-3253)哈夫曼树⭐⭐