mysqldump:get错误:1:“执行“选择到输出文件”时无法创建/写入文件“*.txt”(错误代码:13“权限被拒绝”)”

mysqldump:get错误:1:“执行“选择到输出文件”时无法创建/写入文件“*.txt”(错误代码:13“权限被拒绝”)”,mysql,linux,permissions,Mysql,Linux,Permissions,Linux。没有禁用SELinux。 我尝试以mysql组的linuxuser成员身份运行此命令: mysqldump-user=root-tab/some/folder dbname 获取此错误: mysqldump:获取错误:1:无法创建/写入文件'sometable.txt'错误代码:13执行'SELECT INTO OUTFILE'时权限被拒绝 如果我查看该文件夹,会发现有一个sometable.sql文件,但没有txt文件。 据我所知,在本例中,sql文件是根据运行命令linuxuse

Linux。没有禁用SELinux。 我尝试以mysql组的linuxuser成员身份运行此命令:

mysqldump-user=root-tab/some/folder dbname

获取此错误:

mysqldump:获取错误:1:无法创建/写入文件'sometable.txt'错误代码:13执行'SELECT INTO OUTFILE'时权限被拒绝

如果我查看该文件夹,会发现有一个sometable.sql文件,但没有txt文件。 据我所知,在本例中,sql文件是根据运行命令linuxuser的用户名创建的,但在本例中,txt文件是由mysql服务器mysql用户生成的。请注意,mysql用户也是mysql组的成员


有什么问题吗?尝试了一切:

解决方案是将一些/文件夹更改为外部位置。似乎存在权限问题,因为最初提到的文件夹位于Perforce root下,并且可能具有只读权限

然后,我将新文件夹权限更改为:

mylinuxuser:mysql

确保启动进程的用户以及mysql服务器都有在那里写入的权限。这是因为sql文件是用用户名编写的,txt文件是用mysql服务器的名称编写的


我还将我的用户添加到mysql组。

在Windows中对我有效的方法是,尝试使用以下方法导出文件:

SELECT  * INTO OUTFILE 'C:/documents/dumps' from file
MySQL服务属性->登录:注意已定义的帐户。 目录C:\documents\dumps->properties->Security:上面定义的帐户需要读/写权限
如果您试图在不同于服务器的客户端中执行mysqldump 这可能是个问题 我尝试使用mysqldump版本10.14发行版5.5.56-MariaDB,适用于Linux x86_64,并且仅适用于/tmp/dir。 也许,帮助信息说这行不通

  -T, --tab=name      Create tab-separated textfile for each table to given path. (Create .sql and .txt files.) NOTE: This only works if mysqldump is run on the same machine as the mysqld server.

这是我刚刚发现的东西,我想把它传给那些寻找同样答案的人们

这在运行systemd的系统上发生过。在/lib/systemd/system/mariadb.service文件中是设置“PrivateTmp=true”。这是一种安全措施,防止不应该看到数据的人看到数据

如果您运行:

SELECT * TO OUTFILE '/var/tmp/tablename.txt' FROM TABLENAME;
它将创建该文件,但会在systemd保护目录中创建该文件

/var/tmp/systemd private-[hash]-mariadb-[hash]/tmp/tablename.txt

您可以从这里保存完全可以接受的数据,也可以停止mariadb,创建目录/etc/systemd/system/mariadb.service.d,并在该目录中创建文件'mariadb.conf'作为示例;任何文件都应符合以下要求:

[Service]
PrivateTmp=false
运行systemctl守护程序reload以重新加载配置并重新启动mariadb


您现在应该可以创建备份。

这可能是一个简单的权限问题,如果mysql仍然无法写入数据文件,您可以通过chmod 777/some/folder确认。请检查父目录权限。是的,谢谢。我认为这是由于父文件夹权限。这是操作系统权限相关的附加信息。显然,mysqldump不喜欢写入/tmp或/var/tmp目录。如果您将备份切换到不同的目录,如/opt/mysqlbackup,它将在不更改mariadb配置的情况下工作。