Maison  >  Article  >  base de données  >  Explication détaillée du fonctionnement du script de sauvegarde MySQL

Explication détaillée du fonctionnement du script de sauvegarde MySQL

零下一度
零下一度original
2017-05-03 13:56:141184parcourir

Description du script

Sauvegardez toutes les données tous les 7 jours et sauvegardez le binlog tous les jours, ce qui est une sauvegarde incrémentielle

(S'il y a moins de données, sauvegardez simplement l'intégralité. données une fois par jour, cela peut ne pas être possible. Une sauvegarde incrémentielle est nécessaire)

L'auteur n'est pas très familier avec les scripts shell, donc de nombreux endroits sont écrits de manière très stupide :)

Activer le journal bin

Dans la version mysql 4.1, par défaut, il n'y a que des journaux d'erreurs et aucun autre journal. Vous pouvez ouvrir le journal bin en modifiant la configuration. Il existe de nombreuses méthodes, dont l'une consiste à ajouter la section mysqld dans /. etc/my.cnf :

[mysqld]

log-bin

La fonction principale de ce journal est la sauvegarde ou la réplication incrémentielle (il peut y avoir d'autres utilisations).

Si vous souhaitez une sauvegarde incrémentielle, vous devez ouvrir ce journal.

Pour MySQL avec des opérations de base de données fréquentes, ce journal deviendra très volumineux et il peut y en avoir plusieurs

Flush. -logs dans la base de données, ou utilisez mysqladmin, mysqldump pour appeler flush-logs et utiliser les paramètres delete-master-logs, ces fichiers journaux disparaîtront et de nouveaux fichiers journaux seront générés (vides au début).

Donc, si vous ne sauvegardez jamais, il n'est peut-être pas nécessaire d'activer le journal.

Complet Vous pouvez appeler flush-logs pendant la sauvegarde et flush-logs avant la sauvegarde incrémentielle pour sauvegarder les dernières données.

Script de sauvegarde complète

S'il y a beaucoup de données de base de données, nous prenons généralement quelques jours ou sauvegardons les données une fois par semaine pour éviter d'affecter le fonctionnement de l'application. Si la quantité de données est relativement faible, alors. peu importe si vous sauvegardez une fois par jour.

Télécharger En supposant que notre quantité de données est relativement importante, le script de sauvegarde est le suivant : (Reportez-vous à un mysql sur le script de sauvegarde Internet, merci :) )

#!/bin/sh
# mysql data backup script
# by scud http://www.jscud.com
# 2005-10-30
#
# use mysqldump --help,get more detail.
#
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqldump --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables > $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo "copy it to your local disk or ftp to somewhere !!!"
ls -al $BakDir

Le script ci-dessus sauvegarde MySQL dans le répertoire local /backup/mysql, et les fichiers de sauvegarde incrémentielle sont placés dans le répertoire /backup/mysql/daily.

Remarque : Le script ci-dessus ne transfère pas les fichiers sauvegardés vers d'autres ordinateurs distants, ni ne supprime les fichiers de sauvegarde d'il y a quelques jours : l'utilisateur doit ajouter des scripts pertinents ou opérer manuellement

Sauvegarde incrémentielle

.

Le volume de données de la sauvegarde incrémentielle est relativement faible, mais elle doit être exploitée sur la base d'une sauvegarde complète. Les utilisateurs peuvent peser le temps et le coût et choisir la méthode qui leur convient le mieux.

Incrémentaire. La sauvegarde utilise le journal bin. Le script est le suivant :

#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"

Le script de sauvegarde incrémentielle consiste à vider les journaux avant que la sauvegarde ne place automatiquement les journaux en mémoire dans le fichier, puis génère un nouveau journal. fichier, nous n'avons donc besoin de sauvegarder que les premiers, c'est-à-dire que nous ne sauvegardons pas le dernier

Parce qu'il peut y avoir plusieurs fichiers journaux générés à partir de la dernière sauvegarde. cette sauvegarde, donc pour détecter le fichier, s'il a été sauvegardé, il n'est pas nécessaire de le sauvegarder

Remarque : De même, l'utilisateur doit également l'envoyer à distance, mais ce n'est pas nécessaire. supprimez-le. Le programme le générera automatiquement après une sauvegarde complète.

Paramètres d'accès

Le script a été écrit pour que le script s'exécute, le nom d'utilisateur et le mot de passe correspondants doivent être saisis. être défini. mysqladmin et mysqldump nécessitent des noms d'utilisateur et des mots de passe. Bien sûr, ils peuvent être écrits dans le script, mais il est difficile de les modifier. Supposons que nous utilisions l'utilisateur root du système pour exécuter ce script. nous devons créer un fichier .my.cnf dans /root (c'est-à-dire le répertoire personnel de l'utilisateur root) avec le contenu suivant

[mysqladmin]
password =password
user= root
[mysqldump]
user=root
password=password

Remarque : définissez ce fichier pour qu'il soit lisible uniquement par root. (chmod 600 .my.cnf )

Ce fichier indique que le programme utilise l'utilisateur root de mysql pour sauvegarder les données, et le mot de passe est le paramètre correspondant. De cette façon, il n'est pas nécessaire d'écrire l'utilisateur. le nom et le mot de passe du script.

Exécuter automatiquement

Pour que le programme de sauvegarde s'exécute automatiquement, nous devons l'ajouter à crontab.

Il existe deux méthodes, l'une consiste à ajouter le script selon le vôtre. L'option est de le placer dans les répertoires tels que /etc/cron.daily et /etc/cron.weekly

La première consiste à utiliser crontab -e pour le mettre. dans les tâches planifiées de l'utilisateur root, telles que la sauvegarde complète chaque semaine. Elle s'exécute à 3 heures du matin tous les jours et la sauvegarde quotidienne s'exécute à 3 heures du matin du lundi au samedi

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn