MySQL导出文件遇到secure-file-priv报错

前两天在电脑上安装了MySQL 8.0.18,在尝试从数据库导出csv文件时,遇到了以下报错:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

secure-file-priv资料查询

上网一搜发现报错原因和secure-file-priv的值有关,secure-file-priv参数是用来限制mysql导入导出到哪个目录的

查阅官方文档找到secure-file-priv的值有以下几种情况:

[外链图片转存中…(img-TKY9txDb-1572537802321)]

而使用命令 show variables like "%secu%";检查secure-file-priv的值,发现本地secure_file_priv的值设置的是NULL,那么就需要将secure_file_priv的值设置为空字符串或者dirname才能导出文件。

[外链图片转存中…(img-A9za5MJP-1572537802323)]

解决办法

那么接着问题来了,在哪里设置secure-file-priv的值呢?

不能直接设置,必须要在my.cnf文件里设置(mac在my.cnf)。

那么my.cnf文件在哪里呢?

在下面3个关键目录中使用find命令全部搜了一遍也没有找到my.cnf文件,没有办法只有在网上重新找了一个my.cnf文件。

/etc
/usr/local/mysql/support-files
/usr/local/mysql-8.0.18-macos10.14-x86_64/support-files

在找到my.cnf后,进入/etc目录下,使用sudo vim my.cnf命令新建my.cnf文件,并将以下内容添加到my.cnf文件中。

# Example MySQL config file for medium systems.  #  # This is for a system with little memory (32M - 64M) where MySQL plays  # an important part, or systems up to 128M where MySQL is used together with  # other programs (such as a web server)  #  # MySQL programs look for option files in a set of  # locations which depend on the deployment platform.  # You can copy this option file to one of those  # locations. For information about these locations, see:  # http://dev.mysql.com/doc/mysql/en/option-files.html  #  # In this file, you can use all long options that a program supports.  # If you want to know which options a program supports, run the program  # with the "--help" option.  # The following options will be passed to all MySQL clients  [client]default-character-set=utf8password   = your_passwordport        = 3306  socket      = /tmp/mysql.sock   # Here follows entries for some specific programs  # The MySQL server  [mysqld]character-set-server=utf8init_connect='SET NAMES utf8port        = 3306  socket      = /tmp/mysql.sock  skip-external-locking  key_buffer_size = 16M  max_allowed_packet = 1M  table_open_cache = 64  sort_buffer_size = 512K  net_buffer_length = 8K  read_buffer_size = 256K  read_rnd_buffer_size = 512K  myisam_sort_buffer_size = 8M  character-set-server=utf8  init_connect='SET NAMES utf8' secure_file_priv=''
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking  # Replication Master Server (default)  # binary logging is required for replication  log-bin=mysql-bin  # binary logging format - mixed recommended  binlog_format=mixed  # required unique id between 1 and 2^32 - 1  # defaults to 1 if master-host is not set  # but will not function as a master if omitted  server-id   = 1  # Replication Slave (comment out master section to use this)  #  # To configure this host as a replication slave, you can choose between  # two methods :  #  # 1) Use the CHANGE MASTER TO command (fully described in our manual) -  #    the syntax is:  #  #    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,  #    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;  #  #    where you replace <host>, <user>, <password> by quoted strings and  #    <port> by the master's port number (3306 by default).  #  #    Example:  #  #    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,  #    MASTER_USER='joe', MASTER_PASSWORD='secret';  #  # OR  #  # 2) Set the variables below. However, in case you choose this method, then  #    start replication for the first time (even unsuccessfully, for example  #    if you mistyped the password in master-password and the slave fails to  #    connect), the slave will create a master.info file, and any later  #    change in this file to the variables' values below will be ignored and  #    overridden by the content of the master.info file, unless you shutdown  #    the slave server, delete master.info and restart the slaver server.  #    For that reason, you may want to leave the lines below untouched  #    (commented) and instead use CHANGE MASTER TO (see above)  #  # required unique id between 2 and 2^32 - 1  # (and different from the master)  # defaults to 2 if master-host is set  # but will not function as a slave if omitted  #server-id       = 2  #  # The replication master for this slave - required  #master-host     =   <hostname>  #  # The username the slave will use for authentication when connecting  # to the master - required  #master-user     =   <username>  #  # The password the slave will authenticate with when connecting to  # the master - required  #master-password =   <password>  #  # The port the master is listening on.  # optional - defaults to 3306  #master-port     =  <port>  #  # binary logging - not required for slaves, but recommended  #log-bin=mysql-bin  # Uncomment the following if you are using InnoDB tables  #innodb_data_home_dir = /usr/local/mysql/data  #innodb_data_file_path = ibdata1:10M:autoextend  #innodb_log_group_home_dir = /usr/local/mysql/data  # You can set .._buffer_pool_size up to 50 - 80 %  # of RAM but beware of setting memory usage too high  #innodb_buffer_pool_size = 16M  #innodb_additional_mem_pool_size = 2M  # Set .._log_file_size to 25 % of buffer pool size  #innodb_log_file_size = 5M  #innodb_log_buffer_size = 8M  #innodb_flush_log_at_trx_commit = 1  #innodb_lock_wait_timeout = 50  [mysqldump]  quick  max_allowed_packet = 16M  [mysql]  no-auto-rehash  # Remove the next comment character if you are not familiar with SQL  #safe-updates  default-character-set=utf8   [myisamchk]  key_buffer_size = 20M  sort_buffer_size = 20M  read_buffer = 2M  write_buffer = 2M  [mysqlhotcopy]  interactive-timeout

