Páginas

segunda-feira, 23 de abril de 2012

Backup do MySQL com PowerShell


   Olá pessoal, vou mostrar nesse post sobre como fazer backup das suas bases MySQL no Windows com PowerShell , o PowerShell no Windows nos proporcionou ter scripts mais flexíveis que no próprio Prompt de comando do Windows, facilitando a manutenção e integração dos softwares no sistema.


Pré-requisitos:
- Entender sobre sintaxe PowerShell e  MySQL

Ambiente Utilizado:
- Windows Server 2008 R2
- Windows 7 Ultimate(Cliente MySQL)
- MySQL 5.5.22 versão 64 bits
- PowerShell 2.0 

1. Configurando o Script PowerShell para o efetuar o backup do MySQL

###################### Inicio do Script #############################
function Backup-MySqlDB([string]$dbname)
{
"Backing up mysql " + $dbName + "..."
#Backup all mysql DBs

# Set-Location D:\backup\programas\mysql_bin, configure o diretório com os binários do MySQL
Set-Location 'D:\backup\programas\mysql_bin'
$bkfile = 'D:\backup\MySQL\' + $dbname + '.sql'

cmd /c mysqldump -u root --password= $dbname | Out-File $bkfile -encoding oem

Write-Host $dbName + "backup complete"
}

############ Databases que seram efetuados Backup ##############
Backup-MySqlDB('wikidb27');
Backup-MySqlDB('wikidb33');

############ Compacta backup dos databases ###############
D:\backup\programas\7z\7za.exe a -t7z "D:\backup\MySQL\backup_databases-$(Get-date -format ‘dd-MM-yyyy’).7z"  D:\backup\MySQL\*.sql

############ Deleta arquivos .sql dos databases que foram efetuados backup ############
del -rec D:\backup\MySQL\*.sql

############ Envia e-mail informando sobre a execução do Backup do Mysql ##############
Send-MailMessage –From seuemail@gmail.com –To seuemail@gmail.com –Subject “Backup MySQL - $(Get-date -format ‘dd-MM-yyyy’)” –Body “Backup do MySQL efetuado com sucesso em $(Get-date -format ‘dd-MM-yyyy hh:mm:ss’) no diretorio D:\backup\MySQL\backup_databases-$(Get-date -format ‘dd-MM-yyyy’).7z” -SmtpServer 127.0.0.1
 ################## Fim do Script ##############################

Copiando as informações do Script salve o mesmo na extensão “.ps1” , no exemplo que usei salvei meu script com o nome “backup_mysql.ps1”. A extensão padrão de scripts do powershell é .ps1. E por questões de segurança nenhum script pode ser executado sem que seja permitido por policy. Portanto antes de executar qualquer script no powershell digite: Set-ExecutionPolicy Unrestricted

Para que o Script acima funcione corretamente  é necessário configurar o diretório que será efetuado o backup e os programas necessários para o funcionamento adequado do script. O Compactador utilizado foi o 7-Zip na sua versão comand line e para fazer o download desta ferramenta acesse: http://www.7-zip.org/download.html. O mysqldump utilizado foi o binário da versão do mysql instalado no meu servidor. Também será necessário configurar o Relay de e-mail que o script utilizará para enviar os e-mails com o resultado da execução do mesmo.

Abaixo diretório no qual se encontra a versão do 7-zip comand line:
Abaixo diretório no qual se encontra os binários do MySQL :
2. Executando o Script PowerShell

Agora vamos executar o Script depois de configurado.

Explicando a execução do Script em linhas gerais. Primeiro é efetuado o dump das bases mysql. Após efetuado o backup  o mesmo é compactado num único arquivo. Após a compactação os arquivos  “.sql” de backup são excluídos do diretório e depois de efetuar essa rotina o Script envia um e-mail para seu Relay de E-mail informando se o backup foi executado com sucesso .

Abaixo , modelo de script para executar o PowerShell:

Modelo do Script “executa_powershell.bat” é:
powershell.exe -command "D:\backup\backup_mysql.ps1"

Abaixo , estrutura de diretório utilizada para o Laboratório:

Abaixo, E-mail recebido confirmando a execução do backup do MySQL:


Bom Pessoal é isso. Espero que tenha ajudado a quem precisar. Não Abordei o agendamento de tarefas do Script pois o post ficaria muito extenso. Mais vou fazer a abordagem do mesmo em breve.

2 comentários:

  1. Emerson, quando no destino temos espaços nos nomes exemplo, "\\10.0.0.1\backup servers\server s01\" desta forma acusa erro nome invalido, tentei utilizando desta forma "\\10.0.0.1\backup/servers\server/s01\"
    porém não deu certo, isto foi no powershell 1.0,

    ResponderExcluir
    Respostas
    1. Bruno,
      quando utilizei esse método para fazer backup do mysql com powershell no windows 2008 r2 não tive problemas. Já testei ele no windows 2003 ou win xp mais não tive problemas com o armazenamento em rede como no seu caso utilizando powershell 1.0 , porém tente utilizar um caminho de rede sem espaços e verifique se funciona. ex: \\10.1.1.10\mysqlbackup\

      Excluir