domingo, 9 de junho de 2013

Percona Xtrabackup / innobackupex processo de backup e restauração

Original post: http://anothermysqldba.blogspot.com/2013/06/percona-xtrabackupinnobackupex-backup.html

Este é um exemplo muito simples de como usar Percona Xtrabackup / innobackupex 

Este MariaDB só tem o banco de dados mundial em como um exemplo de dados. 
Isso tudo pode ser programado, mas por agora é para fins de demonstração. 

Criar um backup completo: 

MariaDB [(none)]> create database Start_Of_Demo; -- Just here for the demo
Query OK, 1 row affected (0.00 sec)


[root@Fedora64 src]# innobackupex --no-lock --parallel=4 --user=root --extra-lsndir=/usr/local/src/incremental_last_checkpoint/ --no-timestamp /usr/local/src/fullbackup/

xtrabackup: Transaction log of lsn (1597964) to (1597964) was copied.

innobackupex: Backup created in directory '/usr/local/src/fullbackup'
130609 15:41:39 innobackupex: Connection to database server closed
130609 15:41:39 innobackupex: completed OK!

[root@Fedora64 src]# ls -al fullbackup/
total 18472
drwxr-xr-x. 6 root root 4096 Jun 9 15:41 .
drwxr-xr-x. 6 root root 4096 Jun 9 15:49 ..
-rw-r--r--. 1 root root 260 Jun 9 15:41 backup-my.cnf
-rw-r-----. 1 root root 18874368 Jun 9 15:41 ibdata1
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 world
-rw-r--r--. 1 root root 13 Jun 9 15:41 xtrabackup_binary
-rw-r-----. 1 root root 89 Jun 9 15:41 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Jun 9 15:41 xtrabackup_logfile

Criar um backup incremental:

MariaDB [(none)]> create database incremental_1; -- Just here for the demo
Query OK, 1 row affected (0.00 sec)

[root@Fedora64 src]#innobackupex --incremental --no-lock --parallel=4 --no-timestamp --user=root --incremental-basedir=/usr/local/src/incremental_last_checkpoint/ --extra-lsndir=/usr/local/src/incremental_last_checkpoint/ /usr/local/src/incremental/

xtrabackup: Transaction log of lsn (1597964) to (1597964) was copied.

innobackupex: Backup created in directory '/usr/local/src/incremental'
130609 15:47:20 innobackupex: Connection to database server closed
130609 15:47:20 innobackupex: completed OK!

[root@Fedora64 src]# ls -al incremental
total 64
drwxr-xr-x. 7 root root 4096 Jun 9 15:47 .
drwxr-xr-x. 6 root root 4096 Jun 9 15:49 ..
-rw-r--r--. 1 root root 260 Jun 9 15:47 backup-my.cnf
-rw-r-----. 1 root root 16384 Jun 9 15:47 ibdata1.delta
-rw-r-----. 1 root root 44 Jun 9 15:47 ibdata1.meta
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 incremental_1
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 world
-rw-r--r--. 1 root root 13 Jun 9 15:47 xtrabackup_binary
-rw-r-----. 1 root root 93 Jun 9 15:47 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Jun 9 15:47 xtrabackup_logfile 


Crie outro backup incremental:

MariaDB [(none)]> create database incremental_2;-- Just here for the demo
Query OK, 1 row affected (0.00 sec)

[root@Fedora64 src]# innobackupex --incremental --no-lock --parallel=4 --no-timestamp --user=root --incremental-basedir=/usr/local/src/incremental_last_checkpoint/ --extra-lsndir=/usr/local/src/incremental_last_checkpoint/ /usr/local/src/incremental_2/

xtrabackup: Transaction log of lsn (1597964) to (1597964) was copied.

