Backup do MySQL de todos os bancos em arquivos separados

Boa Noite,

galera vai uma dica de como fazer backup de todas os databases do servidor MySQL. Vou ensinar como se faz para apenas um arquivo (contendo todas as bases do servidor) e depois vou dar algumas dicas de como fazer para que seja gerado um arquivo (.sql) de cada  base.

Isto é muito util para uma rotina de backup por exemplo, é possível fazer com que o script gere os arquivos separados por data (NomeDaBase_20131203.sql por exemplo), o que ajudaria na hora de montar a rotina de backup.

Antes vamos aos comandos, listei aqui as principais opções do mysqldump que podem ser úteis:

Comando Descrição
–host=[endereço] | -h [endereço] Endereço do hosts do servidor MySQL.
–port=[número] | -P [número] Definindo a Porta de conexão TCP/IP. Útil caso a porta padrão do servidor MySQL seja alterada.
–all-databases Esta opção faz um backup de todos os banco de dados do MySQL.
–databases [nome_db] | -B [nome_db] Efetua o backup da base de dados especificada pelo nome.
–user=[usuário] | -u [usuário] Parametro de definição do usuário de acesso ao MySQL.
–password=[senha] | -p [senha] Parametro de definição da senha de acesso do usuário do MySQL.
–add-drop-table Esta opção adiciona a instrução DROP TABLE antes de cada instrução create.
–hex-blob Está opção transforma dados binários em hexdecimal, dados como(BINARY,VARBINARY,BLOB,BIT).
–add-locks A opção add locks, adiciona a instrução LOCK TABLES e UNLOCK TABLES na tabela que está ocorrendo o “dump”. Esta opção torna as inserções mais rápidas já que a concorrencia será
bloqueada.
–extended-insert | -e Esta opção cria inserts multilinha, ou seja, ao inves de criar várias instruções INSERT, é gerada uma linha com multiplas inserções.
–flush-logs | -F Atualiza o arquivo de log do servidor MySQL antes de executar o backup.
–lock-tables | -l Bloqueia todas as tabelas antes de iniciar o backup.
–no-data | -d Esta opção é excelente para efetuar um backup da base de dados mas apenas da estrutura, ignorando todos os dados de insersão.
–quote-names | -Q Coloca os nomes de colunas e tabelas entre “`” ou (acento grave).
–log-error=[nome_do_arquivo] Cria um arquivo de log da transação de backup contendo os erros da ação.
–xml Efetua um dump da base de dados para XML.

Agora vamos ao que interessa (Utilizar estes comandos acima).

Abra o “Command Line” (CMD do Windows) e acesse a pasta da instalação do MySQL  (em alguns casos não é necessário porém vale a dica por garantia caso o comando não funcione de cara), se você fez a instalação padrão do MySQL ela ta localizada em:  C:\Program Files\MySQL\MySQL Server 5.1\bin .

BACKUP de Todas as bases em um único arquivo.

Primeiramente vou ensinar como fazer todos em um único arquivo. Neste comando abaixo eu faço o backup de todos os databases da minha base localhost para um arquivo chamado MySQL_BACKUP.sql que será criado na raiz da minha unidade D, considerando que meu usuário é root e a senha é root.

mysqldump -u root -p root --all-databases > D:\MySQL_BACKUP.sql

BACKUP de Todas as bases em arquivos diferentes (Um para cada database).

Para fazer o backup separado individualmente cada base você precisa digitar o seguinte código tudo na mesma linha:
Dica: Caso você queira colocar isso em um arquivo batch (.bat) você precisa alterar o % para %%, ficando %%D em todos os pontos. Isto porque % é um caracter especial do batch, então precisamos “escapalo” (escape) para que seja impresso no “Command Line” (CMD) corretamente.

mysql.exe -uroot -proot -s -N -e "SHOW DATABASES" | for /F "usebackq" %D in (`findstr /V "information_schema performance_schema"`) do mysqldump %D -uroot -proot > D:\Backup\MySQL\%D.sql

BRINDE – Arquivo batch para backup em arquivos separados.

Deixo aqui outro código que já utilizei e funciona bem para a mesma função. Trata-se de um arquivo Batch que faz o mesmo trabalho, porem de uma forma um pouco diferente. Não vou explicar como ele funciona porque não foi eu quem fiz (rsrsrsrs), mas acredito que esteja bem auto-explicativo (Fonte).

@echo off

set dbUser=root
set dbPassword=password
set backupDir="C:\Documents and Settings\user\Desktop\backup\mysql"
set mysqldump="C:\Program Files\MySQL\MySQL Workbench 5.2 CE\mysqldump.exe"
set mysqlDataDir="C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data"
set zip="C:\Program Files\7-Zip\7z.exe"

:: get date
for /F "tokens=2-4 delims=/ " %%i in (‘date /t’) do (
set mm=%%i
set dd=%%j
set yy=%%k
)

:: get time
for /F "tokens=5-8 delims=:. " %%i in (‘echo.^| time ^| find "current" ‘) do (
set hh=%%i
set mm=%%j
)

set dirName=%yy%%mm%%dd%_%hh%%mm%

:: switch to the "data" folder
pushd %mysqlDataDir%

:: iterate over the folder structure in the "data" folder to get the databases
for /d %%f in (*) do (

if not exist %backupDir%\%dirName%\ (
mkdir %backupDir%\%dirName%
)

%mysqldump% –host="localhost" –user=%dbUser% –password=%dbPassword% –single-transaction –add-drop-table –databases %%f > %backupDir%\%dirName%\%%f.sql

%zip% a -tgzip %backupDir%\%dirName%\%%f.sql.gz %backupDir%\%dirName%\%%f.sql

del %backupDir%\%dirName%\%%f.sql

)

Bom e é isso… postem suas dúvidas. Abraços!!!

VALEUZZZZ!!!

Facebook

About JLNeto