mysqldump:收到错误:1:"无法创建/写入文件' * .txt' (错误代码:13"权限被拒绝")"执行' SELECT INTO OUTFILE'

时间:2016-12-23 10:18:30

标签: mysql linux permissions

Linux操作系统。没有SELinux(已禁用)。 我尝试将此命令作为我的linuxuser(组mysql的成员)运行:

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

出现此错误:

mysqldump: Got error: 1: "Can't create/write to file 'sometable.txt' (Errcode: 13 "Permission denied")" when executing 'SELECT INTO OUTFILE'

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

可能是什么问题?尝试了一切:)

4 个答案:

答案 0 :(得分:1)

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

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

mylinuxuser:mysql

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

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

答案 1 :(得分:0)

如果您尝试在与服务器不同的客户端中执行mysqldump 可能是一个问题 我尝试使用适用于Linux(x86_64)的mysqldump Ver 10.14 Distrib 5.5.56-MariaDB,仅与/ 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.

答案 2 :(得分:0)

这是我刚刚发现的,想传递给寻找相同答案的人们。

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

如果您运行:

SELECT * TO OUTFILE '/var/tmp/tablename.txt' FROM TABLENAME;

它将创建文件,但会在受系统保护的目录中创建文件。

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

您可以从这里保存完全可接受的数据,也可以停止mariadb,创建目录/etc/systemd/system/mariadb.service.d,然后在该目录中创建文件“ mariadb.conf”(例如;任何文件都应执行以下操作:

[Service]
PrivateTmp=false

运行systemctl daemon-reload重新加载配置并重新启动mariadb。

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

答案 3 :(得分:-1)

尝试使用以下方法导出文件,对我有用(在Windows中)

SELECT  * INTO OUTFILE 'C:/documents/dumps' from file
  1. MySQL服务属性 - >登录:记录定义的帐户。
  2. 目录C:\ documents \ dumps - >属性 - >安全性:上面定义的帐户需要读/写权限