MySQL दुर्घटनाग्रस्त रहता है: InnoDB: लॉक करने में असमर्थ ।/ibdata1, त्रुटि: 11


43

मेरे पास एक साधारण वेबसर्वर है (डेबियन 6.0 x86, 1 जीबी मेमोरी के साथ DirectAdmin और अभी भी 10 GB मुक्त स्थान, mySQl संस्करण 5.5.9), हालांकि mySQL सर्वर क्रैश होता रहता है और मुझे इसे पुनः आरंभ करने में सक्षम होने के लिए सभी mySQL प्रक्रियाओं को मारने की आवश्यकता है फिर।

/var/log/mysql-error.log उत्पादन:

130210 21:04:26 InnoDB: Using Linux native AIO
130210 21:04:34 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:05:42 InnoDB: Completed initialization of buffer pool
130210 21:05:48 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:22 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:27 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:06:29 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:07:22 InnoDB: Completed initialization of buffer pool
130210 21:07:51 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:08:33 InnoDB: Completed initialization of buffer pool
130210 21:12:03 [Note] Plugin 'FEDERATED' is disabled.
130210 21:12:47 InnoDB: The InnoDB memory heap is disabled
130210 21:12:47 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
130210 21:12:47 InnoDB: Compressed tables use zlib 1.2.3
130210 21:12:47 InnoDB: Using Linux native AIO
130210 21:13:11 InnoDB: highest supported file format is Barracuda.
130210 21:13:23 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130210 21:14:05  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
130210 21:17:53  InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
130210 21:17:53  InnoDB: Operating system error number 11 in a file operation.

मुझे यहाँ mySQL वेबसाइट पर एक विषय मिला है, हालाँकि इसका कोई हल नहीं है।

किसी को कोई विचार?


और MySQL का कौन सा संस्करण है?
माइकल हैम्पटन

मुझे समझ में नहीं आता - लॉग फ़ाइल का यह हिस्सा MySQL के साथ समस्या के बारे में बताता है कि त्रुटि का कारण नहीं है। सबसे अच्छी बात समस्या के स्रोत को दूर करना है।
Krzysztof Księżyk

@Michael Hampton पोस्ट को संपादित किया गया है (mySQL संस्करण 5.5.9 और लॉग बढ़ाया)।
डेवेटर

1
क्या आपने यह जांचा कि इसे शुरू करने से पहले कोई रनिंग mysqld नहीं था? कैसे?
सिम्बियन

जवाबों:


32

एक ही ब्लॉग में एक टिप्पणी से एक और दृष्टिकोण:

इससे मुझे मदद मिली:

lsof -i: 3306

फिर इसे मार डालो (प्रक्रिया संख्या)

मार -9 प्रक्रिया

जैसे मार-९ १३४ ९ 49

फिर MySQL को फिर से शुरू करने की कोशिश करें।

http://www.webhostingtalk.com/archive/index.php/t-1070293.html के माध्यम से


1
service mysql restartपहले से कोई चल रही प्रक्रिया नहीं दिखा रहा था, लेकिन lsofयह पाया गया। इसे मार दिया, service mysql startऔर अब प्रक्रिया की बाढ़ विफल ईमेल बंद कर सकते हैं। बहुत धन्यवाद।
डॉयल लुईस

28

ubuntu 14.04 के साथ। जब मैं पुनः आरंभ करने का प्रयास कर रहा हूँ तो मुझे यह समस्या आ रही है

/etc/init.d/mysql restart

इसके बजाय प्रयास करें

service mysql restart 

1
धन्यवाद, इससे मदद मिली। पर क्यों?
भी


@too, यदि आपके पास पुरानी शैली की init.d स्क्रिप्ट और नौकरी के लिए अपस्टार्ट कॉन्फिगर दोनों हैं, तो आपको इसका उपयोग करना होगा service job start, अन्यथा यदि आप init.d स्क्रिप्ट के साथ इसे शुरू करते हैं, तो Upstart को इसके बारे में पता नहीं होगा और यह प्रयास कर सकता है। एक और उदाहरण बूट करने के लिए। (कम से कम यही स्थिति MySQL की डिफ़ॉल्ट init स्क्रिप्ट के साथ है।)
वायरमैन

