Aqui está um script de backup / manutenção que eu uso:
#!/usr/bin/sh
#backup all mysql databases
# list MySQL databases and dump each
DIR=
DATESTAMP=$(date +%Y%m%d)
DB_USER=
DB_PASS=
# remove old backups
find ${DIR} -type f -mtime +5 -exec rm -rf {} \;
DB_LIST='mysql -u $DB_USER -p"$DB_PASS" -e'show databases;''
DB_LIST=${DB_LIST##Database}
for DB in $DB_LIST;
do
FILENAME=${DIR}${DB}-${DATESTAMP}.sql.gz
mysqldump -u $DB_USER -p"$DB_PASS" --opt --flush-logs $DB | gzip > $FILENAME
done
mysqlcheck -u $DB_USER -p"$DB_PASS" --all-databases > /root/mysql_backups/check_errors-${DATESTAMP}.log
Este script gera um backup gzipado individual de cada banco de dados para que você não precise restaurar os bancos de dados do servidor inteiro se houver apenas um problema com um banco de dados. Ele também inclui alguma sanidade de verificação do mysql e encontra backups de banco de dados antigos e os exclui.
Para restaurar, conforme solicitado:
Eu tive que restaurar algumas vezes. Acontece.
gunzip backup_file.sql.gz
mysql -u <username> -p <database_name> < backup_file.sql
Há provavelmente uma maneira mais "de uma linha" de fazer isso ... mas é assim que funciona para mim.