mysql init-file config选项给文件找不到错误


11

我想在每当mysql启动时运行一个SQL脚本,但是我无法在Ubuntu 11.10中运行它。

我在mysql配置文件中添加了“ init-file ”选项:

> 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))

输出是file /etc/mysql/mysqlinit.sql什么?
量子

file /etc/mysql/mysqlinit.sql给出“ /etc/mysql/mysqlinit.sql:ASCII文本,没有行终止符”
Tom

要缩小问题的范围,只需尝试将其移至/tmp文件夹以查看会发生什么。您正在运行AppArmor吗?
量子

我尝试使用init文件,/tmp但是没有运气。是的,我认为Ubuntu使用AppArmor。
汤姆

1
如果是这样,请尝试停止AppArmor并查看错误是否消失。
量子

Answers:


14

谢谢@quanta,这个问题的确是幸免。

要解决此问题:

编辑mysql apparmor文件:

须藤emacs -nw /etc/apparmor.d/usr.sbin.mysqld

使用* .sql扩展名包含init文件所在的文件夹:

...
/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

现在初始化文件被执行。好极了!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.