Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Восстановление таблицы MYSQL
цитата
31/10/09 в 12:21
 Alexandur
Здравствуйте.

Проблема:
есть база около 1Гб, в ней таблица на 300.000 записей (smf_messages от скрипта http://www.simplemachines.org/ )

Таблица периодически ломается, выдавая: Database Error: Duplicate entry '335223' for key 'PRIMARY'
File: /usr/home/user/www/***/Sources/Subs-Post.php
Line: 1535

Пробовал восстанавливать myisamchk -r /var/db/mysql/gimcnuk_db0/smf_messages.MYI
Ошибка: myisamchk: error: 5 when fixing table
MyISAM-table '/var/db/mysql/gimcnuk_db0/smf_messages.MYI' is not fixed because of errors

Запустил safe-recover, часа за два счётчик натикал 100.000 записей, т.е. процесс ещё часа на 4.

Проблема усугубляется ещё и тем, что отключен mysql сервер и не работают другие базы.

Вопросы:
1. Можно ли прервать процесс восстановления без последствий?
2. Можно ли ускорить процесс? Читал, что можно выделить больше RAMа для процесса (например myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...) но есть опасения.
3. Можно ли восстанавливать без остановки сервера? Например, скопировать .MYD .MYI .frm в другое место, запустить myisamchk и после этого перенести обратно?

Спасибо.
цитата
31/10/09 в 13:11
 axelded
1) Можно
2) Если есть возможность, залить на "чистый" mysql сервер, чтоб не мешать работе остальных баз...
А там уже экспериментируй с параметрами.
3) Попробуй REPAIR TABLE
http://dev.mysql.com/doc/refman/5.1/en/repair-table.html
Ну и желательно предварительно забэкапить файлики базы.

Последний раз редактировалось: axelded (31/10/09 в 13:15), всего редактировалось 1 раз
цитата
31/10/09 в 13:13
 Alexandur
Цитата:
By default, it has the same effect as myisamchk --recover tbl_name

Что уже пробовал.
цитата
31/10/09 в 13:19
 axelded
я там пост поправил чуток)
цитата
31/10/09 в 13:35
 Еugene
меня самого этот smf запарил

имхо всё-таки останови сервер, скопируй MYI в другую папку, сервер опять запусти, а файл скопированный почекай
myisamchk -o file.MYI
myisamchk -r file.MYI
цитата
31/10/09 в 13:53
 axelded
А после запуска желательно сделать
Обслуживание форума -> Найти и исправить любые ошибки.
index.php?action=repairboards
цитата
31/10/09 в 14:41
 Еugene
+1
у меня часто после восстановления таблиц smf не поднимается полностью - в админке инструменты фиксили всё и всегда
цитата
31/10/09 в 16:48
 axelded
если не выйдет - стукай в аську, помогу
цитата
31/10/09 в 17:01
 Dr.Syshalt
gimcnuk писал:

есть база около 1Гб, в ней таблица на 300.000 записей


После того, как как-нибудь вытащишь оттуда данные, сделай себе большое одолжение - мигрируй с MyISAM на InnoDB. Сколько я слышал, что "по идее MyISAM надежен и индексы не должны биться", бла-бла... тем не менее, только после того, как года 3 назад перешел на innodb везде, куда дотянулся, забыл о myisamchk и всех этих прелестях. В т.ч. и на интенсивно используемых базах с сотнями тысяч записей. Просто работает, и все.
цитата
31/10/09 в 21:59
 axelded
Без innodb - "MySql это записная книжка с sql интерфейсом" (с) smail101.gif
цитата
01/11/09 в 01:27
 ibiz
Dr.Syshalt писал:
После того, как как-нибудь вытащишь оттуда данные, сделай себе большое одолжение - мигрируй с MyISAM на InnoDB. Сколько я слышал, что "по идее MyISAM надежен и индексы не должны биться", бла-бла... тем не менее, только после того, как года 3 назад перешел на innodb везде, куда дотянулся, забыл о myisamchk и всех этих прелестях. В т.ч. и на интенсивно используемых базах с сотнями тысяч записей. Просто работает, и все.


