mysql亚马逊ec2“;Can';t创建测试文件";错误

mysql亚马逊ec2“;Can';t创建测试文件";错误,mysql,amazon-ec2,Mysql,Amazon Ec2,我在EC2上运行,希望在另一个EBS上使用MYSQL的datadir。我在/data上安装了EBS(ext3),并将my.cnf中的datadir更改为指向该dir。但是,当我尝试启动mysql时,我遇到以下错误: 120518 03:53:17 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 120518 03:53:28 mysqld_safe Starting mysqld daemon with data

我在EC2上运行,希望在另一个EBS上使用MYSQL的datadir。我在/data上安装了EBS(ext3),并将my.cnf中的datadir更改为指向该dir。但是,当我尝试启动mysql时,我遇到以下错误:

120518 03:53:17 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120518 03:53:28 mysqld_safe Starting mysqld daemon with databases from /data/mysql/
120518  3:53:28 [Warning] Can't create test file /data/mysql/ip-10-136-23-225.lower-test
120518  3:53:28 [Warning] Can't create test file /data/mysql/ip-10-136-23-225.lower-test
/usr/libexec/mysqld: Can't change dir to '/data/mysql/' (Errcode: 13)
120518  3:53:28 [ERROR] Aborting

120518  3:53:28 [Note] /usr/libexec/mysqld: Shutdown complete

120518 03:53:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

有什么想法吗?

将/data目录的所有者更改为mysqld进程所有者(chown owner/data)。或者(chmod 777-R/data)非常不安全。

如果您运行的是像Ubuntu这样的发行版,那么AppArmor可能会阻止mysqld访问其他目录中的文件。如果你检查你的系统日志文件,你会发现一个神秘的错误消息

解决方案包括:

  • 禁用AppArmor(不推荐)

  • 编辑AppArmor规则(复杂)

  • 使用“mount bind”使MySQL认为您的数据文件位于原始位置,而实际上它们位于EBS卷上。将更改还原到datadir

  • 几年前,我为Amazon写了一篇文章,描述了社区最佳实践,其中包括用于mount bind示例的命令:

    使用EBS在Amazon EC2上运行MySQL


    请注意,本文中的AMI id是旧的。使用现代Ubuntu AMI,您需要在mkfs.xfs和/etc/fstab(但不在ec2工具命令行中)中将/dev/sdh替换为/dev/xvdh。

    如果您正在运行Ubuntu,则可能会由于apparmor服务而遇到此错误。为了避开这件事。要绕过它,您需要执行以下操作:

    1) 编辑“/etc/apparmor.d/usr.sbin.mysqld”并添加以下行:

    /opt/lib/mysql/ r,
    
    /opt/lib/mysql/** rwk,
    
    ( assuming your new data directory is in /opt/lib/mysql )
    
    2) 重新启动apparmor服务:

    sudo service apparmor restart