MySQL постійно виходить з ладу: InnoDB: Не вдається заблокувати ./ibdata1, помилка: 11


43

У мене простий веб-сервер (Debian 6.0 x86, DirectAdmin з 1 ГБ пам’яті та ще 10 ГБ вільного місця, версія 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

@MichaelHampton Допис відредаговано (mySQL версії 5.5.9 та збільшив журнал).
Девальватор

1
Ви перевірили, чи не було запущеного mysqld перед його запуском? Як?
symcbean

Відповіді:


32

ще один підхід з одного коментаря в тому ж блозі:

це допомогло мені:

lsof -i: 3306

Потім вбити його (номер процесу)

вбити -9 ПРОЦЕС

наприклад, вбити -9 13498

Потім спробуйте перезапустити 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 старого стилю та конфігурація upstart для роботи, вам доведеться використовувати service job start, інакше якщо ви запустите його зі скриптом init.d, Upstart про це не дізнається, і він може спробувати для завантаження іншого екземпляра. (Принаймні, це стосується сценаріїв init за замовчуванням MySQL.)
провідник

@wireman: це пояснює, чому інші пакети, включаючи вузол (DNS-сервер), мають подібні проблеми. Коли вони вирішили це застосувати? Я думаю, що /etc/init.d є вищим, оскільки дозволяє завершити обробку, тим самим позбавляє користувача від надмірного набору тексту. Прогрес до сили -1 :)
теж

Завершення вкладки @too Bash налаштовується. У Ubuntu немає нічого зручного, але здається дивним, що ніхто не подумав би serviceімена, що заповнюють вкладки . Можливо, надішліть запит на функцію компанії Canonical за допомогою їх трекера помилок?
CVn

18

Найпоширенішою причиною цієї проблеми є спроба запустити MySQL, коли вона вже запущена.

Щоб вирішити цю проблему, усуньте всі запущені екземпляри MySQL та перезавантажте її, використовуючи звичайні сценарії запуску, наприклад service mysql start.

Не намагайтеся запустити MySQL вручну, використовуючи пакунки з дистрибутивом, якщо ви не готові до ушкодження.


however the mySQL server keeps crashing- Я не перезапускаю mySQL. Він просто виходить з ладу, після чого мені потрібно явно його перезапустити. ;-)
Девайс

@MichaelHampton, чи можете ви дати трохи більше інформації про "світ травми" та "запустити 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


магічно мені допомогли.
nils petersohn

в чому сенс cp -a ?, я вже читав сторінку man
Ilja

2
Велике спасибі, це допомогло. Але чому?
DaviAragao

У мене була ця проблема після невдалого перезавантаження на db, що працює в контейнері docker. Я добре розумію, чому це працює, і деякі метадані зберігаються у файлі. переміщення та копіювання до початкового місця видаляє метадані, визначаючи, що вони заблоковані. Операція -a підтримує атрибути файлу, включаючи атрибути, пов'язані з SELinux, але не метадані, під час копіювання.
JDL

2

Це допомогло мені вирішити:

Видаліть усі файли ibdata та дозвольте mysql створити їх.

зупинити mysql:

service mysql stop

перейти до бібліотеки mysql:

cd /var/lib/mysql/

перемістіть файли innodb кудись у випадку, якщо вам це потрібно:

mv ib* /root/

запустити mysql:

service mysql start

Прогортаючи корисні відповіді, я вважав, що це, здається, буде працювати, оскільки помилка скаржиться на неможливість блокування цього файлу. Після переїзду mysql відтворив їх, але все ще скаржиться ... божевільний!
Кайл Беркетт

1

Прийшов сюди з googling тієї ж повторюваної помилки, але з кодом помилки 13 ( InnoDB: Unable to lock ./ibdata1, error: 13). Спробувавши багато рішень в Інтернеті, винайшов таке, яке мені допомогло (прихильність!)

Додайте ці рядки до конфігурації /etc/apparmor.d/usr.sbin.mysqld(і перезавантажте apparmor та mysql звичайно):

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

Основні відмінності між найчастіше рішеннями: два правила (для самого dir та для всіх файлів всередині, відзначте подвійне **) та kможливість дозволити mysql блокувати файли.

Сподіваюся, це допоможе комусь.


Ви також можете додати його в /etc/apparmor.d/local/usr.sbin.mysqld. Створіть файл, якщо він не існує. Для отримання більш детальної інформації, будь ласка , см/etc/apparmor.d/local/README
KNB


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

Перейменуйте datadir на нове ім’я

  1. service mysql start

Підготуйте свій бубен


0

Якщо жодне з інших рішень не працює, проблема, ймовірно, випливає з неправильної конфігурації AppArmor.

Тож просто роби:

$ apt install apparmor-profiles

а потім перезапустіть MySQL (зауважте, як швидко він перезапуститься).

Я помітив файл, який відсутній, пов’язаний із AppArmor:

$ systemctl status mysql.service

Тому я подумав, що з конфігурацією AppArmor щось не так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.