MySQL çökmeye devam ediyor: InnoDB: Kilitlenemiyor ./ibdata1, hata: 11


43

Basit bir web sunucum var (Debian 6.0 x86, 1 GB bellekli DirectAdmin ve hala 10 GB boş alan, mySQl sürüm 5.5.9), ancak mySQL sunucusu çökmeye devam ediyor ve yeniden başlatabilmek için tüm mySQL işlemlerini öldürmem gerekiyor tekrar.

/var/log/mysql-error.log çıktı:

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.

Burada mySQL web sitesinde bir konu buldum ancak bunun için bir çözüm bulunmuyor.

Herhangi bir fikrin var mı?


Ve bu MySQL'in hangi sürümü?
Michael Hampton

Anlamıyorum - log dosyasının bu kısmı MySQL ile başladığın problemin hata nedeni ile ilgili olmadığını söylüyor. En iyi şey, sorunun kaynağını kaldırmaktır.
Krzysztof Księżyk

@MichaelHampton Bu gönderi düzenlendi (mySQL sürüm 5.5.9 ve günlüğü artırdı).
Devator

1
Başlamadan önce çalışan mysqld olmadığını kontrol ettiniz mi? Nasıl?
symcbean

Yanıtlar:


32

aynı blogdaki bir yorumdan başka bir yaklaşım:

bu bana yardımcı oldu:

-s: 3306

Öyleyse öldür (işlem numarası)

-9 SÜRECİ öldür

örneğin, öldür -9 13498

Ardından MySQL'i tekrar başlatmayı deneyin.

http://www.webhostingtalk.com/archive/index.php/t-1070293.html üzerinden


1
service mysql restartzaten çalışan bir işlem göstermiyordu, ancak lsofbuldu. Öldürüldü service mysql startve şimdi işlem seli başarısız e-postaları durdurabilir. Çok teşekkürler.
Doyle Lewis,

28

Ubuntu 14.04 ile. Üzerinden yeniden başlatmaya çalıştığımda bu sorunu yaşıyorum

/etc/init.d/mysql restart

Bunun yerine deneyin

service mysql restart 

1
Teşekkürler, yardımcı oldu. Ama neden?
Çok


@too, eski stilde bir init.d betiği ve bir iş için bir starttart komutunuz varsa , kullanmak zorundasınız service job start, aksi takdirde init.d betiği ile başlatırsanız, Upstart bunu bilmeyecek ve girişimde bulunabilecek başka bir örneği başlatmak için. (En azından MySQL'in varsayılan init betiklerinde durum böyle.)
wireman

@ wireman: Düğüm (DNS sunucusu) dahil olmak üzere diğer paketlerin neden benzer sorunları olduğunu açıklar. Uygulamaya ne zaman karar verdiler? Bence /etc/init.d kabuğun tamamlanmasına izin verdiği için üstündür, bu nedenle kullanıcıyı aşırı yazmadan kurtarır. -1 :) iktidara ilerleme
çok

@too Bash sekmesi tamamlama özelleştirilebilir. Ubuntu’nun kullanışlı bir şeyleri yok, ancak hiç kimsenin tab tamamlayan serviceisimleri düşünmemesi garip görünüyor . Belki Canonical'a hata izleyicileri aracılığıyla bir özellik isteği gönderebilirsin?
CVn

18

Bu sorunun en yaygın nedeni, zaten çalışıyorken MySQL'i başlatmaya çalışmaktır.

Çözümlemek için, çalışan tüm MySQL örneklerini kaldırın ve ardından normal başlangıç ​​komut dosyalarınızı kullanarak yeniden başlatın service mysql start.

Acı dolu bir dünya için hazırlıklı olmadığınız sürece, dağıtım paketi sürümlerini kullanırken MySQL'i manuel olarak başlatmaya çalışmayın.


however the mySQL server keeps crashing- mySQL’i yeniden başlatmıyorum. Sadece kendi kendine çöküyor, bundan sonra açıkça onu yeniden başlatmam gerekiyor. ;-)
Devator 22

@MichaelHampton 'incinti dünyası' ve 'MySQL'i elle başlat' hakkında biraz daha bilgi verebilir misiniz? Teşekkürler)
Serge Kvashnin