注意!!!

一定要把上面文本中的password = your_password修改成自己的MySQL数据库的密码,我就是忘记改了,搞了3天,不管怎么修改secure_file_priv=’’,在重启数据库都没有用,终于在第3天重新梳理了一遍流程,仔细研究了my.cnf文件后,发现了问题所在。

修改好后,在系统偏好设置的MySQL中配置Configuration File文件,重新Apply然后再重启MySQL服务就可以了。

[外链图片转存中…(img-Wi0Gai5F-1572537802323)]

见证奇迹的时刻

一切准备就绪,让我们重新再来导出一次user表

mysql> select * from user into outfile '/tmp/user.csv';
Query OK, 4 rows affected (0.00 sec)

大功告成!

###补充

虽然secure_file_priv设置为空字符串,也就是说可以任意导入导出到任何文件目录下,但是我也试了桌面和etc文件夹,都导出失败了,上网查询原因可能与文件访问权限、文件分组有关,这里就不再详细讨论了,/tmp目录是可以导入导出的,大家可以在这个目录下导出csv文件。

mysql> select * from user into outfile '~/Desktop/user/user.csv';
ERROR 1 (HY000): Can't create/write to file '/var/empty/Desktop/user/user.csv' (OS errno 2 - No such file or directory)
mysql> select * from user into outfile '/etc/user.csv';
ERROR 1 (HY000): Can't create/write to file '/etc/user.csv' (OS errno 13 - Permission denied)

参考文章:

  • MySQL官方开发者文档对secure_file_priv变量的描述
  • mac os上mysql secure-file-priv导入文件权限解决方案

如果对你有帮助的话,点赞、评论、赞赏都是对我的鼓励,也是支持我写下去的动力,谢谢!

