На одном сервере часто работают сайты использующие базы данных таблицы которых имеют различный тип: MyISAM и InnoDB. Таблицы InnoDB гораздо более эффективны с точки зрения оптимизации приложений, но работать с ними на уровне сервера баз данных сложнее. При этом с InnoDB чаще возникают ошибки — среди них InnoDB: Unable to lock ./ibdata1, error: 11
Лог всех данных касающихся работы MySQL пишется в один файл, в нем иногда можно видеть записи следующего типа:
Как исправить ошибку 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
Проверяем статус службы
systemctl status mysql
Также скорректировать права на таблицы можно вручную перейдя в /var/lib/mysql и выполнив chown mysql: на все базы данных и таблицы, для которых установлен другой пользователь. Часто это root, такое случается когда редактируют таблицы от имени root.
Таблицы с некорректными правами могут успешно обрабатываться, проблемы обычно дают о себе знать после перезапуска MySQL.
Причины ошибки InnoDB: Unable to lock ./ibdata1, error: 11 исправлены.
MySQL после корректировки прав должен корректно запуститься, также при этом необходимо проверить логи на предмет поврежденных таблиц, при их наличии — восстановить. Процесс восстановления описан в этом материале.