web-dev-qa-db-fra.com

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

J'ai essayé beaucoup de scripts pour la sauvegarde de base de données mais je ne pouvais pas le faire. Je veux sauvegarder ma base de données toutes les heures.
J'ai ajouté des fichiers dans le dossier "/etc/cron.hourly/", j'ai changé son chmod en 755, mais il n'a pas été exécuté.

Je serais heureux si vous pouviez écrire un script pour cette opération et me dire que devrais-je faire davantage? Après avoir ajouté ce fichier de script au dossier /etc/cron.hourly/.

  • Obtenir la date actuelle et créer une variable, date=date(d_m_y_H_M_S)
  • Créez une variable pour le nom du fichier, filename="$date".gz
  • Obtenez le dump de ma base de données comme ceci mysqldump --user=my_user --password=my_pass --default-character-set=utf8 my_database | gzip > "/var/www/vhosts/system/example.com/httpdocs/backups/$("filename")
  • Supprimer tous les fichiers du dossier /var/www/vhosts/system/example.com/httpdocs/backups/ âgés de plus de 8 jours
  • Dans le fichier "/var/www/vhosts/system/example.com/httpdocs/backup_log.txt", ce texte sera écrit: Backup is created at $("date")
  • Changez les propriétaires de fichiers (chown) de la racine en "my_user". Parce que je veux ouvrir les fichiers de sauvegarde et de journalisation à partir du compte FTP "my_user".
  • Je ne veux pas d'email après chaque cron. >/dev/null 2>&1 sera ajouté.
37
trante

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

Commencez par créer un fichier de script et donnez à ce fichier la permission d’exécuter.

# 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

Puis copiez les lignes suivantes dans un fichier avec Shift + 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

Modifier:
Si vous utilisez InnoDB et que la sauvegarde prend trop de temps, vous pouvez ajouter l’argument " single-transaction " pour empêcher le verrouillage. Donc, la ligne mysqldump sera comme ceci:

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

Créez un script semblable à ceci:

#!/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 éditer la crontab de l'utilisateur que le script va exécuter comme:

$> crontab -e

Et annexer l'entrée

01 * * * * ~/script_path.sh

Cela le fera fonctionner à la première minute de chaque heure chaque jour.

Ensuite, il vous suffit d’ajouter vos rôles et d’autres fonctionnalités et vous êtes prêt à partir. 

30
Peter Party Bus

J'ai 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
6
Vinod Amarathunga
#!/bin/sh
#Procedures = For DB Backup
#Scheduled at : Every Day 22:00

v_path=/etc/database_jobs/db_backup
logfile_path=/etc/database_jobs
v_file_name=DB_Production
v_cnt=0

MAILTO="[email protected]"
touch "$logfile_path/kaka_db_log.log"

#DB Backup
mysqldump -uusername -ppassword -h111.111.111.111 ddbname > $v_path/$v_file_name`date +%Y-%m-%d`.sql 
if [ "$?" -eq 0 ]
  then
   v_cnt=`expr $v_cnt + 1`
  mail -s "DB Backup has been done successfully" $MAILTO < $logfile_path/db_log.log
 else
   mail -s "Alert : kaka DB Backup has been failed" $MAILTO < $logfile_path/db_log.log
   exit
fi
2
kartavya soni

Voici mon script de sauvegarde mysql pour Ubuntu au cas où cela aiderait quelqu'un.

#Mysql back up script

start_time="$(date -u +%s)"

now(){
date +%d-%B-%Y_%H-%M-%S
}

ip(){
/sbin/ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'
}

filename="`now`".Zip
backupfolder=/path/to/any/folder
fullpathbackupfile=$backupfolder/$filename
db_user=xxx
db_password=xxx
db_name=xxx

printf "\n\n"
printf "******************************\n"
printf "Started Automatic Mysql Backup\n"
printf "******************************\n"
printf "TIME: `now`\n"
printf "IP_ADDRESS: `ip` \n"
printf "DB_SERVER_NAME: DB-SERVER-1\n"

printf "%sBACKUP_FILE_PATH $fullpathbackupfile\n"

printf "Starting Mysql Dump \n"

mysqldump -u $db_user -p$db_password $db_name| pv | Zip > $fullpathbackupfile

end_time="$(date -u +%s)"

elapsed=$(($end_time-$start_time))

printf "%sMysql Dump Completed In $elapsed seconds\n"

printf "******************************\n"

PS: N'oubliez pas d'installer pv et zip dans votre Ubuntu

Sudo apt install pv
Sudo apt install Zip

Voici comment configurer crontab en utilisant crontab -e dans Ubuntu pour s'exécuter toutes les 6 heures.

0 */6 * * * sh /path/to/shfile/backup-mysql.sh >> /path/to/logs/backup-mysql.log 2>&1

Ce qui est cool, c’est qu’il va créer un fichier Zip qui est plus facile à décompresser

1
Baljeet Bhinder

En tant que DBA, vous devez planifier la sauvegarde de la base de données MySQL en cas de problème afin de pouvoir récupérer vos bases de données à partir de la sauvegarde actuelle.

Ici, nous utilisons mysqldump pour effectuer la sauvegarde des bases de données mysql et la même chose que vous pouvez mettre dans le script.

[orahow @ oradbdb DB_Backup] $ cat .backup_script.sh

#!/bin/bash
# Database credentials
user="root"
password="1Loginxx"
db_name="orahowdb"
v_cnt=0
logfile_path=/DB_Backup
touch "$logfile_path/orahowdb_backup.log"
# Other options
backup_path="/DB_Backup"
date=$(date +"%d-%b-%Y-%H-%M-%p")
# Set default file permissions

Continuer la lecture .... Sauvegarde MySQL

0
Rosel
#!/bin/bash

# Add your backup dir location, password, mysql location and mysqldump        location
DATE=$(date +%d-%m-%Y)
BACKUP_DIR="/var/www/back"
MYSQL_USER="root"
MYSQL_PASSWORD=""
MYSQL='/usr/bin/mysql'
MYSQLDUMP='/usr/bin/mysqldump'
DB='demo'

#to empty the backup directory and delete all previous backups
rm -r $BACKUP_DIR/*  

mysqldump -u root -p'' demo | gzip -9 > $BACKUP_DIR/demo$date_format.sql.$DATE.gz

#changing permissions of directory 
chmod -R 777 $BACKUP_DIR
0
Shal

Vous pourriez envisager cet outil Open Source, matiri, https://github.com/AAFC-MBB/matiri , qui est un script de sauvegarde mysql simultané avec des métadonnées dans Sqlite3. Caractéristiques:

  • Multi-serveur: Plusieurs serveurs MySQL sont pris en charge, qu'ils soient situés sur le même serveur ou sur des serveurs physiques distincts.
  • Parallèle: chaque base de données sur le serveur à sauvegarder est réalisée séparément, en parallèle (paramétrage simultané: 3: valeur simultanée)
  • Compressé: chaque sauvegarde de base de données compressée
  • Checksummed: SHA256 de chaque fichier de sauvegarde compressé stocké et l'archive de tous les fichiers
  • Archivé: toutes les sauvegardes de la base de données sont regroupées dans un seul fichier.
  • Enregistré: informations de sauvegarde stockées dans la base de données Sqlite3

Divulgation complète: auteur original de matiri.

0
ggg