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/
.
date=date(d_m_y_H_M_S)
filename="$date".gz
mysqldump --user=my_user --password=my_pass --default-character-set=utf8 my_database | gzip > "/var/www/vhosts/system/example.com/httpdocs/backups/$("filename")
/var/www/vhosts/system/example.com/httpdocs/backups/
âgés de plus de 8 jours"/var/www/vhosts/system/example.com/httpdocs/backup_log.txt"
, ce texte sera écrit: Backup is created at $("date")
>/dev/null 2>&1
sera ajouté.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"
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.
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
#!/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
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
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
#!/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
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:
Divulgation complète: auteur original de matiri.