Назад | Перейти на главную страницу

MySQL не запустился из-за большого количества таблиц InnoDB?

У меня около 6000 таблиц InnoDB в 15 базах данных, и я использую innodb_file_per_table, Я обнаружил, что каждый раз, когда я перезагружаю сервер Ubuntu, MySQL не запускается с ошибкой ..

Version: '5.1.56-rel12.7-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Percona Server (GPL), 12.7, Revision 224)
111106  5:09:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./db1/tbl182.ibd
InnoDB: File operation call: 'open'.

Поскольку имя файла проблемной таблицы (например, tbl182.ibd) не всегда одно и то же, поэтому я подозреваю, что MySQL что-то делает со всеми таблицами?

Тем не мение, когда я перезапускаю с помощью команды (sudo /etc/init.d/mysql restart), MySQL может быть успешно запущен. Это очень странно!

Мой Env: версия MySQL: 5.1.56-rel12.7-log (Ubuntu 10.04 LTS + Percona)

Обновить:

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

Я уже изменил /etc/init.d/mysql на жестко заданное значение ulimit -n 50000, все еще не помогает при создании массивных таблиц.

Проблема не в ограничении количества дескрипторов файлов. Это будет ошибка 24, а не 13. Проблема в том, что написано: разрешения. Я видел это десятки раз, и даже когда люди думают, что все настроено правильно и имеет правильные разрешения, это разрешения ЕСТЬ, каждый раз, и кто-то всегда выясняет, что они что-то пропустили :) У вас либо права установлены неправильно или у вас есть что-то вроде следующего:

  • В каталоге более высокого уровня установлено странное разрешение, такое как / ограничено. (Иногда это имеет значение.)
  • У вас есть другой процесс, например два экземпляра mysqld, который работает и мешает работе с привилегиями.
  • SELinux или AppArmor мешает.

Вы «решили» проблему, удалив большое количество таблиц - я не думаю, что это действительно решение. Вероятно, вы просто удалили некоторые таблицы, для которых были установлены неправильные разрешения :)

Это проблема AppArmor? Это может быть что-то вроде запуска или остановки AppArmor между перезагрузкой и попыткой запустить его вручную.

Примерно в одно и то же время проверьте свой системный журнал.

Я бы порекомендовал вам проверить разрешение на запись для пользователя БД в каталог, где находятся ваши файлы БД.