2010-11-15 3 views
1

У меня возникли проблемы с базой данных, в которой неоднократно возникали разбитые таблицы. К счастью, достаточно легко исправить, восстановив разбитый стол, но вряд ли удастся наблюдать за сбоем таблицы (или сообщить клиенту), а затем исправить ее. Аварии, как правило, происходят после внесения изменений в базу данных, к которой клиент имеет доступ через CMS.предотвращение сбоев таблицы MyISAM mysql

Я заметил, что последний раз стол разбился о том, что он ссылается на число - что-то вроде 57 из 89; который я тогда заметил в Кардинальности для первичного ключа. Объединив 2 и 2 вместе, я обнаружил, что оптимизация таблицы была каким-то образом связана, и поэтому я думал, что, оптимизируя таблицу регулярно, например, после обновления, это поможет предотвратить сбои. Это правда или мне удалось получить 73, а не 4?

Я могу отправлять функции MYSQL в базу данных, когда клиент вносит изменения через PHP, поэтому помощь с этой точки зрения будет отличной.

Любая дополнительная помощь при столкновении с авариями будет принята с благодарностью.

+1

Таблицы InnoDB не сбой (а точнее, они восстанавливаются автоматически при запуске сервера). Вы уверены, что это не MyISAM? – Mchl

+0

кричит, ты на этом прав. Я смотрел на совершенно другую БД, когда писал это, так что проверял неправильный, немой ход. – andyface

ответ

0

НЕ верно оптимизируют таблица будет препятствовать таблице сбоев

на самом деле, U НЕ ДОЛЖНО бежать оптимизируют стол слишком часто (таблица запертыми), хотя предназначен для уплотнения свободных данных

попробовать mysqlcheck -C

или mysqlcheck -c

+0

спасибо за информацию об оптимизации.Я не упоминал, что я в основном работает с PHP, поэтому я ищу решение, которое работает с этим, так что оно существенно автоматизировано, когда клиент вносит изменения. – andyface

+0

@ andy-score: возможен с использованием чистого синтаксиса mysql -> http://dev.mysql.com/doc/refman/5.1/en/check-table.html – ajreal

+0

Посещен сегодня на сервере клиента: при запуске 'OPTIMIZE TABLE', стол разбился ... Пришлось запустить «REPAIR TABLE», чтобы избавиться от него. Конечно, это был MyISAM, и я настоятельно рекомендовал клиенту использовать InnoDB вместо этого, поскольку @Mchl предложил (и, как я делаю это на своих собственных серверах). – Yvan

0

MyISAM таблицы, как правило, повреждается по следующим причинам:

  • ошибка в MySQL или внешних проблем (аварии ОС, жесткий выключения питания, из-за нехватки памяти OS глушения), что приводит к туздЫ, чтобы выйти ненормально
  • ошибка в двигателе хранения MyISAM
  • Запуск двух экземпляры туздЫ на одних и тех же данных, в то же время
  • неисправности оборудования

Так что лучшее, что можно сделать, чтобы избежать коррупции, чтобы иметь хороший ИБП, работают наиболее стабильные версии ОС и MySQL, убедитесь, что ваш оборудование работает правильно, убедитесь, что у вас есть достаточная сумма (чтобы избежать убийств OOM и избегать соблазнов дьявола вообще, ошибки часто попадают в условиях отсутствия памяти), и быть хорошим мальчиком - не убивайте mysqld с сигналом 9, а при перезапуске убедитесь, что старый экземпляр mysqld спустился, прежде чем вы начнете новый.

Возможно, вы также захотите принять меры для борьбы с коррупцией. Регулярно создавайте резервные копии данных и делайте таблицы достаточно маленькими, чтобы избежать длительного времени восстановления.

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

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