使用mysql命令行生成CSV,can';t在除/tmp之外的任何其他目录中生成它

使用mysql命令行生成CSV,can';t在除/tmp之外的任何其他目录中生成它,mysql,csv,permissions,Mysql,Csv,Permissions,我通过mysql命令行创建csv和mysql转储。 为了创建mysql文件,我可以在所需目录中轻松创建.sql转储 mysqldump -u"root" -p"root" dns packet --where="server_id=1 > /var/www/mydatafile/SQLData.sql 这一切正常,但在CSV的情况下,它只创建TMP文件夹中的文件,它不能在任何其他位置创建文件 mysql -u"root" -p"" dns -e "SELECT * INTO O

我通过mysql命令行创建csv和mysql转储。 为了创建mysql文件,我可以在所需目录中轻松创建.sql转储

 mysqldump  -u"root" -p"root"  dns packet --where="server_id=1 > /var/www/mydatafile/SQLData.sql
这一切正常,但在CSV的情况下,它只创建TMP文件夹中的文件,它不能在任何其他位置创建文件

 mysql -u"root" -p""  dns -e "SELECT * INTO OUTFILE '/var/www/mydatafile/my_csv.csv'  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' FROM TABLENAME";
上面说

ERROR 1 (HY000) at line 1: Can't create/write to file '/var/www/mydatafile/my_csv.csv' (Errcode: 13)

我已经授予了www目录的权限,但它仍然给出了相同的错误…我可以知道为什么不将CSV创建到任何其他位置,而SQL可以轻松生成。

您的目录
/var/www/mydatafile/
必须由mysql用户写入(通常
mysql
)。您可以在文件
my.cnf
中检查哪个用户(基于debian/ubuntu,位于
/etc/mysql/

第一个命令之所以有效,是因为您要生成sql指令到标准输出,并将输出重定向到文件,以便使用当前用户环境

第二个命令是mysql的内部命令,因此mysql用户需要正确的权限

编辑:您也可以使用以下命令生成csv:

mysqldump -u"root" -p"root"  dns packet -p -t --fields-terminated-by=, --lines-terminated-by="\r\n"

那么,我需要将mysql:mysql分配给那个目录吗?这是我在/etc目录datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql中看到的全部内容。建议禁用符号链接以防止各种安全风险符号链接=0[mysqld_safe]log error=/var/log/mysqld.log pid file=/var/run/mysqld/mysqld.pid您可以将mysql:mysql设置到该目录,或者添加组写入权限+将匹配的组添加到mysql现有组(
usermod-G-a thegroup mysql
),或者允许所有人在其上写入(如果它是服务器,我不建议这样做)。这取决于你选择什么适合你的需要(+我编辑了一个替代解决方案的答案:))使用chown mysql:mysql更改了用户。。仍然给出相同的错误。。替代解决方案不起作用..它显示mysqldump-u“root”-p“root”dns数据包-p-t--字段以=,--行以=“\r\n”结尾。我刚刚测试了
chown
解决方案,效果良好。确保已使用
ls-lA
更改文件perms。并检查
mysql
是否是mysql的正确用户(请参见my.cnf
user=[您的mysql用户]
)。(请参阅我之前在回答中添加的mysql文档链接)