开发者社区> 问答> 正文

如何通过SELECT INTO OUTFILE解决MySQL Errcode 13??mysql

我正在尝试使用MySQL SELECT INTO OUTFILE语句将表的内容转储到csv文件中。如果我做:

SELECT column1, column2 INTO OUTFILE 'outfile.csv' FIELDS TERMINATED BY ',' FROM table_name; outfile.csv将在服务器上与数据库文件存储在同一目录中创建。

但是,当我将查询更改为:

SELECT column1, column2 INTO OUTFILE '/data/outfile.csv' FIELDS TERMINATED BY ',' FROM table_name; 我得到:

ERROR 1 (HY000): Can't create/write to file '/data/outfile.csv' (Errcode: 13) Errcode 13是一个权限错误,但是即使我将/ data的所有权更改为mysql:mysql并赋予它777权限,我也得到了它。MySQL以用户“ mysql”的身份运行。

奇怪的是,我可以在/ tmp中创建该文件,只是不能在我尝试过的任何其他目录中创建该文件,即使设置了权限,以便用户mysql应该能够写入该目录。

这是在Ubuntu上运行的MySQL 5.0.75。

展开
收起
保持可爱mmm 2020-05-17 11:13:11 684 0
1 条回答
写回答
取消 提交回答
  • 这是哪个特定的Ubuntu版本,并且这是Ubuntu Server Edition?

    AppArmor随附了最新的Ubuntu Server Edition(例如10.04),默认情况下MySQL的配置文件可能处于强制模式。您可以这样执行检查sudo aa-status:

    sudo aa-status

    5 profiles are loaded. 5 profiles are in enforce mode. /usr/lib/connman/scripts/dhclient-script /sbin/dhclient3 /usr/sbin/tcpdump /usr/lib/NetworkManager/nm-dhcp-client.action /usr/sbin/mysqld 0 profiles are in complain mode. 1 processes have profiles defined. 1 processes are in enforce mode : /usr/sbin/mysqld (1089) 0 processes are in complain mode. 如果mysqld包含在强制模式下,则可能是拒绝写入的程序。/var/log/messages当AppArmor阻止写入/访问时,也将写入条目。您可以做的就是编辑/etc/apparmor.d/usr.sbin.mysqld并添加/data/并/data/*靠近底部,如下所示:

    ...
    /usr/sbin/mysqld {
    ...
    /var/log/mysql/ r,
    /var/log/mysql/* rw,
    /var/run/mysqld/mysqld.pid w,
    /var/run/mysqld/mysqld.sock w,
    /data/ r,
    /data/
    rw,
    *
    } 然后使AppArmor重新加载配置文件。

    sudo /etc/init.d/apparmor reload

    警告:以上更改将使MySQL可以读写/ data目录。我们希望您已经考虑了此问题的安全性。来源:stack overflow

    2020-05-17 11:15:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像