Samuel Corradi

Blog

Backup de bases MySQL - mysqlhotcopy

A partir de hoje vou iniciar mais uma série de tutoriais sobre desenvolvimento. A vez é do MySQL, ou melhor, backup de bases MySQL.

Vou abordar três ferramentas (mysqlhotcopy, mysqldump e ZRM) que permitem fazer o backup, incluindo a restauração. Vamos lá:

mysqlhotcopy

Para fazer backups de bases MyISAM ou ARCHIVE, podemos utilizar o aplicativo MySQL Hot Copy (mysqlhotcopy) desenvolvido inicialmente por Tim Bunce.

Esse aplicativo é um script em Perl que copia fisicamente os arquivos do banco. Ele utiliza de comandos como LOCK TABLES, FLUSH TABLES travando cada tabela no momento que ela está sendo copiada (evitando assim cópias inconsistentes), e usa cp ou scp para fazer o backup de forma muito rápida e depois destrava as tabelas automaticamente.

Na verdade, mysqlhotcopy é a forma mais rápida de se fazer backups de bases MySQL. Veja como funciona:

Entendo os comandos
# mysqlhotcopy -u=<usuario> -p=<senha> <base> </caminho/onde/salvar>

Pode-se copiar mais de uma base ao mesmo tempo:

# mysqlhotcopy -u=<usuario> -p=<senha> <base> <baseN> </caminho/onde/salvar>

Pode-se fazer o backup de determinada tabela da base de dados apenas separando por um '.' (ponto). Note que é possível usar uma expressão regular para definir o nome da(s) tabela(s):

# mysqlhotcopy <base./regex/>

Para usar a expressão regular como negação usamos '~' (til):

# mysqlhotcopy <base./~regex/>

Se quiser mudar a base para outro servidor, use:

mysqlhotcopy --method=scp -u=<usuario> -p=<senha> <base> <usuario-ssh>@<servidor-ssh>:</caminho/onde/salvar>
Alguns parâmetros

O mysqlhotcopy possui alguns parâmetros muito úteis. Podemos, por exemplo, fazer backup de uma base sem substituir o backup feito anteriormente com o parâmetro --allowold. Veja a lista com alguns (não todos) parâmetros:

Option Description
--addtodest Não renomeia o diretório de destino (se ele existir); apenas adiciona os arquivos nele
--allowold Não aborda se o diretório de destino já existe. Renomeia ele com o sufixo _old
--checkpoint=db_name.tbl_name Insere entradas de checkpoint
--debug Escreve um log de debug
--dryrun Reporta as ações sem executa-las
--help Exibe o help
--host=host_name Conecta ao servidor indicado
--keepold Não deleta um diretório anterior (renomeado) quando termina
--noindices Não inclui arquivos de índices completos no backup
--password[=password] Indica a senha para conectar na base
--port=port_num Porta TCP/IP para ser usada na conexão
--quiet Não exibe mensagens (exceto erros)
--regexp Copia todas bases que casa com a expressão regular passada
--resetmaster Reseta o log binário após travar todas tabelas
--resetslave Reseta o master.info após travar todas tabelas
--socket=path Para conexões ao localhost
--tmpdir=path Diretório temporário
--user=user_name, Usuário utilizado para se conectar a base
--version Exibe a versão do aplicativo
Fazendo o backup

No exemplo abaixo, faço a cópia da base 'teste' mantendo o backup antigo (--keepold) e renomeando essa base antiga (se ela existir) para nome-da-base_old (--allowold).

# mysqlhotcopy -u root -p minhasenha teste /backup/database --allowold –keepold

Observe que agora, dentro do diretório de backup, temos uma pasta com o mesmo nome da base de dados. Lá dentro temos os arquivos que compõe a base (*.frm, *.MYD, *.MYI e db.opt com os parâmetros da base).

Restaurando

Para restaurar um backup feito com o mysqhotcopy, basta copiar os arquivos do diretório de backup para o diretório da base de dados MySQL (geralmente em /var/lib/mysql/nome_da_base.

Para garantir que não terá problemas, é prudente parar o MySQL antes de restaurar (copiar) os arquivos. Depois de copiá-los, basta iniciar o MySQL novamente.

A parte ruim

Por ser feito em Perl, o mysqlhotcopy necessita do módulo perl-DBD. Se você está usando o Ubuntu (ou o Debian) provavelmente não terá problemas com isso (eu nunca tive).

Outra parte, já mencionada, é que o mysqlhotcopy só faz backup de bases MyISAM ou ARCHIVE. Se sua base for InnoDB, use o mysqldump (que será o próximo a ser abordado aqui).

Outra opção é usar a ferramenta Percona XtraBackup que faz backups “quentes” de bases InnoDB (funciona com MySQL 5.0 e 5.1) e é totalmente free. A Oracle também possui o InnoDB Hot Backup. Mas, adivinhem, é pago!

Incluir comentário






0 mensagens enviadas

Últimos posts:

Destaques:

PHP Coupé - Desenvolvimento rápido e reaproveitável vForm - Validador universal de formulários

Programming and design by Samuel Corradi