"MySQL शुरू करते समय फ़ाइल mysql / plugin.frm नहीं पा सकते हैं"


17

जब मैं अपना MySQL सर्वर शुरू करता हूं, मुझे यह त्रुटि मिलती है:

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

मैं mysql_upgradeइसे पुनर्निर्माण करने के लिए चला गया हूं , और यह पुनर्निर्माण के लिए काम करता है। इससे पहले कि मैं ऐसा करता, मैंने MySQL को हटा दिया और स्थापित कर दिया। हालाँकि, जब मैंने पुन: प्रारंभ करने का प्रयास किया, तो मुझे वही त्रुटि मिली। मुझे यकीन है कि यह अनुमति की समस्या नहीं है, क्योंकि सभी फाइलें और निर्देशिकाएं mysqlउपयोगकर्ता द्वारा बनाई गई हैं ।

क्या आप मुझे इस त्रुटि को ठीक करने के बारे में सलाह दे सकते हैं?


selinux भी इस समस्या का कारण हो सकता है।
रोस

जवाबों:


16

यदि आपके पास गैर-मानक स्थान पर mysql डेटा निर्देशिका है और आपके सिस्टम में एपरमोर है, तो सुनिश्चित करें कि /etc/apparmor.d/usr.sbin.mysqldआपकी डेटा निर्देशिका श्वेत सूची में है। कॉन्फ़िगरेशन जैसा दिखना चाहिए:

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

अपॉइंटमेंट में कोई बदलाव करने के बाद अपॉरमॉन डेमॉन को फिर से शुरू करना होगा।


1
apparmorहमें समय-समय पर जगाने के लिए वापस आता है, बस इसलिए हम उसके बारे में नहीं भूलते ...
रिंग Ø

1
वाह! इस उत्तर की तलाश में बहुत समय। धन्यवाद!
डिएगो एंड्रेस डीज़ एस्पिनोज़ा

मेरे मामले में मैं भी एक कस्टम अस्थायी डीआईआर का उपयोग करता हूं, और मैंने पाया कि मुझे कुछ लाइनों की नकल करने की आवश्यकता है /etc/apparmor.d/abstractions/user-tmp। जब मैं डाल owner /mysql-tmp/** rwkl, /mysql-tmp/ r,में /etc/apparmor.d/local/usr.sbin.mysqldयह Ubuntu 14.04 पर मेरे लिए काम शुरू कर दिया।
आमोद

12

क्या आप सुनिश्चित हैं कि यह अनुमतियों के बारे में नहीं है? गलत: 13 :

$ perror 13
OS error code  13:  Permission denied

कोशिश करने वाली पहली बात यह है कि माईएसक्यूएल के डेटादिर के स्वामित्व को बदलना , उदाहरण के लिए, यदि आप उपयोगकर्ता mysql के साथ MySQL चलाते हैं :

chown -R mysql:mysql /path/to/datadir

जाँच करने के लिए एक और बात यह है कि mysqld प्रक्रिया के मालिक (शायद mysql ) के पास tmpdir के रूप में परिभाषित गंतव्य के लिए आवश्यक विशेषाधिकार हैं । और अगर किसी भी कारण से ऊपर काम नहीं करता है, तो यह देखने के लिए mysqld प्रक्रिया का पता लगाने की कोशिश करें कि उसे अनुमति कहाँ और क्यों मिलती है :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log

मैं MySQL 5.1 से 5.7 में अपग्रेड करते समय एक ही मुद्दे में भाग गया। ऐसा प्रतीत होता है कि उपयोगकर्ता mysql / var / lib / mysql निर्देशिका का स्वामित्व खो गया है ।
रॉब

1

मैं दिमित्रे से सहमत हूं। यह समस्या ज्यादातर अपर्याप्त अनुमतियों के कारण उत्पन्न होती है। MySql रूट फ़ोल्डर के स्वामित्व को mysql में बदलें।

chown -R mysql:mysql [mysql root folder]

यद्यपि आप अपने कस्टम उपयोगकर्ता को मैसकॉल स्क्रिप्ट की अनुमति बदलना चाहते हैं।

chown my_mysql:my_mysql [mysqld etc]

इसने मेरे लिए काम किया।


1

मेरे मामले में, मुझे ibdata1फ़ोल्डर सहित MySQL डेटा निर्देशिका को दूसरे विभाजन में रखने की आवश्यकता थी क्योंकि मेरी ibdata1बहुत तेजी से बढ़ रही थी और मेमोरी समस्या उत्पन्न हुई थी। उसके लिए, मुझे नीचे की तरह my.cnf फाइल को बदलना होगा।

my.cnf था:

datadir         =  /var/lib/mysql

my.cnf अब:

datadir         = /home/ubuntu/data/mysql

मैंने कोशिश की,

sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

लेकिन अभी भी वही उपरोक्त त्रुटि है। फिर मैंने /etc/apparmor.d/usr.sbin.mysqldफाइल बदलने की कोशिश की । इसने मेरे लिए अच्छा काम किया।

हमें अपने नए फ़ोल्डर को श्वेतसूची में रखना चाहिए usr.sbin.mysqld

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

उपरोक्त लाइनों के बजाय,

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

फिर MySQL सर्वर को पुनरारंभ करें।


1

यदि आप SELinux चला रहे हैं तो निम्नलिखित भी मदद कर सकते हैं ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa

मेरे restorecon -R /var/lib/mysqlलिए, निर्देशिका के लिए SELinux सेटिंग्स को सही ढंग से बहाल करने में मदद करना।
सेबी

0

5.5 से 5.6 पर अपग्रेड होने के बाद मेरे पास यह मुद्दा था।

अजीब तरह से, ऐसा लग रहा mysqlथा कि उपयोगकर्ता को हटा दिया गया था और फिर से बनाया गया था, जिसने सभी mysql फ़ाइलों को अनिवार्य रूप से उनकी अनुमतियों को 'खो' दिया था ...

मैंने इसे mysql dir पर जाकर पाया (जो मेरे मामले में डिफ़ॉल्ट dir नहीं था, जैसा कि मैंने इसे स्थानांतरित किया है) और देखा कि मालिक सिर्फ एक uuid और गाइड नंबर था ... तो, मैं बस chown mysql:mysqlसभी पर भागा dirs और फ़ाइलें, और voila


-1

यह सरल chownमेरे लिए भी काम आया, कोई और अधिक दुर्घटनाग्रस्त प्रक्रिया नहीं:

sudo chown -R mysql:mysql  /var/lib/mysql

शुक्र है, एपर्मर के साथ खेलना जटिल और संपादित करने के लिए कठिन हो जाता है।

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