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组的成员。
可能是什么问题?尝试了一切:)
答案 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