InnoDB работает намного дольше и грузит больше памяти чем MyISAM, хотя вроде пентарх с этого форума утверждает обратное...
цитата
01/11/09 в 01:32
 ibiz
кстати глянул самую большую базу 1кк записей 2.5Гб работает на MyISAM, сбоев ниразу небыло
цитата
01/11/09 в 02:06
 Sterx
ibiz писал:
InnoDB работает намного дольше и грузит больше памяти чем MyISAM

в мануале так вроде написано.
цитата
01/11/09 в 02:16
 ibiz
Sterx писал:
в мануале так вроде написано.


та оно и на практике так оказалось, мож конечно у меня руки кривые и я неумею правильно писать запросы, впрочем сложных всего 2-3 запроса, остальные простые... хотел перейти именно из-за расхваленной надежности на больших базах, рано или поздно базы станут большими...
читал также про какую-то новую базу xtradb на основе innodb, которую толкает гугл
цитата
01/11/09 в 09:19
 Alexandur
Хм, мнения разделились.
Запросы там предустановленные, рискну предположить, что наиболее оптимизированные.
Будем читать форум поддержки, на предмет перехода.
цитата
01/11/09 в 14:43
 ibiz
gimcnuk: ну ты отпиши результаты, если перейдешь, какие нагрузки, работает быстрее/медленее... кстати на многих виртуалах поддержки innodb нет, видимо у хостеров много проблем из-за нее
хотя по тестам сайта http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-…ks-part-1/
innodb показывает результаты лучшие чем myisam
цитата
01/11/09 в 17:27
 Dr.Syshalt
ibiz писал:

innodb показывает результаты лучшие чем myisam


Зависит от того, как бенчмаркить. Это же не просто "быстрее-медленнее". Если ты только bulk-инсерты делаешь - MyISAM отработает быстрее. Поскольку там много фичей отсутствует - ни транзакций, но foreign keys, проверять меньше и т.д. Но как только ты интенсивно апдейтить начинаешь базу, которую одновременно многие читают - тут начинает сказываться тот факт, что у innodb блокировка идет на уровне рядов, в то время, как MyISAM - блокирует на уровне таблицы. И вот тут все сильно меняется.

И вообще, без настроек под конкретные нагрузки рассуждать о том, что быстрее, что медленнее, нет просто смысла. Базы данных - это не десктопное приложение "поставил и работает".. наверное, DBA оракловские получают не просто так свои немаленькие деньги. И innodb тоже надо уметь использовать. Просто странно ожидать, что у тебя база на сотни тыс. записей, никто никогда 5 минут не уделил продумыванию архитектуры, настройками - и все само работает с оптимальной скоростью и никогда не сбоит.

А так - да, innodb - просто шаг вперед и немалый, в сравнении с MyISAM. То есть с ней MySQL становится уже более-менее нормальной базой данных, а не тем не пойми что, чем он является с MyISAM. Но базы данных (сюрприз!) надо уметь использовать. Ну и хотя бы поучиться использовать explain. А если так использовать, как многие используют (bulk insert'ы с "autocommit on", селекты по rlike, селекты при полном отсутствии индексов) - то, да, наверное, проблемы будут меньше в случае использования "БД для чайников" ака MyISAM.

Что же до SMF - то да, лучше спросить у людей, пробовали ли. Я думаю, что там уж не совсем чайники софт писали, должно неплохо работать на innodb.
цитата
01/11/09 в 17:34
 Dr.Syshalt
ibiz писал:
кстати глянул самую большую базу 1кк записей 2.5Гб работает на MyISAM, сбоев ниразу небыло


Это, знаешь, как сказать "я два раза ездил пьяным и ничего плохого не случилось, значит - садиться за руль пьяным ничуть не опасно" )
MyISAM в принципе не создавалась для того, чтобы обеспечивать целостность данных. Там требования другие были - выжать максимум скорости даже на самых глупых и неоптимальных запросах.
цитата
01/11/09 в 17:36
 ibiz
