dosya bulunamadı hatası veren mysql init-file yapılandırma seçeneği


11

Ne zaman mysql başlar bir SQL komut dosyası çalıştırmak istiyorum ama Ubuntu 11.10 çalışamıyor.

MySQL yapılandırma dosyasına bir " init-file " seçeneği ekledim :

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

Ancak mysql yeniden başlattığınızda, " Dosya bulunamadı " hatasıyla başarısız olur :

> 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

Ancak dosya kesinlikle var ve okunabilir:

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

Bunun nasıl çözüleceğine dair bir fikrin var mı? Bu bir Ubuntu garipliği mi yoksa aptalca bir şey mi yaptım?


Bilgi:

Ubuntu 11.10 ve MySQL 5.1 kullanıyorum.

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

Çıktısı nedir file /etc/mysql/mysqlinit.sql?
quanta

file /etc/mysql/mysqlinit.sql"/etc/mysql/mysqlinit.sql: ASCII metni, satır sonlandırıcısı olmadan" veriyor
Tom

Sorunu daraltmak için, /tmpne olduğunu görmek için klasörü klasöre taşımayı deneyin . AppArmor çalıştırıyor musunuz?
quanta

Bir init dosyası kullanarak denedim /tmpama şans yok. Evet, sanırım Ubuntu AppArmor kullanıyor.
Tom

1
Öyleyse, AppArmor'u durdurmaya çalışın ve hatanın giderilip giderilmediğine bakın.
quanta

Yanıtlar:


14

Teşekkürler @quanta, sorun gerçekten de belirgindi.

Sorunu çözmek için:

Mysql apparmor dosyasını düzenleyin:

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

İnit dosyanızın * .sql uzantısıyla yaşadığı klasörü ekleyin:

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

Ardından AppArmor'un profilleri yeniden yüklemesini sağlayın.

# sudo /etc/init.d/apparmor reload

Sonra mysql yeniden yükleyin:

sudo /etc/init.d/mysql restart

Şimdi init dosyası yürütülür. Yaşasın!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.