2014-03-20 3 views
1

Иногда таблицы в базе данных mySQL сбой после перезапуска сервера или после потерянного соединения с базой данных. Это произошло несколько раз за последние 3-4 недели. Это, как сообщение об ошибке выглядит следующим образом:Автоматически восстанавливать таблицу db после сбоя или переключиться на InnoDB

145 - Таблица «./xxx/sessions' помечен как поврежденный и должен быть отремонтировали выбрать значение из сессий, где sesskey = „60fa1fab3a3d285cfb7bc1c93bb85f64“и срок>» 1395226673' [ТЭП STOP]

до сих пор это были столы „сессии“ и „whos_online“, которые врезались. Если я отремонтирую таблицы в phpmyadmin, он снова будет работать нормально

После последней аварии я изменил «сеансы» от MyISAM до InnoDB. В таблице «whos_online» по-прежнему используется MyISAM.

Я использую osCommerce 2.2 rc2a, и я ищу любые мысли и предложения по этому вопросу.

Одним из решений может быть изменение обеих этих таблиц на InnoDB, поскольку он должен быть самовосстановлением. Это хорошая или плохая идея?

Еще один будет иметь их в MyISAM и сделать что-то подобное с PHP-файлом, который эхо сообщения об ошибке:

if $error contain "is marked as crashed and should be repaired" 
run a table repair script 

бы, что быть хорошей или плохой идеей?

Вот мой сервер спецификации База данных: MySQL 5.5.36-ХЛЛ PHP Версия: 5.3.15

+0

Знаете ли вы разницу между MyISAM и InnoDB? Вероятно, это ответ на вопрос, почему вы должны или не должны менять движок таблицы. – Namphibian

+0

Я проделал некоторое чтение об этом в последние дни, но я до сих пор не знаю, как это повлияет на изменение. Я видел, что osCommerce v3.0 использует только Innodb, и Magento (не во всех, atleaste некоторые magento-магазины) использует InnoDB. Поэтому прямой ответ был бы очень оценен. –

ответ

0

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

Если у вас есть только небольшой веб-сайт, все варианты хороши. MyISAM немного быстрее (иногда), в то время как InnoDB предоставляет некоторые расширенные функции. Если сервер достаточно силен, вы, скорее всего, не столкнетесь с проблемами. В большинстве случаев я бы придерживался InnoDB, поскольку он учитывает согласованные данные и выдает ошибки, если файлы повреждены, в отличие от таблиц MYISAM, которые используются, а затем иногда вызывают ошибки в производстве ...

Но если что-то сильно ломается, это требует больше усилий, чтобы заставить MySQL работать с InnoDB, если он не будет автоматически. Существуют разные InnoDB recovery modes, которые доступны только в оболочке вашего сервера и требуют изменения файла конфигурации, запуска от сервера вручную, чтения его вывода и, возможно, выполнения некоторых других действий. Если у вас нет какой-либо информации об этих проблемах, вы можете захотеть использовать MyISAM. Сервер всегда запускается, и если таблица полностью сломана, вам может потребоваться импортировать резервную копию. Но это проще, чем редактирование файлов конфигурации и чтение выходных данных базы данных и т. Д.

Смежные вопросы