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