Əsas səhifə > MySQL administration, MySQL backup and recovery > incremental backup-innobackupex

incremental backup-innobackupex

incremental backup nədir?
increment yəni davam etmə, artırma.
Deyək ki, biz bir Bazar günü full backup almışıq full backup həcmi olub bizdə 50GB. Adlandırırıq bunu base_backup.
Bazar ertəsi biz full backup almağın bir mənası var mı? incremental backup məhz burda kömək olur.Yəni biz yalnız bazar günündən bazar ertəsinə qədər olan dəyişikliklərin backup-ını alırıq. bunu da adlandırırıq incremental_backup_1 və həcmi olur 5GB.
Daha sonra Çərşənbə axşamı bazar ertəsindən həmin vaxta qədər baş vermiş dəyişikliklərin backup-ını alırıq onu da adlandırıq incremental_backup_2 , həcmi 3GB və.s bu şəkildə irəliləyirik. Və restore gərəkli olsa bütün increment-ləri base_backup-da birləşdirib restore edirik.
Bu şəkildə biz hem storage-ə qənaət edirik həm də backup alma müddətinə.
Base backup:

[root@sh ~]# innobackupex --user=root --password=12345 /home/shahriyar/data/base_backup --no-timestamp
.
.
.
innobackupex: Backup created in directory '/home/shahriyar/data/base_backup'
innobackupex: MySQL binlog position: filename 'mysql-bin.000002', position 107
121229 14:41:26  innobackupex: completed OK!

əgər base_backup direktoriyasındakı xtrabackup-checkpoints faylına baxsaq o zaman full backup-ın alındığından tam əmin olarıq:

QEYD: full physical backup -dan fərqli olaraq incremental backup almaq məqsədilə biz prepare etmirik. Yəni əgər yuxarıdakı kimi full backup(base backup)-dan dərhal sonra biz prepare etsək o zaman incremental backup ala bilməyəcik.
prepare addımını biz yalnız restore lazım olanda edirik. Yəni deyək ki 2 incremental backup-dan sonra restore lazım olsa prepare edib , restore edirik

Sınaq üçün base backup(full backup)-dan sonra bir table yaradaq və ona 3 insert verək:

CREATE TABLE test_table2 (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(15) DEFAULT NULL,
  surname varchar(20) DEFAULT NULL,
  PRIMARY KEY (id)
);

mysql> insert into test_table2(name,surname) values('Elmar','Huseynov'),('Ziya','Bunyadov'),('Rail','Rzayev');
Query OK, 3 rows affected (0.26 sec)
Records: 3  Duplicates: 0  Warnings: 0

test_table2 və onda olan 3 row base_backup-da yoxdur.
Davam edək.
İncremental backup 1:

[root@sh ~]# innobackupex --user=root --password=12345 --incremental /home/shahriyar/data/incremental_backup1 --incremental-basedir=/home/shahriyar/data/base_backup --no-timestamp
.
.
.
innobackupex: Backup created in directory '/home/shahriyar/data/incremental_backup1'
innobackupex: MySQL binlog position: filename 'mysql-bin.000002', position 633
121229 16:29:04  innobackupex: completed OK!

Yenə də xtrabackup-checkpoints faylına baxdıqda aydın görünür:

Yadımıza salaq ki, full backup-dan sonra biz bir table yaratdıq və 3 insert verdik, belə nəticə çıxarmaq olar ki bizim incremental_backup1 məhz bu dəyişikliyi özündə saxlayır.
incremental_backup1-dən sonra yenə sınaq üçün həmin table-a 3 əlavə insert verək:

mysql> insert into test_table2(name,surname) values('Fəxrəddin','Şahbazov'),('İsmət','Qayıbov'),('Tofiq','İsmayılov');
Query OK, 3 rows affected (0.18 sec)
Records: 3  Duplicates: 0  Warnings: 0

Və daha sonra da incremental_backup2-ni icra edək.
İncremental backup 2:

[root@sh ~]# innobackupex --user=root --password=12345 --incremental /home/shahriyar/data/incremental_backup2 --incremental-basedir=/home/shahriyar/data/incremental_backup1 --no-timestamp
.
.
.
innobackupex: Backup created in directory '/home/shahriyar/data/incremental_backup2'
innobackupex: MySQL binlog position: filename 'mysql-bin.000002', position 951
121229 16:44:46  innobackupex: completed OK!

xtrabackup-checkpoints faylına bir daha baxırıq.

Bu fayla 3 dəfə baxmışıq və hər dəfə to_lsn-də artma müşahidə etmişik. Bəs nədir bu LSN:
Each InnoDB page (usually 16kb in size) contains a log sequence number, or LSN. The LSN is the system version number for the entire database. Each page’s LSN shows how recently it was changed.

