Войти
ПрограммированиеФорумОбщее

Backup базы пользователей

Страницы: 1 2 Следующая »
#0
1:28, 15 ноя. 2019

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

Просто, данных много, дау около 100к, это десятки гб в месяц.

Как быть ???? Я не большой спец по базам, по этому, буду рад любым идеям!


#1
12:06, 15 ноя. 2019

FDsagizi
> Как быть ????
Вот так.

#2
(Правка: 1:00) 0:59, 16 ноя. 2019

Если данных всего десятки ГБ в месяц, то какая проблема просто бэкапит хранить на локальной машине? 10 гигигов в месяц -> 120 гигов в год. Диска хватит на пару лет...

#3
11:47, 16 ноя. 2019

Ну например как-то так:

mysqldump.exe -u root -p --all-databases > "D:\BACKUP\AllDataBases.sql"

#4
12:38, 16 ноя. 2019

FourGen
> mysqldump.exe -u root -p --all-databases > "D:\BACKUP\AllDataBases.sql"

Я ничего не путаю, что при этом база залочится и всякие UPDATE и INSERT будут стоять в очереди?
Ну и база, для игры с DAU 100к скорее всего что-то весит и, вполне вероятно, что будет бэкапиться 10-20-30+ минут. Т.е. по факту игра каждый день будет останавливаться на ощутимое время?

#5
22:46, 16 ноя. 2019

>andrey.mesheryakov
Вы этот вопрос не уточняли.

#6
23:03, 16 ноя. 2019

Как вариант, настроить репликацию, бекап снимать с реплики. Там пусть хоть на несколько часов блокируется, лишь бы до следующего бекапа успевала догнать мастер

#7
(Правка: 23:15) 23:12, 16 ноя. 2019

А софт для бекапа купить не судьба?

Например: ссылка
Вроде помню там для бизнеса не дорого стоит... что то 50-60К (руб)

P.S. не тут вроде уже с оплатой в год... но у них помню была версия покупаешь и пользуешься.

#8
(Правка: 4:32) 4:30, 17 ноя. 2019

andrey.mesheryakov
> Я ничего не путаю, что при этом база залочится и всякие UPDATE и INSERT будут стоять в очереди?
> ...
> Т.е. по факту игра каждый день будет останавливаться на ощутимое время?

--no-locking

но я бы 100 раз подумал, чтобы эту опцию использовать :)

И ещё про объём.
(как имхо, 100К в день, это как-то овер дофига. Но это не дофига, если в базе храняться бинарные данные. А если бинарные данные в ней всё-таки храняться, то можно начать с того, чтобы реализацию переписать)

#9
9:45, 17 ноя. 2019

FourGen
> Вы этот вопрос не уточняли.
Не понимаю, к чему эта фраза. Ты дал пример, который блокирует базу. По факту - кладет игру.

#10
9:50, 17 ноя. 2019

skalogryz
> но я бы 100 раз подумал, чтобы эту опцию использовать :)
Если я правильно понимаю, то эта опция не на каждом типе таблиц работать будет.

>как имхо, 100К в день, это как-то овер дофига.
Ну вот повезло, налилось столько трафика.

Я бы сделал так - завел автоинкрементый индекс UID и руками проходил в скрипте в цикле -
SELECT * WHERE 'UID'=cycle_value
Ну и в файл бы складывал.

Ну и да, топик стартер ни разу ничего не написал в теме. Ему как-то меньше всех интересно :)

#11
16:22, 17 ноя. 2019

andrey.mesheryakov
> Я бы сделал так - завел автоинкрементый индекс UID
Мда.

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


FDsagizi
> буду рад любым идеям!
Самая правильная идея - нанять спеца.

#12
(Правка: 17:18) 17:17, 17 ноя. 2019

9К720
>> Я бы сделал так - завел автоинкрементый индекс UID
> Мда.
А что именно смущает?

>Снимать бакапы надо специальным софтом.
Называем скрипт, который делает бэкап - "специальным софтом"
>Автоматически.
Ставим задачу в крон.

>С реплики, как уже заметили, естественно. Сразу же после снятия бакапа, его надо накатывать на прод-копию и проверять.
Ага. Т.е. у топик-стартера есть игра, которая лайв. И вот он захотел бэкап.
И вместо того, что бы за пол-часа написать скрипт, который решает задачу, ему предлагают -

Поднять реплику
Настроить специальный софт
Поднять прод-копию игры
И научить ее как-то проверять все сэйвы

Ну не знаю...

#13
(Правка: 18:02) 17:39, 17 ноя. 2019

andrey.mesheryakov
> И вместо того, что бы за пол-часа написать скрипт, который решает задачу, ему
> предлагают -
Не решает твой скрипт задачу бакапа. Никак.

andrey.mesheryakov
> А что именно смущает?
То что твоя идея - говно. То что у тебя нет опыта. Шансов написать нормальную систему для бакапов с нуля без опыта, не больше, чем с нуля без опыта сделать движок ММОРПГ на энтузиазме без багов

Завтра у тебя добавится таблица или поменяется поле, и ты забудешь это поменять в скрипте, и "бакап-скрипт-за-полчаса" у тебя эту таблицу собирать не будет.  Не надо изобретать велосипеды, если ты не знаешь как вообще все должно работать. Потому что детских болячек и косяков у своего решения - будет куча. Глупые ошибки и люди поумнее тебя делали, не стоит просто так выбрасывать их опыт.

Например твое решение, с автоинкрементальным уидом, будет терять большую часть данных. Объяснить почему? Потому что ты таким образом не соберешь апдейты и удаления. А еще оно не будет обеспечивать консистентность, если не остановишь базу. А еще, после накатывания бакапов ты будешь руками править заново везде уиды, иначе у тебя duplicate key exception везде попрут, когда на восстановленную базу польются свежие данные. Либо у тебя будут ошибки накатывания данных, из которых большая часть - ожидаемые (когда ты пытаешься в базу из бакапа вставить запись с уидом, который в базе уже есть)и на этом фоне ты реальные ошибки не заметишь. И еще много чего.

andrey.mesheryakov
> Поднять реплику
> Настроить специальный софт
> Поднять прод-копию игры
> И научить ее как-то проверять все сэйвы
Естественно. А как иначе? Бэкап - он по определению нужен для того, чтобы было что восстаналивать в случае факапа.
Для этого.
1. Бэкап надо снять.
2. Снять его надо так, чтобы не затронуть базу (помнишь, у этого форума была проблема, когда он каждую ночь на несколько часов ложился, потому что бакапы снимались?).
3. Надо быть уверенным, что те 10 гигов что ты снял, в случае факапа реально можно накатить, и после этого все будет работать. Потому что ты легко можешь столкнуться с ситуацией, когда обнаружишь, что у тебя последний реальный бакап был полгода назад (и то, не со всеми данными), а после этого у тебя каждый месяц снималось 10 гигов на диске, забитых нулями. И это должно так же делаться скриптами, каждый раз. Чтобы отлаживать ошибки в скрипте накатывания бакапа в рабочее время, неторопясь попивая кофе, а не в диком кранче, когда телефоны и мессенджеры разрывает ненависть пользователей.

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

#14
18:11, 17 ноя. 2019

9К720
> То что твоя идея - говно.
Согласен. Почему-то я думал в ключе, что надо бэкапить данные с одной ( или нескольких, главное что их число не меняется ) таблицы, структура таблицы не меняется и консистентность не важна.

Если задача более общая - то да, моя идея не очень... точнее вообще не применима.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее