Возможности потери данных MySQL MyISAM?

Многие сайты и скрипты по-прежнему используют MySQL вместо PostgreSQL. У меня есть пара блогов с низким приоритетом, и я не хочу переходить на другую базу данных, поэтому я использую MySQL.

Проблема в том, что они на VPS с малым объемом памяти. Это означает, что я не могу включить InnoDB, поскольку он использует около 80 МБ памяти только для загрузки. Поэтому я должен рискнуть запустить MyISAM.

Имея это в виду, на какую потерю данных я смотрю с MyISAM? Если бы произошло отключение питания, когда кто-то сохранял сообщение в блоге, я бы просто потерял это сообщение или всю базу данных ?

На этих недорогих устройствах я могу потерять некоторые недавние комментарии или запись в блоге, если не будет потеряна вся база данных.


person Xeoncross    schedule 27.05.2011    source источник
comment
Как мало памяти дает вам ваш VPS? Возможно, вы захотите рассмотреть возможность использования другого хоста. Dreamhost имеет 600 МБ VPS за 30 долларов в месяц. Чего, по их словам, достаточно для топ-100 блогов. Если 30 долларов слишком много, возможно, ваши данные не стоят столько, и вам следует просто настроить скрипт для ежедневного (или чаще) резервного копирования через дамп MySQL.   -  person Kibbee    schedule 28.05.2011
comment
Спасибо, но я не хочу платить 30 долларов в месяц всего за 600 МБ. Кроме того, нет причин увеличивать мою оперативную память, если я смогу найти способ заставить MyISAM работать.   -  person Xeoncross    schedule 28.05.2011
comment
stackoverflow.com/search?q=myisam+corrupt   -  person Denis de Bernardy    schedule 30.05.2011


Ответы (6)


Вы можете найти следующую интересную статью о производительности MySQL:

Для меня это не только блокировки таблиц. Блокировки таблиц — это только одно из ограничений MyISAM, которое необходимо учитывать при его использовании в рабочей среде. Особенно, если вы переходите из «традиционных» баз данных, вы, вероятно, будете шокированы поведением MyISAM (и из-за этого поведением MySQL по умолчанию) — оно будет повреждено неправильным завершением работы, оно завершится с частичным выполнением оператора, если определенные ошибки обнаружил и тд...

http://www.mysqlperformanceblog.com/2006/06/17/using-myisam-in-production/

person Jon Black    schedule 31.05.2011
comment
Скрытые искажения. Если это может быть ошибка операционной системы с памятью или ошибки MySQL, но может произойти повреждение, которое долгое время останется незамеченным с помощью механизма хранения MyISAM. Это скрытое повреждение может впоследствии привести к сбоям в работе, неправильным результатам запроса и дальнейшему повреждению данных. - person Xeoncross; 31.05.2011

MyISAM не совместим с ACID, поэтому ему не хватает надежности. Это действительно зависит от того, что стоит больше... память для использования InnoDB или время простоя. MyISAM, безусловно, является жизнеспособным вариантом, но что требуется вашему приложению от уровня базы данных? Использование MyISAM может усложнить жизнь из-за его ограничений, но в некоторых сценариях MyISAM может подойти. Использование только логических резервных копий mysqldump прервет вашу службу из-за их блокировки. Если вы используете двоичное ведение журнала, вы можете создать их резервную копию, чтобы получить добавочные резервные копии, которые можно воспроизвести, чтобы облегчить восстановление, если что-то повреждено в таблицах MyISAM.

person eroomydna    schedule 02.06.2011
comment
+1 В конце концов, я бы предпочел заплатить за больше памяти, чем иметь дело с простоями. Если бы была только одна или две редко записываемые таблицы, это было бы одно, но с таблицами +10 я просто не должен рисковать. Даже SQLite был бы лучшим выбором. - person Xeoncross; 04.06.2011

В руководстве по MySQL указаны типы событий. которые могут повредить вашу таблицу, и есть статья, объясняющая, как использовать myisamchk для восстановления таблиц. Вы даже можете отправить запрос, чтобы исправить это.

REPAIR TABLE table;

Однако нет информации о том, могут ли некоторые типы сбоев быть «неисправимыми». Это тип потери данных, который я не могу допустить, даже если делаю резервные копии.

person Xeoncross    schedule 30.05.2011

При сбое сервера ваш первичный ключ автоинкремента может быть поврежден, поэтому идентификаторы ваших сообщений в блоге могут прыгать с 122, 123, 75912371234, 75912371235 (где сервер рухнул после 123). Я видел, как это происходит, и это некрасиво.

person preinheimer    schedule 30.05.2011

Вы всегда можете получить другой хост в той же VLAN, которая подчинена вашей базе данных, в качестве резервной копии, это значительно снизит риск. Я считаю, что у вас есть только следующие варианты:

  1. Получите больше оперативной памяти для своего сервера или отключите некоторые службы
  2. Посмотрите, есть ли у вашего хоста общий хостинг базы данных любого типа в VLAN, который вы можете использовать за небольшую плату.
  3. Регулярно делайте резервные копии и будьте готовы к худшему.
person Geoffrey    schedule 03.06.2011

По моему скромному мнению, с MyISAM не происходит потери данных.

Риск потери данных из-за отключения электроэнергии связан с отключением питания, а не с механизмом хранения базы данных.

person J. Bruni    schedule 27.05.2011
comment
Что ж, я предполагаю, что в информационную таблицу, заголовок или строку MyISAM может быть внесена какая-то важная запись, которая оставит этот файл в недопустимом состоянии. Как MyISAM справляется с этим? - person Xeoncross; 28.05.2011
comment
Хм, извините, я действительно не знаю. Я считаю, что MySQL/MyISAM надежен, но я игнорирую этот уровень детализации реализации. Я бы проверил документацию MySQL... или даже исходный код. - person J. Bruni; 28.05.2011
comment
Это верно только в том случае, если вы игнорируете существование серверных частей, которые не теряют данные. Да, непосредственной причиной потери было отключение электроэнергии, но ни в коем случае нельзя сказать, что MyISAM может привести к потере данных, когда есть возможность написать бэкэнд, который сохранит данные, и вы игнорируете, что есть и другие проблемы. с MyISAM. - person Andrew Aylett; 03.06.2011