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组的成员。
可能的问题是什么?尝试了所有方法:)
发布于 2016-12-23 21:42:29
解决方案是将"some/folder"更改为外部位置。看起来有权限问题,因为最初提到的文件夹在Perforce根目录下,可能它有只读权限。
然后,我将新文件夹权限更改为:
mylinuxuser:mysql
确保启动该进程的用户和mysql服务器都具有在其中写入的权限。这是因为sql文件是从用户名写入的,而txt文件是从mysql服务器的名称写入的。
我还将我的用户添加到mysql组。
发布于 2019-01-12 03:08:03
如果你试图在客户机上执行mysqldump,我尝试过mysqldump ver10.14Distrib5.5.56-MariaDB for 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.发布于 2020-10-02 01:41:00
这是我刚刚发现的东西,我想把它传递给那些寻找同样答案的人们。
这已经在运行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 daemon-reload重新加载配置并重新启动mariadb。
您现在应该能够创建备份了。
https://stackoverflow.com/questions/41299489
复制相似问题