Como monitorar backups regulares do MySQL.

1

Eu sou um desenvolvedor e estou discutindo com meu sysadmin como fazer backup do banco de dados MySQL que estamos usando.

O administrador anterior me disse que ele havia começado a fazer backup do banco de dados, mas o novato, que não é tão experiente, está oferecendo ajuda para desenvolver um script.

Antes de tudo, é normal que o desenvolvedor seja responsável pelos backups do banco de dados? Em todos os outros lugares em que trabalhei, o administrador do sistema cuidou disso, me levando ao desenvolvimento.

Então, no momento, eu tenho um script Perl que chama um mysql-dump, e faz o backup junto com o código. Agora, por algum motivo, os backups no meio do nighht falham e criam uma versão truncada do banco de dados. Desenvolvi isso como uma solução temporária e, quando precisei, há algumas semanas, o backup falhou. Por esse motivo, eu preferiria que o administrador de sistema assumisse a responsabilidade, pois eu tenho código para desenvolver, e não precisa estar checando as saídas do trabalho cron a cada dia.

Então, o que é uma maneira confiável de fazer backup do banco de dados a cada hora e receber um aviso se o backup falhar.

    
por wobbily_col 11.11.2013 / 11:12

1 resposta

3
O cenário típico que tenho visto é que o proprietário da empresa ou seu delegado decide sobre os objetivos de retenção, ponto de recuperação de dados e pontos de recuperação aceitáveis, pois o proprietário é quem paga as contas resultantes.

O DBA (e / ou o sysadmin) tem uma idéia do perfil do aplicativo (transações complexas ou atualizações de tabela simples, janela de backup, tamanho do banco de dados, crescimento de dados, número de linhas alteradas etc.) e decide sobre um backup apropriado estratégia para atender a esses requisitos.

Nesse momento, o proprietário da empresa geralmente decide que os requisitos iniciais de backup de platina são muito caros, portanto, enxágüe e repita.

Os desenvolvedores não têm acesso a sistemas de produção e nem mesmo a eles; eles não são responsáveis por backups diários. (Embora seja uma boa prática garantir que você tenha um backup antes de fazer qualquer trabalho na estrutura do banco de dados).

Então eu concordo com você, faça disso o problema de alguém.

Se seu aplicativo normalmente executa transações que atualizam várias tabelas, você deseja executar o mysqldump com as opções de bloqueio de tabela para assegurar consistência. Mas isso bloqueará todas as atualizações em seu banco de dados durante a tarefa de backup, portanto, fazer isso a cada hora geralmente é uma Idéia Ruim.

O log binário permite restaurações pontuais e backups incrementais.

Dê uma olhada no link

Um script simples que faz um back-up de todos os bancos de dados em um servidor MySQL, cada banco de dados para um arquivo individual. Ele só enviará um e-mail para você em caso de problemas. Contanto que o cron seja executado, os backups serão criados. Como sempre, teste também seus recursos de restauração!:

#!/bin/bash

# Simple script to create logical backups of all MySQL databases on
# a server. by http://serverfault.com/users/37681/hbruijn
# Free to use and modify as neeeded.

#======================================================================
# Define paths to system binaries
MYSQL="/usr/bin/mysql"
MYSQLDUMP="/usr/bin/mysqldump"
GZIP="/bin/gzip"
MAIL="/bin/mailx"

# MySQL credentials used for reading the databases.
# either the MySQL DBA account "root"
# or alternatively create a dedicated read-only backup user
# with the following GRANT statement:
# mysql>  GRANT SELECT,RELOAD,SUPER,REPLICATION CLIENT ON *.* TO \
#  backupuser@<this IP or localhost>  identified by 'Very_s3cr3t_passW0rd';
MYHOST="localhost"  # localhost or remote ip-address
MYUSER="backupuser"
MYPASS="Very_s3cr3t_passW0rd"

# Local filesystem or network share to dump back-ups
# Good practice to have file back-ups on their own filesystem
# and not on the root filesystem.
MYBAKDIR="/backups"

# Keep 1 week worth of MySQL backups under $MYBAKDIR
MYDIR=$(date +MySQL/%A)

# Mail errors to somebody in charge
[email protected]

# The rest shouldn't need much tuning
#=====================================================================

errormail(){
cat << EOF | $MAIL -s "MySQL back-up failed !" $ERROR_RCPT
        This is an automatic warning message.

        The MySQL back-up on server: $(hostname) has failed with the following
        errors:

        $1

        Please take appropiate action.

        Thanks in advance.
EOF
exit 1 ;
}

if ! test -d $MYBAKDIR ; then
 mkdir -p $MYBAKDIR || errormail "Backup directory $MYBAKDIR does not exist and could not be created."
fi

if test -d "$MYBAKDIR/$MYDIR" ; then
  rm -rf "$MYBAKDIR/$MYDIR" || errormail "Expired backups from $MYBAKDIR/$MYDIR could not be removed."
fi

mkdir -p "$MYBAKDIR/$MYDIR" || errormail "Todays backup directory $MYBAKDIR/$MYDIR could not be created."

# Generate list with all databases
DATABASES=$(echo "show databases" | $MYSQL -h $MYHOST -u $MYUSER -p$MYPASS |grep -v ^Database$) || errormail "Unable to connect to MySQL database server on $MYHOST please check the supplied credentials"

# Make a logical backup of each database
for DB in $DATABASES
do
  $MYSQLDUMP  -h $MYHOST -u $MYUSER -p$MYPASS --opt --single-transaction $DB > $MYBAKDIR/$MYDIR/$DB.sql  || errormail "Unable to create backup from $DB "
  $GZIP $MYBAKDIR/$MYDIR/$DB.sql  || errormail "Unable to compress $MYBAKDIR/$MYDIR/$DB.sql "

done
    
por 11.11.2013 / 13:31

Tags