MySQL Enterprise Backup - Parte II

Posted by Emerson on 19:42 with No comments

Olá pessoal.

Continuando a série de posts sobre o MySQL Enterprise Backup, hoje irei demonstrar como criar um usuário com privilégios necessários para efetuar backups e efetuar backup full do banco de dados.

Instalando o MySQL em Ambiente Oracle Enterprise Linux
Instalando o MySQL Enterprise Backup

Com o MySQL Enterprise Backup é possível fazer backups dos seguintes modos:

Hot backups(Online)  - São executados enquanto o banco de dados está online.Esse tipo de backup não bloqueia operações de banco de dados normais, captura até mesmo as mudanças que ocorrem enquanto o backup está acontecendo.
Incremental Backup - Backup apenas das alterações de dados desde o ultimo backup full(completo).
Cold Backups -  Enquanto o banco de dados é interrompido.
Point Time Recovery (PITR) - Recuperação dos dados em um estado consistente exatamente como estava em uma determinada data e hora.(Uma hora antes por exemplo).

Entre os citados os hot backups são os mais utilizados, para evitar a interrupção do serviço, normalmente você executar um backup como de um escravo de replicação, o que pode ser interrompido sem derrubar todo o aplicativo ou site.

1 - Criando e configurando usuario de backup.

Por default não é necessário a criação do usuário, o usuário root poderia ser setado para essa operação, porém o DBA deve preocupar-se sempre com as questões de segurança do seu ambiente de banco de dados.
Os privilégios mínimos para o usuário do MySQL que mysqlbackup conecta como são:

 * RELOAD - Em todos os bancos de dados e tabelas;
 * CREATE,INSERT e DROP -  Nas tabelas mysql.ibbackup_binlog_marker, mysql.backup_progress e mysql.backup_history.
 * SUPER  - Usado para otimizar o bloqueio e minimizar os inconvenientes para processamento de dados.
Esse privilégio só é necessário para fazer backup de servidores MySQL 5.5 e superiores.
 * CREATE TEMPORARY TABLES  - Esse privilégio só é necessário para fazer backup de servidores MySQL 5.5 e superiores.
 * REPLICATION CLIENT - Para recuperar a posição do log binário, que é armazenada com o backup.

 Então vamos a prática:

[root@mysql-master ~]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.6.2-m5-log MySQL Community Server (GPL)


Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


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


mysql> GRANT RELOAD ON *.* TO dba@localhost;
Query OK, 0 rows affected (0.00 sec)


mysql> GRANT CREATE, INSERT, DROP ON mysql.ibbackup_binlog_marker TO 'dba'@'localhost';
Query OK, 0 rows affected (0.10 sec)


mysql> GRANT CREATE, INSERT, DROP ON mysql.backup_progress TO 'dba'@'localhost';
Query OK, 0 rows affected (0.00 sec)


mysql> GRANT CREATE, INSERT, DROP ON mysql.backup_history TO 'dba'@'localhost';
Query OK, 0 rows affected (0.00 sec)


mysql> GRANT REPLICATION CLIENT ON *.* TO 'dba'@'localhost';
Query OK, 0 rows affected (0.02 sec)


mysql> GRANT SUPER ON *.* TO 'dba'@'localhost';
Query OK, 0 rows affected (0.00 sec)


mysql> GRANT CREATE TEMPORARY TABLES ON mysql.* TO 'dba'@'localhost';
Query OK, 0 rows affected (0.04 sec)


mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


mysql>

Este ultimo comando FLUSH PRIVILEGES serve para que todas alterações referentes a ao acesso do servidor tenham efeito;

2 - Designando o local do Backup.

Todas as operações relacionadas a backup ou criar novos arquivos ou arquivos de referência existentes debaixo de um diretório específico  que contém dados de backup. Escolha o diretório de antecedência, em um sistema de arquivos com armazenamento suficiente.
(Pode até ser montado remotamente de um servidor diferente.) Você especifica o caminho para esse diretório com a opção --backup-dir para invocações  muitos do comando mysqlbackup.

