InnoDB: Unable to lock ./ibdata1, error: 11


На одном сервере часто работают сайты использующие базы данных таблицы которых имеют различный тип: MyISAM и InnoDB. Таблицы InnoDB гораздо более эффективны с точки зрения оптимизации приложений, но работать с ними на уровне сервера баз данных сложнее. При этом с InnoDB чаще возникают ошибки — среди них InnoDB: Unable to lock ./ibdata1, error: 11



Лог всех данных касающихся работы MySQL пишется в один файл, в нем иногда можно видеть записи следующего типа:


InnoDB: Unable to lock /path/to/ibdata1, error: 11
InnoDB: Check that you not already have another mysqld process
InnoDB: using the same InnoDB data or log files.


Как исправить ошибку InnoDB: Unable to lock ./ibdata1, error: 11


Часто обозначенные выше ошибки можно увидеть в логе когда сервер баз данных не запускается — часто после перезагрузки или сбоя питания.



Из записи Check that you not already have another mysqld process явно следует, что, вероятно, на сервере по какой-то причине запущены или пытаются запуститься 2 процесса MySQL.



Проверяем так ли это

ps aux | grep mysql



Если обнаружен  какой-либо процесс можно отследить его используя strace или завершить стандартным способом через systemctl stop mysql или через kill передав команде идентификатор процесса.



Ошибка InnoDB: Unable to lock /path/to/ibdata1, error: 11 обычно соседствует с первой — ее причина в невреных правах на некоторые InnoDB таблицы в /var/lib/mysql или другом каталоге являющемся docdir для сервера баз данных



Исправить ошибку можно выполнив несколько простых команд.


Останавливаем MySQL — часто он уже остановлен и не запускается.

systemctl stop mysql



Перемещаем файл ibdata1, в котором хранятся все данные и индексы InnoDB в сторонний каталог делая бэкап

mv /var/lib/mysql/ibdata1 /var/lib/mysql/ibdata1.bak



Копируем файл обратно восстанавливая права.

cp -a /var/lib/mysql/ibdata1.bak /var/lib/mysql/ibdata1



Запускаем mysql:

systemctl start mysql


InnoDB: Unable to lock ./ibdata1, error: 11


Проверяем статус службы


systemctl status mysql

InnoDB: Unable to lock ./ibdata1, ошибка исправлена


Также скорректировать права на таблицы можно вручную перейдя в /var/lib/mysql и выполнив chown mysql: на все базы данных и таблицы, для которых установлен другой пользователь. Часто это root, такое случается когда редактируют таблицы от имени root.


Таблицы с некорректными правами могут успешно обрабатываться, проблемы обычно дают о себе знать после перезапуска MySQL.


Причины ошибки InnoDB: Unable to lock ./ibdata1, error: 11 исправлены.



MySQL после корректировки прав должен корректно запуститься, также при этом необходимо проверить логи на предмет поврежденных таблиц, при их наличии — восстановить. Процесс восстановления описан в этом материале.

Сказать спасибо