Dr.Syshalt писал:

И вообще, без настроек под конкретные нагрузки рассуждать о том, что быстрее, что медленнее, нет просто смысла.


ты наверное невнимательно читал первый пост, конкретная задача бд под форум smf_messages от скрипта http://www.simplemachines.org/
а это что-то около 70% селектов 20% апдейтов и 10% инсертов с прочим мусором
цитата
01/11/09 в 17:47
 Dr.Syshalt
ibiz писал:
ты наверное невнимательно читал первый пост, конкретная задача бд под форум smf_messages от скрипта http://www.simplemachines.org/
а это что-то около 70% селектов 20% апдейтов и 10% инсертов с прочим мусором


Это ты, наверное, невнимательно читал - там еще писалось про то, что таблица периодически ломается icon_smile.gif Все-таки лучше, я думаю, иметь дело с базой, в которую если ты уж делаешь insert/update - то будешь уверен, что они там и останутся.

Насчет производительности же - сценарий форума вполне вписывается в сценарий производительности innodb. Многочисленные селекты с конкурентными апдейтами/инсертами. Разумеется, я не полезу сейчас смотреть, как именно запросы организованы в SMF - но надеюсь (почему-то), что они не забыли о том, что частые селекты делаются по индексам, и прочие элементарные вещи.

Если же не хватает производительности - то простой запрос к гуглу обнажает тот факт, что SMF умеет использовать memcached.
цитата
01/11/09 в 17:53
 ibiz
мне интересно для своего форума, с SMF ничего общего, кроме около 70% селектов 20% апдейтов и 10% инсертов ничего нет
и мне также интересна производительность как на малых базах так и на больших, и пока myisam выигрывает у innodb на практике, а не в теории
цитата
01/11/09 в 18:49
 Dr.Syshalt
ibiz писал:
и пока myisam выигрывает у innodb на практике, а не в теории


На практике человека, который, как я понимаю, не уделил вопросам оптимизации баз заметного времени - вполне возможно. Практика-то у всех разная. И у форума твоего могли быть запросы, которые выстраиваются в такой длинный ряд в show processlist и стоят, чего-то ждут. Если "и так работает", и ничего править неохота - ради бога. Просто не надо потом жаловаться, когда все это рухнет в один день и будешь сидеть и задаваться вопросом - стоит ли запускать myiasmchk на продакшене. Это как важные данные на FAT32 складывать - до первого выключения электричества.

Вот тут, кстати, хороший сравнительный анализ - в деталях и подробно.
цитата
01/11/09 в 19:19
 ibiz
спишу на неумение оптимизировать базы и экономию памяти вопреки надежности, может уже все изменилось со времен моих практических сравнений icon_smile.gif
цитата
02/11/09 в 11:21
 Pentarh
Я как профессиональный веб-программист, сисадмин и DB-architect вот что скажу. InnoDB очень пиздатый движок со многих точек зрения в теории.

Но его пиздатость резко заканчивается, когда даешь на 20-гигабайтную базу в сто таблиц 1500 QPS на двойном квадрокоре. Здесь всей его распиздатости приходит быстрый распиздец. Треды начинают зависать в произвольных состояниях (не-Locked!?), обрываться и пропускать (ага!!) запросы.

В общем я не хочу спорить, я это видел и этого мне было достаточно. При переходе обратно на MyISAM, сервер ведет себя более чем стабильно.
цитата
02/11/09 в 11:56
 Alexandur
На данный момент 2 против 1, что не надо трогать icon_smile.gif

Про периодичность я преувеличил, "ломается" второй раз, оба раза за прошедший месяц. Может совпадение.


Эта страница в полной версии