mysql init-file 配置选项给出文件未找到错误

mysql init-file 配置选项给出文件未找到错误

我想在 mysql 启动时运行 SQL 脚本,但是无法在 Ubuntu 11.10 中使其运行。

我添加了一个“初始化文件“mysql 配置文件的选项:

> sudo emacs -nw /etc/mysql/my.cnf
...
[mysqld]
init-file=/etc/mysql/mysqlinit.sql
...

但是当我重新启动 mysql 时,它会失败并显示“文件未找到“ 错误:

> tail /var/log/mysql/error.log
111111  7:41:06 [ERROR] /usr/sbin/mysqld: File '/etc/mysql/mysqlinit.sql' not found (Errcode: 13)
111111  7:41:06 [ERROR] Aborting

但该文件确实存在并且可以读取:

> ls -l /etc/mysql/mysqlinit.sql
-rwxr-xr-x 1 mysql mysql 30 2011-11-09 05:06 /etc/mysql/mysqlinit.sql

有什么办法可以解决这个问题吗?这是 Ubuntu 的奇怪现象还是我做了什么蠢事?


信息:

我正在运行 Ubuntu 11.10 和 MySQL 5.1。

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))

答案1

谢谢@quanta,问题确实是出在 apparmor 上。

解决此问题的方法:

编辑 mysql apparmor 文件:

sudo emacs -nw /etc/apparmor.d/usr.sbin.mysqld

包含初始化文件所在的文件夹,扩展名为 *.sql:

...
/usr/sbin/mysqld {
    /var/log/mysql.log rw,
    /var/log/mysql.err rw,
    ;/var/lib/mysql/ r,
    /var/lib/mysql/** rwk,
    /var/log/mysql/ r,
    /var/log/mysql/* rw,
    /{,var/}run/mysqld/mysqld.pid w,
    /{,var/}run/mysqld/mysqld.sock w,

    /sys/devices/system/cpu/ r,

    # I added to allow my init-file script to run
    /etc/mysql/*.sql r,
}

然后让 AppArmor 重新加载配置文件。

# sudo /etc/init.d/apparmor reload

然后重新加载mysql:

sudo /etc/init.d/mysql restart

现在 init 文件已执行。耶!

相关内容