11

Çözüm

orijinal dosyaların bir kopyasını çıkarın (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


sihirli bir şekilde bana yardım etti.
nils petersohn

cp -a ne anlama geliyor?, Ben zaten man sayfasını okudum
Ilja

2
Çok teşekkürler, yardımcı oldu. Ama neden?
DaviAragao 24:15

Docker kapsayıcısında çalışan bir db başarısız bir yeniden başlatmadan sonra bu sorunu yaşadım. Bunun neden işe yaradığı ve bazı meta verilerinin dosyada depolandığı konusunda eğitimli bir tahmin yapıyorum. taşıdığınızda ve orijinal konumuna kopyaladığınızda, kilitli olduğunu belirleyen meta veriler kaldırılır. -a işlemi, kopyalama sırasında SELinux ile ilişkili öznitelikler de dahil olmak üzere dosya özniteliklerini korur, ancak meta verileri değil.
JDL,

2

Bu çözmeme yardımcı oldu:

Tüm ibdata dosyalarını silin ve mysql'nin onları oluşturmasına izin verin.

mysql durdur:

service mysql stop

mysql kütüphanesine git:

cd /var/lib/mysql/

ihtiyacınız olduğunda innodb dosyalarını bir yere taşıyın:

mv ib* /root/

mysql'i başlat:

service mysql start

Yararlı cevaplar arasında gezinince, bu dosyayı kilitleyememekle ilgili şikayet olduğundan şüphesiz bunun işe yarayacağını düşündüm. Hareket ettikten sonra, MySQL onları yeniden yarattı ama yine de şikayet ediyor ... deli!
Kyle Burkett,

1

Buraya aynı tekrarlayan hatanın googlinginden ancak 13 ( InnoDB: Unable to lock ./ibdata1, error: 13) hata koduyla geldim . İnternette çok sayıda çözüm denedikten sonra, bana yardım eden birisini icat etti (apparmor!)

Bu satırları config /etc/apparmor.d/usr.sbin.mysqldkomutuna ekleyin (ve elbette apparmor ve mysql'i yeniden yükleyin):

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

Genellikle çözümler arasındaki temel farklar: iki kural (dir kendisi ve içindeki tüm dosyalar için, çift notu not edin **) ve kmysql'nin dosyaları kilitlemesine izin verme seçeneği.

Umarım bu birine yardım eder.


Bunu da ekleyebilirsiniz /etc/apparmor.d/local/usr.sbin.mysqld. Eğer yoksa, dosyayı oluşturun. Daha fazla ayrıntı için lütfen bkz./etc/apparmor.d/local/README
knb

1

% 100 olduğundan emin olmak için alanı kontrol edin

df -h

Dolu dolu sanki .sock dosyası oluşturmayacak.


Cevap şaşırtıcı bir yan etki ile ilgili, bunun LQ olacağı konusunda kesinlikle aynı fikirde değilim.
user259412

0

Eğer olup olmadığını kontrol edin pid-fileparametreyi [mysql]bölümünde my.cnfdosyası. Mevcut değilse unable to lock ...ibdata1.. error:1, gerçekleşir.


0

Basit, ama "cp -a" ile olduğundan daha hızlı. Ve "cp -a" ve diğer her şey yapamadığında yardımcı oldu.

  1. service mysql stop && pkill -f mysql

Tüm mysql işlemlerinden kurtulun

  1. vi /etc/mysql/my.cnf

Datadir = / var / lib / mysql parametresini datadir = / var / lib / mysql2 olarak değiştirin (veya yoksa ekleyin)

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

Datadir ismini yeni isimle değiştir

  1. service mysql start

Tefini hazırla


0

Diğer çözümlerin hiçbiri işe yaramazsa, sorun muhtemelen AppArmor yanlış yapılandırmasından kaynaklanır.

Yani sadece yapın:

$ apt install apparmor-profiles

ve sonra MySQL'i yeniden başlatın (ne kadar hızlı başlayacağına dikkat edin).

Ne zaman yaparken AppArmor ile ilgili eksik bir dosya fark ettim:

$ systemctl status mysql.service

Bu yüzden neden AppArmor'un yapılandırmasında bir sorun olduğunu düşündüm.

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.