innobackupex: Backup created in directory '/usr/local/src/incremental_2'
130609 15:49:49 innobackupex: Connection to database server closed
130609 15:49:49 innobackupex: completed OK!
[root@Fedora64 src]# ls -al incremental_2
total 68
drwxr-xr-x. 8 root root 4096 Jun 9 15:49 .
drwxr-xr-x. 6 root root 4096 Jun 9 15:49 ..
-rw-r--r--. 1 root root 260 Jun 9 15:49 backup-my.cnf
-rw-r-----. 1 root root 16384 Jun 9 15:49 ibdata1.delta
-rw-r-----. 1 root root 44 Jun 9 15:49 ibdata1.meta
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 incremental_1
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 incremental_2
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 world
-rw-r--r--. 1 root root 13 Jun 9 15:49 xtrabackup_binary
-rw-r-----. 1 root root 93 Jun 9 15:49 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Jun 9 15:49 xtrabackup_logfile 


Agora você deve manter isso em mente.
  • Você banco de dados, claro, tem que ser desligado.
    • Se você estiver fazendo uma restauração, é provável que ele caiu de qualquer jeito
  • O diretório de dados deve estar vazio.

Verifique se o servidor está desligado, em seguida, limpar o nosso diretório de dados.

[root@Fedora64 src]# ps -ef | grep mysql
root 4538 1940 0 15:54 pts/2 00:00:00 grep --color=auto mysql

[root@Fedora64 src]# ls -al /var/lib/mysql/
total 28724
drwxr-xr-x. 8 mysql mysql 4096 Jun 9 15:53 .
drwxr-xr-x. 43 root root 4096 Jun 8 19:41 ..
-rw-rw----. 1 mysql mysql 16384 Jun 9 15:53 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Jun 9 15:53 aria_log_control
-rw-r--r--. 1 mysql mysql 18874368 Jun 9 15:53 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Jun 9 15:53 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Jun 9 15:17 ib_logfile1
drwx------. 2 mysql mysql 4096 Jun 9 15:43 incremental_1
drwx------. 2 mysql mysql 4096 Jun 9 15:48 incremental_2
drwxr-xr-x. 2 mysql mysql 4096 Jun 9 15:16 mysql
drwxr-xr-x. 2 mysql mysql 4096 Jun 9 15:16 performance_schema
drwx------. 2 mysql mysql 4096 Jun 9 15:40 Start_Of_Demo
drwxr-xr-x. 2 mysql mysql 4096 Jun 9 15:16 world

[root@Fedora64 src]# rm -Rf /var/lib/mysql/*

Agora você deve manter isso em mente. Quando você cria seus backups e seguintes backups incrementais, você terá que restaurar o backup completo e depois aplicar todos os backups incrementais. Portanto, não pense que você pode fazer um backup completo de uma tarde apenas restaurar a partir do último backup incremental. Tenha sempre em mente quantos backups incrementais que você pode dar ao luxo de manter diante de outro backup completo é necessária.

Para restaurar apenas o backup completo:

innobackupex --copy-back /usr/local/src/fullbackup/

innobackupex: Starting to copy InnoDB log files
innobackupex: in '/usr/local/src/fullbackup'
innobackupex: back to original InnoDB log directory '/var/lib/mysql'
innobackupex: Finished copying back files.

130609 15:54:57 innobackupex: completed OK!

[root@Fedora64 src]# ls -al /var/lib/mysql/
total 18456
drwxr-xr-x. 6 mysql mysql 4096 Jun 9 15:54 .
drwxr-xr-x. 43 root root 4096 Jun 8 19:41 ..
-rw-r--r--. 1 root root 18874368 Jun 9 15:54 ibdata1
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 world


