SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.06.2013 00:37:12

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Неожиданная поломка базы Mysql

Не так давно столкнулся с такой проблемой. Одна из таблиц в базе оказалась нерабочей. Дословно не скажу, т.к. прошло время, но примерная суть ошибки в том, что как бы такое могло случиться в следствии оптимизации (автоматической?).
Как уберечься от такой ситуации? Что если я храню какие-либо Важные данные, например, данные о наличии виртуальной валюты. Ведь взять и просто восстановить такие данные скажем прошлодневным бекапом не выход.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 07.06.2013 00:56:27

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Неожиданная поломка базы Mysql

Делайте бэкап и храните бинарный журнал с момента бэкапа. По бинарному журналу можно будет проиграть все изменение от бэкапа до заданного момента. Таблица MyISAM? Если требуется высокая надежность, лучше использовать транзакционное хранилище Innodb.

Неактивен

 

#3 07.06.2013 02:09:40

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Неожиданная поломка базы Mysql

Честно говоря с Innodb никогда не работал, привык к MyISAM.

Про бинарный журнал большое спасибо обязательно займусь.

Насколько я понял Innodb работает медленнее и больше грузит систему, но в отличие от MyISAM, имеет возможность бинарного журнала. Хотя при этом нашел и достаточно отрицательные отзывы, как например, http://www.pentarh.com/wp/2009/02/23/innodb-vs-myisam/. Учитывая, что речь на этом сайте касаются потери данных, то как-то уже нет уверенности в надежности Innodb. Как же оно на самом деле? Я бы хотел к примеру создать виртуальный счет, а потеря данных может вызвать серьезные проблемы.

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

При этом также из отличий нашел более или менее внятные следующие

MyISAM поддерживает сжатие таблиц в отличии от InnoDB
MyISAM имеет встроенные полнотекстный поиск в отличии от InnoDB
InnoDB поддерживает транзакции в отличии от MyISAM
InnoDB более надежна при больших объемах данных
InnoDB в теории немного быстрее

Если есть чем дополнить буду крайне признателен

Также для реализации виртуального счета все-таки разумнее использовать именно InnoDB из-за возможности использования транзакций (хотя раньше с ними никогда не сталкивался).

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


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 07.06.2013 12:12:25

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Неожиданная поломка базы Mysql

От потери данных можно защититься только резервным копированием. С InnoDB восстановление сложнее, но не стоит питать иллюзий о сохранности данных в MyISAM - вы начали с примера потери данных там.

FULLTEXT есть в Innodb начиная с MySQL 5.6 (но вы писали про денежные счета, в этой ситуации fulltext редко нужен).
Сжатие вообще не играет какой-то значимой роли в 99% случаев (учитывая влияние на производительность). По скорости InnoDB выигрывает при одновременных обращениях. Грузит систему - купите более мощный сервер - сейчас почти все подходят и проблемы с памятью и диском нет.

Неактивен

 

#5 07.06.2013 14:57:53

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Неожиданная поломка базы Mysql

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

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

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

А также не ясно в чем сложность восстановления данных из InnoDB, по сравнению с MyISAM?

Это то, что касается безопасности хранения данных и возможности их восстановления.

Также не очень ясен вопрос передачи данных такой информации, и как его правильно организовать. Особенно не ясен, из-за того, что я не очень знают тонкостей работы того или иного типа таблицы, да и mysql в целом. Например, не ясно каким образом InnoDB позволяет передавать данные одновременно. Насколько я понимаю MyISAM, все таки к примеру не позволит обновить или записать данные, пока это делает другой пользователь. С другой стороны именно возможность транзакций отмечается как необходимая именно для таких целей, и отсутствие транзакций как недостаток MyISAM. По логике вещей, если я открыл MyISAM таблицу на запись, то пока она не закроется, наверное никаких действий происходить не будет. И я могу свободно обновить всю нужную мне информацию. Что уже создает видимость какую-то надежности, но с другой стороны вариант с транзакциями выглядит более адекватным и главной он по большей части для этого и создан.
Также учитывая, что я не знаю, как работают сами транзакции, возможны ли там такие ситуации, что например я отправил данные на скажем сервер агрегатора, затем жду получения данных с него, если данные пришли, то обновляю таблицу и завершаю транзакцию. Не знаю, насколько это может понадобиться, но хотелось бы иметь об этом представление.

