Isto é algo que eu sempre esqueço como se faz (sério).

Backup

Se for na máquina local:

$ mysqldump -u usuario -p myapp_production > myapp_production.sql
Enter password:

Se não usar a senha, basta remover a opção -p.

E se quiser por a senha na linha de comando:

$ mysqldump -u usuario --password="mypassword" myapp_production > myapp_production.sql

Backup Remoto

Como você notou o backup é gerado na saída padrão e feito um redirecionamento para myapp_production.sql.

$ ssh usuario@site-remoto.com 'mysqldump -u usuario --password="mypassword" myapp_production' | gzip > myapp_production.sql.gz

No exemplo acima nós acessamos o servidor remoto via ssh e executamos o backup com compactação (com o comando gzip), mas a “saída padrão” é na nossa máquina e com ela jogamos no arquivo myapp_production.sql.gz.

Para bancos pequenos eu faço o comando acima, mas em banco de dados grandes entro no servidor via ssh, faço o backup compactado e coloco para download via http ou ftp.

Restauação (Restore)

O comando para restauração é o mesmo de acesso a “shell” do mysql, com o myapp_production.sql em mãos:

$ mysql -u usuario --password="mypassword" myapp_production < myapp_production.sql

Se você ver o erro:

ERROR 1049 (42000): Unknown database 'myapp_production'

É por que, como a tradução sugere, não existe a base de dados. Neste caso, é preciso entrar no mysql e executar o comando para criar a base de dados, com o create database myapp_production;

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.1.49-1ubuntu8.1 (Ubuntu)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

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

mysql> create database myapp_production;
Query OK, 1 row affected (0.00 sec)

mysql>

Ou se preferir, basta executar direto no shell:

$ echo "create database myapp_production" | mysql -u usuario --password="mypassword"

Se o arquivo estiver compactado via gzip, basta descompactar e mandar para o mysql:

% cat myapp_production.sql.gz | gunzip | mysql -u usuario myapp_production

Restauração Remota para Local Direta

$ ssh usario@host-remoto.com 'mysqldump -u usuario --password="mypassword" myapp_production | gzip' | gunzip | mysql -u usuario myapp_production

Na linha acima o backup é feito e compactado no servidor remoto, e na nossa máquina ele é descompactado e usado para restauração.