LINUX.ORG.RU
ФорумAdmin

mysql бекап и восстановление большой(150гб) базы.

 , ,


4

3

Добрый день. имелась связка slave-master, у мастер накрылся медным тазом рейд коннтролер.
в данный момент слейв работает за обе железки. нагрузка довольно велика.
суммарный размер базы порядка 150гб. все таблици в innodb.
чтобы её сдампить через mysqldump нужно порядка 1часа.
чтобы её залить на новый сервер нужно порядка 2 дней.
а развернуть реплику нужно к концу завтрашнего дня.
даунтайм не должен превышать 30 минут и то в ночное время.

может кто подскажет, как это лучше реализовать. как лучше сделать дампить и залить базу на новый мастер.


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



Последнее исправление: kam (всего исправлений: 1)

может есть сторонний софт для таких целей

Есть. Сам не пользовался, но в памяти всплывает что-то вроде percona xtra backup. Но кажется оно ускоряет только дамп. Впрочем не знаю.

Ещё есть хардкорный вариант — скопировать файлы баз.

Для ускорения заливки дампа можно временно отключить индексы, что-бы индекс не пересчитывался при каждом инсерте. Впрочем возможно сейчас это уже делается автоматически.

MrClon
()

Терпеть незаметно

А сделать нынешний slave мастером и реплицировать (условно) неделю в фоновом режиме нельзя?

Camel ☕☕☕
()

Банально: если запись не слишком интенсивна, то делаешь снапшот раздела, копируешь раздел, убираешь снапшот. mysqldump не нужен, даунтайм тоже (хотя если записи много — просядет).

чтобы её залить на новый сервер нужно порядка 2 дней.

Звучит бредово.

x3al
()
Последнее исправление: x3al (всего исправлений: 1)

Для начала следует выбросить мускуль и поставить марию на принимающей стороне.
Ну и вцелом пора уже переходить на нормальные облачные виртуалки, чтобы можно было на эти полчаса арендовать сколько надо ядер и iops, а не страдать от ограничения ресурсов.

Goury
()
Ответ на: Терпеть незаметно от Camel

как вариант, но если большие нагрузки, то лучше бинарно скопировать мускуль Xtrabuckup-ом и потом уже реплицировать.

ipeacocks
()

Сбэкапить базу, залить на мастер, сделать его слейвом, запустить репликацию, как завершится, то поменять мастер и слейв местами. А вообще, при таких условиях, может, надо задуматься о мастер-мастер?

turtle_bazon
()
Ответ на: комментарий от Goury

линк между серверам 1гбит
проц
[code]
# cat /proc/cpuinfo |grep name
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
[/code]
оперативы 32.
две такие железки, одна под мастер вторая под слейв.
ssd 300x2 в рейд1 adaptec

kam
() автор топика
Ответ на: комментарий от turtle_bazon

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

kam
() автор топика
Ответ на: комментарий от kam

Быстро развернуть бекап - это слейв, который сейчас на себя нагрузку принял, в ночное время отдайунтаймить и /var/lib/mysql или где там у тебя скинуть в tar файл. Потом запустить мускул, файлы по сети передать на починенный мастер. Мастер потом должен реплицировать то, что на слейв шло, т.е. слейв тоже должен быть настроен как мастер. А мастер как слейв. После того, как затянет всё, что с момента бекапа было изменено, запросы перенаправить на мастер, слейв сделать опять слейвом. Хотя, бинари логи можно и оставить, чтобы в следующий раз телодвижений было меньше. Только так видится.

turtle_bazon
()
Ответ на: комментарий от kam

ssd 300x2 в рейд1 adaptec

Я на linux серверах давно перешёл на софтварный рейд. Не без своих приколов, но не боится умиранция контроллера рейда.

turtle_bazon
()
Ответ на: комментарий от kam

Да у тебя вообще отличные условия. Тот tar файл менее чем за час зальётся на другой сервак.

turtle_bazon
()
Ответ на: комментарий от kam

мастер-мастер - давно уже думаю

Ну, чтобы было быстро, они должны будут быть в одной сети. И также их нужно не менее 3-х, чтобы мозг не раздвоился. :) Есть и и свои ограничения, конечно.

turtle_bazon
()
Ответ на: комментарий от turtle_bazon

вот я сейчас его и думаю поглядеть и потренироватся на тестовом стенде.