Depois de estabelecer um cronograma regular de backup com trabalhos automatizados, é preferível manter cada backup dentro de um subdiretório timestamped  sob o diretório principal de backup. Para fazer o comando mysqlbackup criar esses subdiretórios automaticamente, especifique a opção --with-timestamp  cada vez que você executar mysqlbackup.

Para as operações de um tempo de backup, por exemplo, quando a clonagem de um banco de dados para configurar um slave de replicação, você pode especificar um novo diretório de cada vez, ou especificar a opção --force de mysqlbackup para substituir os arquivos antigos de backup.

3 - Efetuando o backup full 

Neste exemplo irei especificar algumas opções necessárias na linha de comando para fins de ilustração, porém essas configurações podem ser feitas no arquivo  e configuração do MySQL afim de padronizar o procedimento de backup.O diretorio padrão dos binários do MySQL Enterprise Backup encontra-se em /opt/mysql/meb-3.7/bin/.Então vamos ao que interessa;

[root@mysql-master backup]# /opt/mysql/meb-3.7/bin/mysqlbackup --user=dba  --with-timestamp --backup-dir=/backup backup-and-apply-log
MySQL Enterprise Backup version 3.7.0 [2011/12/19]
Copyright (c) 2003, 2011, Oracle and/or its affiliates. All Rights Reserved.


INFO: Starting with following command line ...
 /opt/mysql/meb-3.7/bin/mysqlbackup --user=dba --with-timestamp
        --backup-dir=/backup backup-and-apply-log


INFO: Got some server configuration information from running server.


IMPORTANT: Please check that mysqlbackup run completes successfully.
            At the end of a successful 'backup-and-apply-log' run mysqlbackup
            prints "mysqlbackup completed OK!".


--------------------------------------------------------------------
                       Server Repository Options:
--------------------------------------------------------------------
  datadir                          =  /var/lib/mysql/
  innodb_data_home_dir             =
  innodb_data_file_path            =  ibdata1:10M:autoextend
  innodb_log_group_home_dir        =  /var/lib/mysql/
  innodb_log_files_in_group        =  2
  innodb_log_file_size             =  5242880


--------------------------------------------------------------------
                       Backup Config Options:
--------------------------------------------------------------------
  datadir                          =  /backup/2012-04-28_22-43-51/datadir
  innodb_data_home_dir             =  /backup/2012-04-28_22-43-51/datadir
  innodb_data_file_path            =  ibdata1:10M:autoextend
  innodb_log_group_home_dir        =  /backup/2012-04-28_22-43-51/datadir
  innodb_log_files_in_group        =  2
  innodb_log_file_size             =  5242880


 mysqlbackup: INFO: Unique generated backup id for this is 13356638315973228
 mysqlbackup: INFO: Uses posix_fadvise() for performance optimization.
 mysqlbackup: INFO: System tablespace file format is Antelope.
 mysqlbackup: INFO: Found checkpoint at lsn 146245791.
 mysqlbackup: INFO: Starting log scan from lsn 146245632.
120428 22:43:51 mysqlbackup: INFO: Copying log...
120428 22:43:51 mysqlbackup: INFO: Log copied, lsn 146245791.
          We wait 1 second before starting copying the data files...
120428 22:43:52 mysqlbackup: INFO: Copying /var/lib/mysql/ibdata1 (Antelope file format).
 mysqlbackup: INFO: Preparing to lock tables: Connected to mysqld server.
120428 22:44:18 mysqlbackup: INFO: Starting to lock all the tables....
120428 22:44:18 mysqlbackup: INFO: All tables are locked and flushed to disk
 mysqlbackup: INFO: Opening backup source directory '/var/lib/mysql/'
120428 22:44:18 mysqlbackup: INFO: Starting to backup all files in subdirectories of '/var/lib/mysql/'
 mysqlbackup: INFO: Backing up the database directory 'base01'
 mysqlbackup: INFO: Backing up the database directory 'base02'
 mysqlbackup: INFO: Backing up the database directory 'base03'
 mysqlbackup: INFO: Backing up the database directory 'base04'
 mysqlbackup: INFO: Backing up the database directory 'base05'
 mysqlbackup: INFO: Backing up the database directory 'base06'
 mysqlbackup: INFO: Backing up the database directory 'base07'
 mysqlbackup: INFO: Backing up the database directory 'base08'
 mysqlbackup: INFO: Backing up the database directory 'base09'
 mysqlbackup: INFO: Backing up the database directory 'base10'
 mysqlbackup: INFO: Backing up the database directory 'base11'
 mysqlbackup: INFO: Backing up the database directory 'base12'
 mysqlbackup: INFO: Backing up the database directory 'base13'
 mysqlbackup: INFO: Backing up the database directory 'base14'
 mysqlbackup: INFO: Backing up the database directory 'base15'
 mysqlbackup: INFO: Backing up the database directory 'base16'
 mysqlbackup: INFO: Backing up the database directory 'base17'
 mysqlbackup: INFO: Backing up the database directory 'base18'
 mysqlbackup: INFO: Backing up the database directory 'base19'
 mysqlbackup: INFO: Backing up the database directory 'base20'
 mysqlbackup: INFO: Backing up the database directory 'base21'
 mysqlbackup: INFO: Backing up the database directory 'base22'
 mysqlbackup: INFO: Backing up the database directory 'certificacao'
 mysqlbackup: INFO: Backing up the database directory 'mysql'
 mysqlbackup: INFO: Backing up the database directory 'performance_schema'
 mysqlbackup: INFO: Backing up the database directory 'replication01'
 mysqlbackup: INFO: Backing up the database directory 'teste_slave'
 mysqlbackup: INFO: Backing up the database directory 'testerepli1'
 mysqlbackup: INFO: Copying innodb data and logs during final stage ...
 mysqlbackup: INFO: A copied database page was modified at 146245791.
          (This is the highest lsn found on page)
          Scanned log up to lsn 146247636.
          Was able to parse the log up to lsn 146247636.
          Maximum page number for a log record 7494
120428 22:46:05 mysqlbackup: INFO: All tables unlocked
 mysqlbackup: INFO: All MySQL tables were locked for 107.000 seconds
120428 22:46:05 mysqlbackup: INFO: Full backup completed!
 mysqlbackup: INFO: MySQL binlog position: filename mysql-bin.000003, position 612355039
 mysqlbackup: INFO: Backup created in directory '/backup/2012-04-28_22-43-51'
120428 22:46:05 mysqlbackup: INFO:  ibbackup_logfile's creation parameters:
          start lsn 146245632, end lsn 146247636,
          start checkpoint 146245791.
InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 Setting log file size to 0 5242880
Setting log file size to 0 5242880
120428 22:46:06 mysqlbackup: INFO: We were able to parse ibbackup_logfile up to
          lsn 146247636.
ibbackup: Last MySQL binlog file position 0 612355039, file name ./mysql-bin.000003
120428 22:46:06 mysqlbackup: INFO: The first data file is '/backup/2012-04-28_22-43-51/datadir/ibdata1'
          and the new created log files are at '/backup/2012-04-28_22-43-51/datadir/'
 mysqlbackup: INFO: System tablespace file format is Antelope.
120428 22:46:06 mysqlbackup: INFO: Full backup prepared for recovery successfully!


-------------------------------------------------------------
   Parameters Summary
-------------------------------------------------------------
   Start LSN                  : 146245632
   End LSN                    : 146247636
-------------------------------------------------------------


mysqlbackup completed OK!
[root@mysql-master backup]#

Observem que eu adicionei mais um comando o backup-and-apply-log, esse comando realiza backup para o diretório de backup e também realiza a operação de aplicar-log instantâneo no backup. O resultado disso é a cópia de segurança, que está pronto para restauração. Este comando produz sempre backup em modo não compactado.


Pronto! E isso ai galera espero que gostem!

Emerson Martins
DBA Jr

Referencias:
http://dev.mysql.com
Categories: