파일을 찾을 수없는 오류를 제공하는 mysql init-file 구성 옵션


11

mysql이 시작될 때마다 SQL 스크립트를 실행하고 싶지만 Ubuntu 11.10에서는 작동하지 않습니다.

mysql 설정 파일에 " init-file "옵션을 추가했습니다 :

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

그러나 mysql을 다시 시작하면 " File not found "오류 와 함께 실패합니다 .

> 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 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무엇입니까?
quanta

file /etc/mysql/mysqlinit.sql"/etc/mysql/mysqlinit.sql : 줄 종결자가없는 ASCII 텍스트"제공
Tom

문제의 범위를 좁히려면 문제를 /tmp폴더로 이동하여 결과 를 확인하십시오. AppArmor를 실행하고 있습니까?
quanta

init 파일을 사용해 보았지만 /tmp운이 없습니다. 예, 우분투는 AppArmor를 사용한다고 생각합니다.
Tom

1
그렇다면 AppArmor를 중지하고 오류가 사라지는 지 확인하십시오.
quanta

답변:


14

@quanta에게 감사드립니다. 문제는 참으로 놀라운 일이었습니다.

문제를 해결하려면

mysql apparmor 파일을 편집하십시오 :

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

init 파일이있는 폴더를 * .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 파일이 실행됩니다. 예이!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.