@wireman: यह बताता है कि गाँठ (DNS सर्वर) सहित अन्य पैकेज में समान समस्याएं क्यों हैं। जब उन्होंने इसे लागू करने का फैसला किया? मुझे लगता है कि /etc/init.d बेहतर है क्योंकि यह शेल को पूरा करने की अनुमति देता है ताकि उपयोगकर्ता को अत्यधिक टाइपिंग से राहत मिले। की -1 :) बिजली के लिए प्रगति
बहुत

@too बैश टैब का समापन अनुकूलन योग्य है। उबंटू कुछ भी नहीं है, लेकिन अजीब लगता है कि किसी ने भी टैब को पूरा करने वाले serviceनामों के बारे में नहीं सोचा होगा । शायद उनके बग ट्रैकर के माध्यम से कैनोनिकल के लिए एक सुविधा अनुरोध सबमिट करें?
20

18

इस समस्या का सबसे आम कारण MySQL शुरू करने की कोशिश कर रहा है जब यह पहले से ही चल रहा है।

इसे हल करने के लिए, MySQL के किसी भी इंस्टेंस इंस्टेंसेस को मारें और फिर इसे अपने सामान्य स्टार्टअप स्क्रिप्ट्स, उदाहरण के लिए रीस्टार्ट करें service mysql start

जब तक आप चोट की दुनिया के लिए तैयार नहीं होते हैं तब तक वितरण-पैक संस्करणों का उपयोग करके मैन्युअल रूप से MySQL शुरू करने का प्रयास न करें।


however the mySQL server keeps crashing- मैं MySQL को पुनः आरंभ नहीं करता। यह बस खुद को दुर्घटनाग्रस्त कर देता है, जिसके बाद मुझे स्पष्ट रूप से इसे पुनरारंभ करने की आवश्यकता है। ;-)
डेवेटर

@Michael Hampton क्या आप 'चोट की दुनिया' और 'MySQL मैन्युअल रूप से शुरू' के बारे में कुछ और जानकारी दे सकते हैं? धन्यवाद)
सर्ज क्वासनिन

11

उपाय

मूल फ़ाइलों की एक प्रतिलिपि बनाएँ (ibdata1, ib_logfile0, ib_logfile1 ...)।

mv ibdata1 ibdata1.bak 
cp -a ibdata1.bak ibdata1

http://cglreport.zhenhua.info/2008/08/mysql-error-unable-to-lock-ibdata1.html


जादुई रूप से मेरी मदद की।
निल्स पीटरसन

cp -a का क्या मतलब है?, मैंने पहले ही मैन पेज पढ़ा है
Ilja

2
बहुत धन्यवाद, इससे मदद मिली। पर क्यों?
डेविआरागॉ

एक डॉकटर कंटेनर में चल रहे db पर एक असफल पुनरारंभ के बाद मुझे यह समस्या थी। मैं एक शिक्षित अनुमान लगा रहा हूं कि यह क्यों काम करता है और यह है कि कुछ मेटा डेटा फ़ाइल में संग्रहीत है। इसे स्थानांतरित करने और इसे मूल स्थान पर कॉपी करने से मेटाडाटा निकालता है यह निर्धारित करता है कि यह बंद है। -a ऑपरेशन प्रतिलिपि के दौरान SELinux संबंधित विशेषताओं सहित फ़ाइल विशेषताओं को बनाए रखता है, लेकिन मेटाडेटा नहीं।
JDL

2

इससे मुझे इसे हल करने में मदद मिली:

सभी ibdata फ़ाइलों को हटाएँ और mysql उन्हें बनाने दें।

mysql बंद करो:

service mysql stop

