【问题标题】:Using mysql command line to generate CSV, can't generate it in any other directory except /tmp使用mysql命令行生成CSV,不能在除/tmp以外的任何其他目录生成
【发布时间】:2023-03-25 12:58:01
【问题描述】:

我正在通过 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 的原因..

【问题讨论】:

    标签: mysql csv permissions


    【解决方案1】:

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

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

    第二个命令是mysql内部的,所以mysql用户需要正确的权限。

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

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

    【讨论】:

    • 所以我需要把 mysql:mysql 给那个目录还是什么?
    • 这是我在 /etc 目录下 my.cnf 中看到的所有内容 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-建议使用链接以防止各种安全风险 symbolic-links=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 packet -p -t --fields-terminated-by=, --lines-terminated-by="\r\n"
    • 我刚刚测试了chown 解决方案并且有效。确保文件权限已更改为ls -lA。并检查 mysql 是 mysql 的正确用户(参见 my.cnf user = [your mysql user] 中的行)。 (请参阅我之前在答案中添加的 mysql 文档的链接)
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2014-12-20
    • 1970-01-01
    • 2022-01-07
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多