GNU/Linux >> Tutoriels Linux >  >> Linux

Script shell Linux pour la sauvegarde de la base de données

J'ai eu le même problème. Mais je parviens à écrire un script. J'espère que cela aiderait.

#!/bin/bash
# Database credentials
user="username"
password="password"
host="localhost"
db_name="dbname"
# Other options
backup_path="/DB/DB_Backup"
date=$(date +"%d-%b-%Y")
# Set default file permissions
umask 177
# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name >$backup_path/$db_name-$date.sql

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;


#DB backup log
echo -e "$(date +'%d-%b-%y  %r '):ALERT:Database has been Backuped"    >>/var/log/DB_Backup.log

Créez un script similaire à celui-ci :

#!/bin/sh -e

location=~/`date +%Y%m%d_%H%M%S`.db

mysqldump -u root --password=<your password> database_name > $location

gzip $location

Ensuite, vous pouvez modifier le crontab de l'utilisateur sous lequel le script va s'exécuter :

$> crontab -e

Et ajoutez l'entrée

01 * * * * ~/script_path.sh

Cela le fera fonctionner sur la première minute de chaque heure tous les jours.

Ensuite, il vous suffit d'ajouter vos rouleaux et d'autres fonctionnalités et vous êtes prêt à partir.


Après des heures et des heures de travail, j'ai créé une solution comme ci-dessous. Je copie-colle pour d'autres personnes qui peuvent en bénéficier.

Créez d'abord un fichier de script et donnez à ce fichier l'autorisation d'être exécutable.

# cd /etc/cron.daily/
# touch /etc/cron.daily/dbbackup-daily.sh
# chmod 755 /etc/cron.daily/dbbackup-daily.sh
# vi /etc/cron.daily/dbbackup-daily.sh

Copiez ensuite les lignes suivantes dans le fichier avec Maj+Ins

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

Éditer:
Si vous utilisez InnoDB et que la sauvegarde prend trop de temps, vous pouvez ajouter un argument "transaction unique" pour empêcher le verrouillage. La ligne mysqldump ressemblera donc à ceci :

mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
          --single-transaction mydatabase | gzip > "$fullpathbackupfile"

Linux
  1. Instructions d'exécution des scripts Shell pour les débutants

  2. 4 façons d'exécuter un script shell sous UNIX / Linux

  3. 2 Scripts Perl de régression de mémoire pour Linux

  4. Comment rechercher des fichiers à l'aide de regex dans le script shell Linux

  5. Sauvegarder automatiquement la base de données MySQL sur le serveur Linux

Astuces de formatage pour la commande Linux date

Comment stocker une commande Linux en tant que variable dans un script shell

Comment exécuter un script Shell en tant que service SystemD sous Linux

Imprimer le temps d'exécution du script Shell sous Linux

Qu'est-ce que Shebang dans Linux Shell Scripting ?

Les 15 meilleurs logiciels de sauvegarde pour Linux Desktop