и да, мастер-слейв находятся в одной сети(192.168.х.х), в соседних стояках, пинг меньше 1мс.
вот наверно ночью буду снимать дамп перконой и tar`ом.

kam
() автор топика
Ответ на: комментарий от hidden_4003

ты процесс импорта базы mysql -uxxx -pxxx < dump.sql возьми в расчет. перекинуть то не проблема. а вот импортировтаь быстро - это попа.

kam
() автор топика
Ответ на: комментарий от kam

Так не надо импортировать. Просто файлы положи и всё ок будет. Правда, там будет то же, что и на том, некоторые настройки нужно будет перебить.

turtle_bazon
()
Ответ на: комментарий от kam

Зачем импортировать если

все таблици в innodb

достаточно сделать снапшот и скопировать файлы

hidden_4003
()
Ответ на: комментарий от kam

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

Goury
()
Ответ на: комментарий от Goury

Значит хреновый адаптек или хреновые ssd.

Написано же, что сгорел контроллер. То есть хреновый адаптек. Но и вообще, аппаратные контроллеры - буэээ... Хотя, иногда, в них есть смысл.

turtle_bazon
()

mysql размер базы порядка 150гб

Ни хрена себе. Mysql для таких БД не лучшее решение.

King_Carlo
()

все ответы кроме xtrabackup неверные

anonymous
()
Ответ на: комментарий от x3al

Сколько ошибок в слове postgresql.

У него этот процесс быстрее ?

AS 👍
()
Ответ на: комментарий от Alternating_Current

Ну так у тебя и ядер вдвое меньше и эсэсди вдвое меньше.
И база, возможно, не лучшим образом оптимизирована для разворотов.

Goury
()
Последнее исправление: Goury (всего исправлений: 1)

Тупо скопировать /var/lib/mysql с одного сервера на другой уже предлагали?

generator
()
Ответ на: комментарий от x3al

то делаешь снапшот раздела, копируешь раздел, убираешь снапшот

Не лучшее решение делать снапшот lvm, если ты о нём (а автор даже не сказал, что у него там LVM есть), на единственном оставшемся в живых сервере, снепшоты lvm умеют очень хорошо ложить I/O на сервере полностью до ребута.
Варианта тут только 2:
1. Копия /var/lib/mysql (предварительно надо не забыть запомнить позицию в бинлоге), как раз за полчаса скопируется, и будет получасовой даунтайм.
2. innobackupex. Даунтайма не будет, одни профиты. Единственное что вроде бы для этого нужен патченный перконой mysql, без него может не взлететь.

Prius
()
Последнее исправление: Prius (всего исправлений: 1)
Ответ на: комментарий от Prius

Эм... А зачем позицию запоминать?

Мастер останавливается, копия переливается на слэйв, потом - поднимаются оба сервера (если там кластер на pacemaker'е - ресурс запускается, и пофиг кто из них станет мастером а кто слэйвом - копии идентичны).

Давеча пришлось такое делать на 120ГБ БД, на которой произошел сплит брэйн в процессе апдейта (и некорректной остановки) pacemaker'а.

NiTr0
()
Последнее исправление: NiTr0 (всего исправлений: 1)

xtrabackup и никаких даунтаймов. тыщу раз так делал.

tazhate
()
Ответ на: комментарий от NiTr0

Эм... А зачем позицию запоминать?

Я рассматриваю такой вариант развития событий (как бы делал я, по крайней мере):
1. Мастер переводится в RO (запоминается позиция в бинлоге), и останавливается.
2. Делается локально копия /var/lib/mysql (чтоб быстрее).
3. Мастер снова запускается.
4. На вторую машину переливается сделанная копия /var/lib/mysql.
5. На второй машине запускается mysql (с параметром read-only) и делается слейвом на основе позиции из п.1.
6. Слейв догоняется, и после этого мастер переключается на этот слейв.
Такой подход минимизирует даунтайм и позволит избежать сплит-брейнов, когда у тебя поднимется сразу 2 мастера и всё сойдет с ума потенциально.

Prius
()
Последнее исправление: Prius (всего исправлений: 1)
Ответ на: комментарий от NiTr0

что ты имеешь в виду? Вдруг там у ОПа стоит haproxy, с round-robin балансировкой на мастеры, он же этого не уточнял, так что спокойно могут запросы политься в 2 мастера одновременно. В моей схеме сплитбрейна не случится 100% да ещё и даунтайм минимален (для способа без xtrabackup). А у тебя после поднятия второго мастера случится непонятно что, да ещё и часть запросов потеряется, если ты старый мастер предлагаешь просто прибить.

Prius
()
Ответ на: комментарий от Prius

Какой раунд-робин на мастеры, вы о чем? У ТСа стандартный мастер-слэйв. С каким-то CRM или его подобием для переключения мастер-слэйв.

NiTr0
()
Ответ на: комментарий от turtle_bazon

аппаратные контроллеры хорошая вещь, но когда они стоят 600-3000$, а когда покупают контроллер за 100 баксов естественно всё дохнет.

erzent
()
Ответ на: комментарий от turtle_bazon

те что стоят от 2000, тебе о своей смерти скажут заранее,а вот за 100 баксов сначала пару раз убьют рейды, а уже потом здохнут.

erzent
()
Ответ на: комментарий от erzent

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

turtle_bazon
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.