mysql लाइब्रेरी में जाएं:

cd /var/lib/mysql/

यदि आपको इसकी आवश्यकता है तो कहीं न कहीं फ़ाइल को स्थानांतरित करें:

mv ib* /root/

mysql शुरू करें:

service mysql start

सहायक उत्तरों के माध्यम से स्क्रॉल करने पर मुझे लगा कि निश्चित रूप से ऐसा लगता है कि यह काम करेगा क्योंकि त्रुटि उस फ़ाइल को लॉक नहीं कर पाने के बारे में शिकायत कर रही है। हिलाने के बाद, mysql ने उन्हें फिर से बनाया लेकिन अभी भी शिकायत है ... पागल!
काइल बर्केट

1

एक ही दोहराई जाने वाली त्रुटि के googling से यहाँ आया था लेकिन त्रुटि कोड 13 ( InnoDB: Unable to lock ./ibdata1, error: 13) के साथ। इंटरनेट के आसपास बहुत सारे समाधानों की कोशिश करने के बाद, एक का आविष्कार किया जिसने मेरी मदद की (apparmor!)

इन पंक्तियों को विन्यास में जोड़ें /etc/apparmor.d/usr.sbin.mysqld(और निश्चित रूप से पुनः लोड करें और निश्चित रूप से mysql):

/path/to/mysql/data/ r,
/path/to/mysql/data/** rwk,

अक्सर समाधान के बीच मुख्य अंतर: दो नियम (स्वयं के लिए और अंदर की सभी फाइलों के लिए, डबल पर ध्यान दें **) और kविकल्प mysql को फ़ाइलों को लॉक करने की अनुमति देने के लिए।

आशा है कि यह किसी की मदद करेंगे।


आप इसे भी जोड़ सकते हैं /etc/apparmor.d/local/usr.sbin.mysqld। यदि यह मौजूद नहीं है तो फ़ाइल बनाएँ। अधिक जानकारी के लिए, कृपया देखें/etc/apparmor.d/local/README
kn

1

यह सुनिश्चित करने के लिए स्थान की जाँच करें कि यह 100% है

df -h

मानो इसकी पूरी तरह से यह .sock फ़ाइल नहीं बनाता है।


जवाब एक आश्चर्यजनक पक्ष-प्रभाव के बारे में है, मैं दृढ़ता से असहमत हूं कि यह एलक्यू होगा।
पीटर ने मोनिका

0

कृपया जांचें कि आपके पास फ़ाइल pid-fileके [mysql]अनुभाग में पैरामीटर है my.cnf। अगर यह मौजूद नहीं है, तो unable to lock ...ibdata1.. error:1होगा।


0

सरल, लेकिन "cp -a" के साथ रास्ते से तेज। और जब "cp -a" और सब कुछ अन्य मदद नहीं कर सकता।

  1. service mysql stop && pkill -f mysql

सभी mysql प्रक्रियाओं से छुटकारा पाएं

  1. vi /etc/mysql/my.cnf

पैरामीटर datadir = / var / lib / mysql को datadir = / var / lib / mysql2 में बदलें (या यदि आपके पास नहीं है तो जोड़ें)

  1. mv /var/lib/mysql /var/lib/mysql2

एक नए नाम के लिए डेटादिर का नाम बदलें

  1. service mysql start

तैयार है आपका टैम्बोरिन


0

यदि कोई अन्य समाधान काम नहीं करता है, तो समस्या संभवतः AppArmor misconfiguration से उपजी है।

तो बस करो:

$ apt install apparmor-profiles

और फिर MySQL को पुनः आरंभ करें (ध्यान दें कि यह कितनी तेजी से पुनः आरंभ होगा)।

मैंने देखा जब ऐसा करने से AppArmor से संबंधित एक फ़ाइल गायब है:

$ systemctl status mysql.service

इसलिए मुझे लगा कि AppArmor के कॉन्फ़िगरेशन में कुछ गड़बड़ है।

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