MySQL导出CSV文件报错secure-file-priv权限受限mac相关推荐

  1. mysql导出txt文件报错_mysql导入txt文件

    1.首先在命令行启动mysql net start mysql 2.登录MySQL(建议使用非root用户) mysql --local-infile=1 -u one -p 3.创建数据库 如 CR ...

  2. mysql csv 表头_Mysql实例mysql 导出CSV文件 并带表头的方法

    <Mysql实例mysql 导出CSV文件 并带表头的方法>要点: 本文介绍了Mysql实例mysql 导出CSV文件 并带表头的方法,希望对您有用.如果有疑问,可以联系我们. 参考官方文 ...

  3. ffmpeg合并文件报错Unsafe file name Operation not permitted

    ffmpeg合并文件报错 Unsafe file name '/data/hk_sdk/demo/aaa.mp4' /data/hk_sdk/demo/test.txt: Operation not ...

  4. Windows用scp服务器下载文件报错No file or directionary

    问题描述 在Windows从命令行scp从linux服务器下载文件报错No file or directionary,查找相关的技术文档无果.其他问答里出现的错误基本为终端登录服务器后的下载文件报错, ...

  5. CAJ文件报错提示“file does not exist”之类如何解决

    我在使用7.2版本的CAJ阅读器查看CAJ文件的时候,无论打开什么文件,都会报错"the file does not exist"之类的提示:然而在无意间的搜索中,我想起(至少在该 ...

  6. php mysql导出csv文件_详解PHP导入导出CSV文件

    我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名.性别.年龄等信息. CREATE TABLE `student` ( ...

  7. 解决datafountain比赛提交.csv文件报错问题

    提交了predict.csv文件之后发现报错如下:decode error,it isn;tInteger 1 问题出在了某些csv列数据包含多余的\n文件 可以用如下代码: import csv f ...

  8. Eclipse导出APK文件报错 android lint problem

    今天准备用Eclipse导出APK文件上传各大安卓应用商店,结果发现血红一片. 继续导出,报错如下: 百度了一下,发现是android lint problem错误 Lint经常会扫描出一些必需要修复 ...

  9. python处理csv文件报错:UnicodeDecodeError

    python处理csv文件的默认解码方式为'gbk'(这可能是因为,中文ansi编码是gbk),但是我们在创建csv文件时,经常会选择utf-8编码,这样的文件在解码时就会报错. 如以下文件 #1.c ...

最新文章

  1. QIIME 2用户文档. 14机器学习预测样品元数据分类和回归q2-sample-classifier(2018.11)
  2. 战争游戏[tarjan]
  3. 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)
  4. Detection and Classification of Acoustic Scenes and Events(DCASE2013详细介绍)
  5. 深度学习-CNN tensorflow 可视化
  6. php微信公众平台开发获取access_token,用CURL出现certificate verify failed错误的解决方法...
  7. Hyper-v中安装centos网卡故障
  8. python迭代器生成器
  9. 最新网卡驱动下载win7
  10. Word中,Mathtype安装遇到的问题及解决方法
  11. Xpath--使用Xpath爬取糗事百科成人版图片
  12. dea分析的matlab实现,利用MATLAB进行DEA交叉评价分析
  13. 起名源码PHP(宝宝取名源码)
  14. 使用冷门装机助手/流氓软件导致被捆绑安装各种奇奇怪怪软件的问题
  15. 数据抽取的常见理论方法
  16. cad绘制正八边形_软件CAD | 各种“线”工具
  17. 天池竞赛:Docker 基本操作
  18. HC-SR501人体红外感应模块程序
  19. 处方常用拉丁词缩写与中文对照表
  20. linux的normal模式,解决grub rescue问题时发现grub/目录下没有文件normal.mod怎么办?...

热门文章

  1. bzoj 3998 第K小子串
  2. Android Studio 4报错-The application could not be installed: INSTALL_FAILED_OLDER_SDK
  3. Qt构建、运行、qmake的区别
  4. 渗透实战-抓取微信小程序流量包
  5. 软件小白-入门软件测试管理工具”禅道“
  6. favicon.ico使用方式
  7. Java 求解二叉树的深度
  8. wen7系统下用vc6.0读取摄像头
  9. 普通人更容易赚钱的三大互联网项目,你一定没注意
  10. websocketapp保活,来自阿里巴巴佛系Android程序员的指南,写给正在求职的Android开发