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á:
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:
# 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>
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 |
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).
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.
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:
Programming and design by Samuel Corradi