Это то, что касается безопасной передачи данных.

По поводу производительности, особых проблем я в целом не вижу, главное, чтобы вследствие плохой производительности сохранялись данные, те. она не влияла на безопасность и возможность восстановления. Если даже вследствие медленной работы InnoDB, вся проблема сводится к тому, что пользователю придется дольше ждать то, это не беда. Главное чтобы проблема ограничивалась этим.
А вот по поводу других различий от MyISAM и в частности FULLTEXT, вопрос касается не только того, чтобы обновлять финансовую информацию, но и того, чтобы использовать паралельно MyISAM и InnoDB, ведь сейчас таблицы у меня в MyISAM. Возможны ли какие-либо проблемы при их одновременом использовании, с чем они могут быть связаны, как их избежать, и что значит одновременное, т.е. одна база или одни сервер? Также различия интересуют, т.к. если скажем в таблице где финансовая информация FULLTEXT, мне не нужен, то в других он используется. И это может быть не FULLTEXT, может быть есть что-то еще что я не смогу использовать, и что окажется для меня неожиданностью.

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

Отредактированно platedz (07.06.2013 15:00:04)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#6 07.06.2013 19:54:29

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Неожиданная поломка базы Mysql

platedz написал:

Хотя при этом нашел и достаточно отрицательные отзывы, как например, http://www.pentarh.com/wp/2009/02/23/innodb-vs-myisam/.

Чушь 4 летней давности :-)

MyIsam отлично подходит для блога историй блондинки :-) Если вы храните информацию связанную с деньгами и денежными транзакциями, то MyIsam вам может припадать такие нежеланные сюрпризы, что вам потом не захочется его скорости :-) В MyIsam может крашнутся не вся таблица а определенные записи что усложняет обнаружение проблемы, и и за чего приложение например может подсчитывать слегка не правильно деньги :-)
К сожалению сверху написанное было неоднократно выявлено на личном 10 летнем опыте :-)
Удачи :-)

Неактивен

 

#7 07.06.2013 20:59:08

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Неожиданная поломка базы Mysql

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


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#8 07.06.2013 23:06:30

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Неожиданная поломка базы Mysql

Innodb поддерживает транзакции и в высокой степени защищает от потери данных. Работая с транзакциями нужно поменять подход к работе с базой - нужно понимать, что любая транзакция может откатиться, вернув все в состояние до транзакции. Приложение должно корректно обрабатывать эту ошибку. Для защиты от сбоя физического носителя используйте, например, soft raid.

Неактивен

 

#9 08.06.2013 10:40:40

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Неожиданная поломка базы Mysql

А какой сбой у Вас произошёл? У нас периодически бывает "Table marked as crashed" на табличке в несколько десятков гигабайт. Делаем OPTIMIZE TABLE, табличка поднимается со всеми данными и мы продолжаем работу с ней. С ситуацией потери данных без возможности восстановления пока ещё не сталкивались.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#10 08.06.2013 10:44:10

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Неожиданная поломка базы Mysql

Т.е. в моей ситуации мне действительно не хватало бинарного журнала. С другой стороны если он  бинарный журнал не доступен в MyISAM, можно как бы имитировать его самому, сделав ручной лог данных. Как Вы считаете?

Недоступен для Вас, как возможность ковырять конфиг MySQL? Серверу БД всё равно какие там таблички - MyISAM, InnoDB или вообще Blackhole, бинлог поддерживается на уровне сервера, так-что его можно включить в любой момент.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#11 08.06.2013 11:59:12

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Неожиданная поломка базы Mysql

Я не назову ошибку конкретно, но благодаря переводчику насколько помню могу описать ее как, произошла поломка в таблице в результате оптимизации возможно автоматической.

Если бинарный журнал есть в MyISAM, это хорошо. Я буду его использовать в любом случае. Просто где-то прочел, что бинарных журнал поддерживается InnoDB, и не поддерживает MyISAM.

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


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson