Percona Xtrabackup backup incremental baseado em backup completo preparado

3

Eu quero criar um backup de hora em hora do nosso banco de dados MySQL para um sistema de teste usando o Percona XtraBackup.

É possível preparar o $ BACKUPBASE e usar este backupbase preparado como base para o seguinte backup incremental (usando a opção incremental-lsn)?

Meus planos são:

  • faça um backup completo uma vez em $ BACKUPBASE
  • depois, a cada hora:

    • faça um backup incremental em cima de $ BACKUPBASE
    • integre o backup incremental em $ BACKUPBASE usando

      innobackupex --apply-log $BACKUPBASE --incremental-dir=$INCREMENTALDIR
      innobackupex --apply-log $BACKUPBASE
      
    • remova $ INCREMENTALDIR

Para ser mais específico:

  • e a opção --redo-log. Quando devo especificar essa opção neste cenário?
  • você pode aplicar um backup incremental a um $ BACKUPBASE preparado
por PaulSmecker 26.02.2014 / 15:44

1 resposta

5

Não, porque o --apply-log mencionado acima não atualizará o LSN em xtrabackup_checkpoints, assim, cada próximo backup incremental copiará as páginas modificadas desde o último backup completo. Não é isso que você quer alcançar

UPD

Para implementar seu cenário, você precisa:

  1. Faça backup completo

    innobackupex --no-timestamp /path/full
    
  2. Salve o último LSN

    # cat /path/full/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 1887987291
    last_lsn = 1887987291
    compact = 0
    
    to_lsn='grep to_lsn /path/full/xtrabackup_checkpoints | awk '{ print $3 }''
    
  3. Aplicar o log REDO do xtrabackup

    innobackupex --apply-log --redo-only /path/full/
    
  4. Faça um backup incremental

    innobackupex --no-timestamp --incremental /path/inc/ --incremental-lsn=$to_lsn
    
  5. Salvar último LSN

    # cat /path/inc/xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 1887987291
    to_lsn = 1887987291
    last_lsn = 1887987291
    compact = 0
    
    to_lsn='grep to_lsn /path/inc/xtrabackup_checkpoints | awk '{ print $3 }''
    
  6. Aplicar alterações incrementais e log de REDO

    innobackupex --apply-log --redo-only --incremental-dir=/path/inc /path/full/
    
  7. Remover diretório com backup incremental

    rm -r  /path/inc
    

Repita 4-7 quantos você precisar. / path / full irá conter a última versão do seu banco de dados.

Quando você deseja restaurar o banco de dados

  1. Conclua a aplicação de logs (= criar log REDO):

    innobackupex --apply-log /path/full
    
  2. Copie a cópia de backup para o datadir

    mv /path/full/* /var/lib/mysql
    
  3. Corrigir permissões (Verifique se as opções em /path/full/backup-my.cnf são as mesmas que em /etc/my.cnf (/etc/mysql/my.cnf para o Debian))

    chown -R mysql /var/lib/mysql
    
  4. Inicie o MySQL

    /etc/init.d/mysql start
    
por 26.02.2014 / 17:39