Предотвратить сбои MySQL таблицы MySQL

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

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

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

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

2 ответа

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

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

пытаться mysqlcheck -C

или же mysqlcheck -c

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

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

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

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

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

Другие вопросы по тегам