Tenho migrado alguns scripts bash que tenho para PowerShell, e chegou a vez de migrar um script de monitoramento de replicação do MySQL. Fica como crédito o script original do Paweł. É um script bem simples onde eu verifico algumas tags resultantes do SHOW SLAVE STATUS\G, são elas. Slave_IO_Running, Slave_SQL_Running e Seconds_Behind_Master. Ainda preciso verificar formas mais corretas de armazenar/carregar as variáveis como usuários e senha, se tiver alguma dica, fique à vontade para inclusive fazer um pull request (aqui) no repositório onde vou armazenar alguns dos meus scripts.

<#
   Variables definition
#>
$MaxSeconds = 120  # Max seconds behind master allowed
$MysqlUser  = 'root'
$MysqlPass  = ''

$MailTo     = 'mauricio@sipmann.com'
$MailFrom   = 'mauricio@sipmann.com'


$data = $(mysql -u $MysqlUser -p"$MysqlPass" -e 'SHOW SLAVE STATUS \G')

#Debug data
#$data = Get-Content 'c:\temp\sampleresult.txt'

<# Parse the data #>
$IORunning   = (($data | Where-Object { $_ -match 'Slave_IO_Running:' }) -split '\s+')[2]
$SQLRunning  = (($data | Where-Object { $_ -match 'Slave_SQL_Running:' }) -split '\s+')[2]
$LastErrNo   = (($data | Where-Object { $_ -match 'Last_Errno' }) -split '\s+')[2]
$SecondsBh   = [int](($data | Where-Object { $_ -match 'Seconds_Behind_Master' }) -split '\s+')[2]

If ($IORunning -Eq 'No' -Or $SQLRunning -Eq 'No' -Or $SecondsBh -gt $MaxSeconds) {
    $MailBody = '<h1>Problema na replicação</h1><br>'

    $MailBody += '    IO Running: ' + ($IORunning)  + '<br>'
    $MailBody += '   SQL Running: ' + ($SQLRunning) + '<br>'
    $MailBody += 'Seconds Behind: ' + ($SecondsBh) + '<br>'
    $MailBody += '   Last Err No: ' + ($LastErrNo) + '<br>'

    <# Send e-mail, maybe some telegram message here too #>
    Send-MailMessage -To $MailTo -From $MailFrom  -Subject 'Problemas na replicação' -bodyAsHtml $MailBody -Credential (Get-Credential) -SmtpServer 'smtp.office365.com' -Port 587 -UseSsl
} Else {
    Write-Host "Up and running"
}


Traduções: