mysql init-file कॉन्फिगरेशन विकल्प देने वाली फ़ाइल को त्रुटि नहीं मिली


11

जब भी mysql शुरू होता है मैं एक SQL स्क्रिप्ट चलाना चाहता हूं, लेकिन मैं इसे Ubuntu 11.10 में काम नहीं कर सकता।

मैंने mysql config फाइल में " 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 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 टेक्स्ट, जिसमें कोई लाइन टर्मिनेटर नहीं है"
टॉम

समस्या को कम करने के लिए, यह /tmpदेखने के लिए कि इसे फ़ोल्डर में ले जाने का प्रयास करें । क्या आप AppArmor चला रहे हैं?
क्वांटा

मैं एक init फ़ाइल का उपयोग करने की कोशिश की, /tmpलेकिन कोई किस्मत नहीं। हां, मुझे लगता है कि उबंटू AppArmor का उपयोग करता है।
टॉम

1
यदि ऐसा है, तो AppArmor को रोकने का प्रयास करें और देखें कि क्या त्रुटि चली गई है।
क्वांटा

जवाबों:


14

धन्यवाद @quanta, समस्या वास्तव में आशंकित थी।

समस्या को हल करने के लिए:

Mysql apparmor फ़ाइल संपादित करें:

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

उस फ़ोल्डर को शामिल करें जहां आपकी init-file * .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-file निष्पादित हो जाती है। वाह!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.