opsi konfigurasi ins-file mysql memberikan file tidak ditemukan kesalahan

11

Saya ingin menjalankan skrip SQL setiap kali mysql mulai tetapi saya tidak bisa membuatnya bekerja di Ubuntu 11.10.

Saya menambahkan opsi " init-file " ke file konfigurasi mysql:

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

Tetapi ketika saya me-restart mysql, gagal dengan kesalahan " File tidak ditemukan ":

> 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

Tetapi file itu pasti ada dan dapat dibaca:

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

Ada ide bagaimana menyelesaikan ini? Apakah ini keanehan Ubuntu atau apakah saya melakukan sesuatu yang bodoh?


Info:

Saya menjalankan Ubuntu 11.10 dan MySQL 5.1.

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))
Tom
sumber
Apa output dari file /etc/mysql/mysqlinit.sql?
quanta
file /etc/mysql/mysqlinit.sqlmemberikan "/etc/mysql/mysqlinit.sql: teks ASCII, tanpa terminator baris"
Tom
Untuk mempersempit masalah, coba pindahkan ke /tmpfolder untuk melihat apa yang terjadi. Apakah Anda menjalankan AppArmor?
quanta
Saya mencoba menggunakan init-file /tmptetapi tidak berhasil. Ya, saya pikir Ubuntu menggunakan AppArmor.
Tom
1
Jika demikian, coba hentikan AppArmor dan lihat apakah kesalahannya hilang.
quanta

Jawaban:

14

Terima kasih @quanta, masalahnya memang apparmor.

Untuk memperbaiki masalah:

Edit file appsor mysql:

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

Sertakan folder tempat init-file Anda hidup dengan ekstensi * .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,
}

Dan kemudian buat AppArmor memuat ulang profil.

# sudo /etc/init.d/apparmor reload

Kemudian muat ulang mysql:

sudo /etc/init.d/mysql restart

Sekarang file init dijalankan. Yay!

Tom
sumber