[root@Fedora64 mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.31-MariaDB MariaDB Server


Que faz o backup completo, mas eu fiz backups incrementais depois disso. Então ele vai ter que ser desligado eo diretório de dados limpo. Por quê? Você tem que aplicar os backups incrementais para o pleno depois restaurá-lo. É feito como mostra o seguinte exemplo:



innobackupex --apply-log --redo-only /usr/local/src/fullbackup/
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130609 15:57:59 InnoDB: Starting shutdown...
130609 15:58:00 InnoDB: Shutdown completed; log sequence number 1597964
130609 15:58:00 innobackupex: completed OK!

Agora vamos aplicar o primeiro diretório incremental. Você pode ver no exemplo abaixo que o diretório incremental_1 é agora aplicado no diretório FullBackup. Este não era o caso antes.

innobackupex --apply-log --redo-only /usr/local/src/fullbackup/ --incremental-dir=/usr/local/src/incremental/
130609 15:58:42 innobackupex: completed OK!
[Root @ Fedora64 src] # ls-al FullBackup /
total de 20.520
drwxr-xr-x. 7 root root 09 de junho de 4096 15:58.
drwxr-xr-x. 6 root root 09 de junho de 4096 15:49 ..
-Rw-r - r -. 1 root root 260 09 de junho 15:41 backup-my.cnf
-Rw-r -----. 1 root root 18874368 09 de junho 15:58 ibdata1
drwxr-xr-x. 2 root root 09 de junho de 4096 15:58 incremental_1
drwxr-xr-x. 2 root root 09 de junho de 4096 15:41 mysql
drwxr-xr-x. 2 root root 09 de junho de 4096 15:41 performance_schema
drwxr-xr-x. 2 root root 09 de junho de 4096 15:41 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 09 de junho mundo 15:41
-Rw-r - r -. 1 root root 13 09 de junho 15:41 xtrabackup_binary
-Rw-r -----. 1 root root 89 09 junho xtrabackup_checkpoints 15:58
-Rw-r -----. 1 root root 2097152 09 de junho 15:58 xtrabackup_logfile

Agora vamos aplicar o segundo diretório incremental. Você pode ver no exemplo abaixo que o diretório incremental_2 é agora aplicado no diretório FullBackup. Este não era o caso antes.
innobackupex --apply-log /usr/local/src/fullbackup/ --incremental-dir=/usr/local/src/incremental_2/
innobackupex: Cópia '/ usr/local/src/incremental_2/Start_Of_Demo/db.opt' para '/ usr / local / src / FullBackup / Start_Of_Demo / db.opt'
130609 16:00:09 innobackupex: concluído OK!

[Root @ Fedora64 src] # ls-al FullBackup /
total de 20.524
drwxr-xr-x. 8 root root 4096 09 de junho às 16:00 h.
drwxr-xr-x. 6 root root 09 de junho de 4096 15:49 ..
-Rw-r - r -. 1 root root 260 09 de junho 15:41 backup-my.cnf
-Rw-r -----. 1 root root 18874368 09 de junho 16:00 ibdata1
drwxr-xr-x. 2 root root 09 de junho de 4096 15:58 incremental_1
drwxr-xr-x. 2 root root 09 de junho de 4096 16:00 incremental_2
drwxr-xr-x. 2 root root 09 de junho de 4096 15:41 mysql
drwxr-xr-x. 2 root root 09 de junho de 4096 15:41 performance_schema
drwxr-xr-x. 2 root root 09 de junho de 4096 15:41 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 09 de junho mundo 15:41
-Rw-r - r -. 1 root root 13 09 de junho 15:41 xtrabackup_binary
-Rw-r -----. 1 root root 89 09 de junho 16:00 xtrabackup_checkpoints
-Rw-r -----. 1 root root 2097152 09 de junho 15:58 xtrabackup_logfile


Agora vamos aplicar o diretório de backup completo. Você pode ver no exemplo abaixo que o diretório incremental_2 é agora aplicado no diretório FullBackup. Este não era o caso antes.

[root@Fedora64 src]# rm -Rf /var/lib/mysql/*
[Root @ Fedora64 src] # innobackupex - copy-back / usr / local / src / FullBackup /
[Root @ Fedora64 src] # chown-R mysql: mysql / var / lib / mysql

Tudo agora está restaurado e disponível:

[root@Fedora64 mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.31-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
Start_Of_Demo |
incremental_1 |
incremental_2 |
| mysql |
| performance_schema |
world |
+--------------------+

Links disponíveis para referência.