Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 错误1(HY000):无法创建/写入文件(错误代码:13-权限被拒绝)_Mysql_Ubuntu_Permission Denied_Ubuntu Server - Fatal编程技术网

Mysql 错误1(HY000):无法创建/写入文件(错误代码:13-权限被拒绝)

Mysql 错误1(HY000):无法创建/写入文件(错误代码:13-权限被拒绝),mysql,ubuntu,permission-denied,ubuntu-server,Mysql,Ubuntu,Permission Denied,Ubuntu Server,我已经为此苦苦挣扎了几天,一直在尝试使用其他谷歌搜索中的thread来解决这个问题,但似乎无法让它正常工作 当我运行这个选择查询Ubuntu服务器15.10和MySQL 5.6 SELECT column1 ,column2 FROM table INTO OUTFILE '/home/user/mysql_temp/file.csv'; 我得到这个权限错误 ERROR 1 (HY000): Can't create/write to file '/home/mysql_temp/file.

我已经为此苦苦挣扎了几天,一直在尝试使用其他谷歌搜索中的thread来解决这个问题,但似乎无法让它正常工作

当我运行这个选择查询Ubuntu服务器15.10和MySQL 5.6

SELECT column1 ,column2
FROM table 
INTO OUTFILE '/home/user/mysql_temp/file.csv';
我得到这个权限错误

ERROR 1 (HY000): Can't create/write to file '/home/mysql_temp/file.csv' (Errcode: 13 - Permission denied)
从我的搜索中,我理解这是一个系统权限问题,而不是MySQL问题,但我似乎找不到一个解决方案来解决它

检查apparmor显示mysqld处于强制模式

apparmor module is loaded.
6 profiles are loaded.
6 profiles are in enforce mode.
   /sbin/dhclient
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/sbin/mysqld
   /usr/sbin/tcpdump
0 profiles are in complain mode.
2 processes have profiles defined.
2 processes are in enforce mode.
   /sbin/dhclient (676) 
   /usr/sbin/mysqld (1285) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
所以我编辑了/etc/apparmor.d/usr.sbin.mysqld并添加了以下行,然后重新启动了apparmor

/home/user/mysql_temp/ rw,
/home/user/mysql_temp/* rw,
我还将owner:group of mysql_temp更改为mysql,并授予其完全权限

sudo chown mysql:mysql mysql_temp

在此之后,我仍然收到相同的错误


我错过什么了吗?误解了一些指示?如蒙指教,我将不胜感激。谢谢。

对我有用的是访问my.ini文件。在该文件中,查找安全文件Priv。应该有一个文件路径,即mySql授予输出指定文件权限的安全路径。我希望这有帮助!对我来说,该文件是基于C:/ProgramData/mysql/mysql Server 5.7的解决方案;带有Apparmor active和MySql 8的Ubuntu 20.10

解决方案总结和经验教训: 除非你有很好的理由不这么做

保留默认的安全文件priv设置, 在mysql中为用户授予文件权限, 并告诉apparmor允许写入mysql安装程序设置的默认目录。 默认配置将secure files priv设置为/var/lib/mysql文件。尽管如此,我还是能够通过将文件放在那个目录中导入文件,只要我给用户文件特权,比如授予*.ON*上的文件权限myuser@host;

然而,当我试图写入该目录时,我得到了可怕的错误代码:1。无法创建/写入文件“/var/lib/mysql files/select_out.csv”OS errno 13-权限被拒绝。通过编辑/etc/apparmor.d/usr.sbin.mysqld并更改

# Allow data files dir access
  /var/lib/mysql-files/ r,
  /var/lib/mysql-files/** rwk,
# Allow data files dir access
  /var/lib/mysql-files/ r,
  /var/lib/mysql-files/** rwk,

但当时我不知道apparmor的事,所以我摸索着搞砸了更多的东西,直到找到@spcurtis81的帖子。如果这就是发生在你身上的事情,继续读下去,也许你可以从我的旅程中学到一些东西

不幸的是,在某个时刻——天知道为什么——我决定将安全文件priv目录移动到/mysql文件。这为我创造了更多的工作。如果没有别的,它教会了我很多,给了我分享的机会

我不得不在一个.cnf文件中的[mysqld]部分下更改“secure files priv”设置,但是有太多了。我是这样发现的

cd /
find . -name "*.cnf" -printf '%p\n' -exec  grep "\[mysqld\]" {} \;
得到

./conf.d/mysqldump.cnf
./conf.d/mysql.cnf
./my.cnf
./debian.cnf
./mysql.conf.d/mysqld.cnf
[mysqld]
./mysql.conf.d/mysql.cnf
./mysql.cnf
所以[mysqld]上面的文件是我的。我找到了一些修改my.cnf的参考资料,但由于其中没有该部分,我选择了mysqld.cnf。我还认为mysqld.cnf是用于服务器守护进程的,而不是用于用户程序。它起作用了,所以它并不愚蠢,但也许一个更有知识的人可以解释.cnf文件的层次结构

此设置没有现有的secure files priv entry,因此我找到了它的合理位置,并添加了以下内容

# Added 12/13/2020 in an attempt to relocate the secure-file-priv directory
secure-file-priv = /mysql-files
没有快乐。我发现另一个引用说您必须指定一个临时目录,因此我从同一个文件中取消了这一行的注释

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
tmpdir    = /tmp
还是没有快乐。然后我在这里找到了@spcurtis81的帖子,了解了apparmor的设置。所以在/etc/apparmor.d/usr.sbin.mysqld中我改变了

还是没有快乐

解决问题的最后一步是:chmod-r700/mysql文件

创建目录后,我将所有者设置为mysql,并授予其644权限。这似乎是合理的,但在我的mysql错误日志中添加了一个错误:“所有操作系统用户都可以访问-secure file priv:Location的不安全配置。”。考虑选择不同的目录。

我不喜欢安全警告,所以我将权限改为600,从没想过mysql需要数据目录上的可执行权限。我错了。好了,给你

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
tmpdir    = /tmp
# Allow data files dir access
  /var/lib/mysql-files/ r,
  /var/lib/mysql-files/** rwk,
# Allow data files dir access
  /mysql-files/ rw,
  /mysql-files/** rwk,