Fazendo (e restaurando) backup do MySQL via SSH e MySQLDump

Gustavo Paes, 15/11/2010

Serviços de hospedagem que tem SSH disponível para o cliente são uma benção. Alguns hosts não liberam esse acesso e você só vai perceber o erro que fez ao assinar o plano quando precisar do acesso SSH.

Um dos casos para que você precise do SSH é realizar backup de um banco de dados grande, por exemplo. Hoje fui fazer o backup de uma loja virtual hospedada no UOL Host através da própria administração do Magento. Já havia feito isso várias vezes, mas o banco cresceu de uma forma que o backup demora mais de 60 segundos. O resultado foi erro PHP indicando timeout.

Backup com mysqldump

A solução foi fazer backup usando o mysqldump, direto no servidor, sem problema de timeout, permissão e afins.

O comando é bem simples:

mysqldump --opt -h [servidor do banco] -u [usuario] -p [database] > backup.sql

Os parâmetros são:

  • -h servidor do banco indica o endereço do banco de dados. No caso do UOL Host pode ser algo como dbmy0001.whservidor.com, mas pode ser simplesmente localhost em outros;
  • -u usuario usuário de acesso;
  • -p indica que você irá digitar a senha após o comando;

Trocando as variáveis por valores reais, você terá um comando parecido com isso:

mysqldump --opt -h dbmy0021.whservidor.com -u gpaes -p lojaeCommerce > 2010-11-15.database.sql

Restaurando um backup

O processo de restaurar é tão simples quanto o de criar. Ao invés de usarmos o mysqldump, usaremos o próprio mysql e invertendo o sinal de caminho. Agora será do arquivo .sql para o banco de dados.

mysql  -h [servidor.mysql.com] -u [usuario] -p [database_name] < [arquivo-para-restaurar.sql]

Troque tudo o que estiver entre colchetes pelos dados de seu servidor e pronto. Backup restaurado sem dor de cabeça.

Automatizando o processo

Se eu não uso um determinado comando todo dia, acabo não lembrando mais dele. Para evitar ter que procurar o comando novamente, criei um arquivo .sh – semelhante ao .BAT do Windows – que faz isso para mim.

Já logado no SSH, digite:

cat > backup-mysql.sh
mysqldump -h [servidor] -u [usuario] -p [database] > backup-mysql.sql

Pressione [ctrl + z]

chmod +x backup-mysql.sh

Pronto. Da próxima vez que for fazer o backup basta logar no SSH e digitar: ./backup-mysql.sh e digitar a senha do usuário do banco de dados.

Veja mais sobre o mysqldump.