Faire à peu près la même chose que beaucoup de gens.
-
Le script doit s'exécuter sur la machine hébergeant la base de données MySql (il s'agit d'une machine Linux).
=> Créer un script local bash ou perl (ou autre) "monscript" sur cette machine "A" -
Les sauvegardes doivent être enregistrées sur le même serveur que celui sur lequel se trouve la base de données.
=> dans le script "myscript", vous pouvez simplement utiliser mysqldump . À partir de la sauvegarde locale, vous pouvez créer une tarball que vous envoyez via scp à votre machine distante. Enfin, vous pouvez mettre votre script de sauvegarde dans le crontab (crontab -e).
Quelques astuces et fonctions pour démarrer car je ne posterai pas tout mon script, il ne fait pas tout à fait l'affaire mais pas loin :
#!/bin/sh
...
MYSQLDUMP="$(which mysqldump)"
FILE="$LOCAL_TARBALLS/$TARBALL/mysqldump_$db-$SNAPSHOT_DATE.sql"
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db > $FILE && $GZIP $GZ_COMPRESSION_LEVEL $FILE
function create_tarball()
{
local tarball_dir=$1
tar -zpcvf $tarball_dir"_"$SNAPSHOT_DATE".tar.gz" $tarball_dir >/dev/null
return $?
}
function send_tarball()
{
local PROTOCOLE_="2"
local IPV_="4"
local PRESERVE_="p"
local COMPRESSED_="C"
local PORT="-P $DESTINATION_PORT"
local EXECMODE="B"
local SRC=$1
local DESTINATION_DIR=$2
local DESTINATION_HOST=$DESTINATION_USER"@"$DESTINATION_MACHINE":"$DESTINATION_DIR
local COMMAND="scp -$PROTOCOLE_$IPV_$PRESERVE_$COMPRESSED_$EXECMODE $PORT $SRC $DESTINATION_HOST &"
echo "remote copy command: "$COMMAND
[[ $REMOTE_COPY_ACTIVATED = "Yes" ]] && eval $COMMAND
}
Ensuite, pour supprimer les fichiers antérieurs à "date", vous pouvez regarder man find et concentrez-vous sur le mtime et plus récent options.
Edit :comme dit précédemment, il n'y a pas d'intérêt particulier à faire une sauvegarde locale à part un fichier temproray pour pouvoir envoyer une archive tar facilement et la supprimer une fois envoyée.
Créez un script shell comme celui ci-dessous :
#!/bin/bash
mysqldump -u username -p'password' dbname > /my_dir/db_$(date+%m-%d-%Y_%H-%M-%S).sql
find /mydir -mtime +10 -type f -delete
Remplacez le nom d'utilisateur, le mot de passe et votre répertoire de sauvegarde (my_dir). Enregistrez-le dans un répertoire (shell_dir) sous le nom de fichier.sh
Planifiez-le pour qu'il s'exécute tous les jours en utilisant crontab -e comme :
30 8 * * * /shell_dir/filename.sh
Cela fonctionnera tous les jours à 8h30 et sauvegardera la base de données. Il supprime également la sauvegarde datant de plus de 10 jours. Si vous ne voulez pas le faire, supprimez simplement la dernière ligne du script.
Répondre :Un cron
Description :
Essayez de créer un fichier quelquechose.sh avec ceci :
#!/bin/sh
mysqldump -u root -p pwd --opt db1.sql > /respaldosql/db1.sql
mysqldump -u root -p pwd --opt db2.sql > /respaldosql/db2.sql
cd /home/youuser/backupsql/
tar -zcvf backupsql_$(date +%d%m%y).tgz *.sql
find -name '*.tgz' -type f -mtime +2 -exec rm -f {} \;
Donnez la permission adéquate au fichier
chmod 700 mysqlrespaldo.sh
ou
sudo chmod 700 something.sh
puis créez un cron avec
crontab -e
le mettre comme
**0 1 * * *** /home/youruser/coolscripts/something.sh
N'oubliez pas que les chiffres ou les caractères '*' ont cette structure :
Minutes (range 0-59) Hours (0-23) Day of month (1-31) Month (1-12) Day of the week (0-6 being 0=Domingo) Absolute path to script or program to run