Предотвратить сбои 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), более сложный - с большей вероятностью обнаружит ошибку и сложнее устранить неполадки и т. Д.