Bir daha ümumiləşdirmə aparaq. Deməli biz base_backup-dan sonra cədvəl yaratdıq və ora 3 insert etdik. bu 3 insert bizim incremental_backup1-dədir. incremental_backup1-dən sonra da 3 insert etdik və deməli son 3 insert-də incremental_backup2-dədir. Və son nəticədə əgər biz restore etmək istəsək o zaman teorik olaraq deyə bilərik bizdə 1 table və 6 row olmalıdır elə deyil mi? Gəlin sınayaq. Bunun üçün bütün aldığımız backup-ları prepare etməliyik.
DİQQƏT! bütün incremental backup-lar prepare olunduqdan sonra base_backup-da birləşdirilir və son nəticədə biz restore-u base_backup-dan edirik

Preparing base_backup:

[root@sh ~]# innobackupex --apply-log --redo-only /home/shahriyar/data/base_backup
.
.
.
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
121229 17:09:50  InnoDB: Starting shutdown...
121229 17:09:51  InnoDB: Shutdown completed; log sequence number 5462136332
121229 17:09:51  innobackupex: completed OK!

Prepare and apply incremental_backup1 to base_backup:

[root@sh ~]# innobackupex --apply-log --redo-only /home/shahriyar/data/base_backup --incremental-dir=/home/shahriyar/data/incremental_backup1
.
.
.
121229 17:15:42  innobackupex: completed OK!

Prepare and apply incremental_backup2 to base_backup:

[root@sh ~]# innobackupex --apply-log /home/shahriyar/data/base_backup --incremental-dir=/home/shahriyar/data/incremental_backup2
.
.
.
121229 17:18:52  innobackupex: completed OK!

ən sonda da base_backup-ı bir daha prepare edirik və restore-a tam hazır vəziyyətə gətiririk.

[root@sh ~]# innobackupex --apply-log /home/shahriyar/data/base_backup
.
.
.
121229 17:21:41  innobackupex: completed OK!

Vəssəlam.backup-ımız restore üçün hazır vəziyyətə gətirilmişdir.

İndi belə çıxır ki əgər biz test üçün yaratdığımız cədvəli test_table2-ni drop etsək və aldığımız backup-dan restore etsək son nəticədə bizdə 6 row-luq test_table2 cədvəli olacaq elə deyil mi? Sınayaq:

mysql> drop table test_table2;
Query OK, 0 rows affected (0.25 sec)

mysql> select * from test_table2;
ERROR 1146 (42S02): Table 'backup_test.test_table2' doesn't exist

Restore mərhələsi:

[root@sh ~]# systemctl stop mysqld.service
[root@sh ~]# mkdir /tmp/mysql
[root@sh ~]# mv /var/lib/mysql/* /tmp/mysql
[root@sh ~]# ls /var/lib/mysql
[root@sh ~]# innobackupex --copy-back /home/shahriyar/data/base_backup
.
.
.
innobackupex: back to original InnoDB log directory '/var/lib/mysql'
innobackupex: Finished copying back files.
121229 17:28:55  innobackupex: completed OK!
[root@sh ~]# chown -R mysql:mysql /var/lib/mysql
[root@sh ~]# systemctl start mysqld.service

Və yoxlayaq:

mysql> select * from test_table2;
+----+-------------+-------------+
| id | name        | surname     |
+----+-------------+-------------+
|  1 | Elmar       | Huseynov    |
|  2 | Ziya        | Bunyadov    |
|  3 | Rail        | Rzayev      |
|  4 | Fəxrəddin   | Şahbazov    |
|  5 | İsmət       | Qayıbov     |
|  6 | Tofiq       | İsmayılov   |
+----+-------------+-------------+
6 rows in set (0.08 sec)

Təbriklər 6 row və test_table2 bərpa olunmuşdur🙂

Beynəlxalq məsləhət:
Böyük proyektlərdəki təcrübələrdən belə nəticə çıxarmaq olar ki, əcnəbilər:
1. həftədə 1 dəfə məsələn bazar günləri full logical backup alırlar.
Həftənin digər günləri də binary log vasitəsilə incremental backup alırlar.
Making logical backup-binary log,mysqldump (part 2)
2. Həftədə 1 dəfə full logical backup-la bərabər həmçinin full physical backup alirlar.
Və həftənin digər günləri də bu yazıda göstərildiyi kimi incremental backup alırlar.
Və dolayısı ilə elə bir nəticə əldə edirlər ki, heç bir şəkildə zərrə qədər məlumat itgisi baş vermir. Misal üçün facebook:
Facebook making Hybrid Incremental MySQL Backups

Təşəkkürlər🙂

  1. Hələlik heç bir şərh yoxdur
  1. No trackbacks yet.

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

%d bloqqer bunu bəyənir: