当前位置: 首页 > 面试题库 >

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

尉迟景福
2023-03-14
问题内容

我正在尝试使用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。


问题答案:

这是哪个特定的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目录。我们希望您已经考虑了此问题的安全性。



 类似资料:
  • 据我所知,要建立事件流,必须在客户端上创建一个事件源对象,并将其传递给服务器以注册自己。服务器在收到此请求后,适当地设置响应标头并按照事件流格式发送数据。我设置了这个流,它可以通过超文本传输协议工作,但在向服务器添加SSL后,事件流正在创建,服务器会抛出501-未实现错误。经过一些研究,我认为这可能是CORS问题,并添加了适当的标头,但这也没什么不同。我还尝试了通常适用于501个错误的小修复,例如

  • 我们正在使用JPA从数据库加载一些内容。一些实体之间可能具有可选的关系,例如。 当数据库中存在此关联时,一切工作正常。如果不是,我将得到 我想要的是,如果关联不存在,则该字段为空,而不是例外。 非常感谢您的帮助!

  • 我有一个足够简单的程序: 现在我明白了 错误不会改变,所以我添加了每个https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime/2.3.2的所有编译依赖项: FastInfo-1.2.16。罐子 istack-commons-runtime-3.0.8。罐子 stax-ex-1.8.1。罐子 txw2-2.3.2。罐子

  • 本文向大家介绍Java如何通过线程解决生产者/消费者问题,包括了Java如何通过线程解决生产者/消费者问题的使用技巧和注意事项,需要的朋友参考一下 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示 生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生

  • 问题内容: 我正在尝试编写简单的Java代码,以在控制台上显示MongoDB集合。我在类路径中添加了mongodb-driver-3.0.0.jar。 但是,当我尝试执行代码时,它在数据库连接行给了我以下错误: 线程“主”中的异常java.lang.NoClassDefFoundError:com.montan.app.MongoDbJdbc.main(MongoDbJdbc.java:12)上的

  • 问题内容: 我试图通过我的Web项目上的applet访问客户端的临时目录。 当我自己运行小程序时,它毫无问题地得到了。 当我尝试使用javascript并调用applet方法在我的项目上获取它时,我在javascript控制台上运行。当我尝试读取temp目录下的文件时,我也遇到同样的异常。 这正是我所看到的: 怎么解决? 问题答案: 最简单的解决方案是对applet进行签名。