Възстановяване на база данни в даден момент от времето

Теория за реализиране на „time machine“ за MySQL бази данни

1. Включва се mysql bin log с данните (ако не е пуснат вече)
2. Прави се нов потребител за dump на данни само (тази стъпка не е задължителна)

примерно user dumper, pass AmHzqA9s3f6CsNGb,
privileges: SELECT, LOCK TABLES

3. Дневен бакъп на базата данни на потребителя – пълен, примерна дата
2009-07-20 05:00:00. Трябва да се правят отделни бакъпи на всички бази данни, тоест ако са много се прави списък преди това със show databases или друг подобен метод. Базата данни се заключва за запис за времето на dump (обикновено 1-3 секунди), така че датата е ок да се вземе точно преди старт на dump-а

> mysqldump -u dumper -pAmHzqA9s3f6CsNGb test01 > test01.sql

файла се запазва по един или друг начин някъде. За по-параноичните бази данни може да не е автоматично а да е ръчно, чрез ключа на клиента (същото важи за restore на данните). Възможно е да се прави бакъп еднократно при първия login на потребител с неговата парола или key

4. Възстановяване на базата в точно определен момент.

Желателно е да не се трие директно потребителската база данни и да се импортва там, а да се направи нова с уникално име, и съответно при успешно импортиране, да се преименува.

процедира се по следния начин:

4.1 Изисква се restore на данните от дата 2009-07-21 12:43:00 на база данни test01
4.2 Създава се временна таблица, примерно „3e7705498e“, и се запомня името
4.3 Restore-ва се във временната таблица от съответния дневен бакъп, на тази позиция данните са пълните данни до 2009-07-20 05:00:00
4.4 Проверява се точно в кой mysql-bin лог файл съществува дата 2009-07-20 05:00:00,
примерно mysql-bin.000016, ако има други и те се указват един след друг, по следния начин:

> mysqlbinlog mysql-bin.000016 mysql-bin.000017 -s  –start-datetime „2009-07-20 05:00:00“ –stop-datetime „2009-07-21 12:43:00“ –database test01 -r output.sql

4.5 полученият изход се execute-ва във временната база. При евентуални грешки се връща съобщение за грешка.

4.6 при успешно импортиране, се изтрива потребителската база и временната се преименува на test01. В началото докато всичко се изчисти може да не се трие базата а да се слага префикс TEMP_test01 за debug.

Това е теорията. Сега вече остава всеки да си го имплементира 🙂

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *