GNU/Linux >> Linux Esercitazione >  >> Linux

Script di shell Linux per il backup del database

Ho avuto lo stesso problema. Ma riesco a scrivere una sceneggiatura. Spero che questo possa aiutare.

#!/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

Crea uno script simile a questo:

#!/bin/sh -e

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

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

gzip $location

Quindi puoi modificare il crontab dell'utente con cui verrà eseguito lo script:

$> crontab -e

E aggiungi la voce

01 * * * * ~/script_path.sh

In questo modo verrà eseguito il primo minuto di ogni ora ogni giorno.

Quindi devi solo aggiungere i tuoi rotoli e altre funzionalità e sei a posto.


Dopo ore e ore di lavoro, ho creato una soluzione come la seguente. Copio incolla per altre persone che possono trarne beneficio.

Per prima cosa crea un file di script e concedi a questo file l'autorizzazione eseguibile.

# 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

Quindi copia le righe seguenti nel file con Maiusc+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

Modificare:
Se usi InnoDB e il backup richiede troppo tempo, puoi aggiungere l'argomento "transazione singola" per impedire il blocco. Quindi la riga mysqldump sarà così:

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

Linux
  1. Tutorial sul comando della data di Linux per principianti (8 esempi)

  2. Script Shell per spostare i file più vecchi?

  3. Linee guida per l'esecuzione di script Shell per i principianti

  4. Come cercare i file usando regex nello script della shell linux

  5. Backup automatico del database MySQL sul server Linux

Trucchi di formattazione per il comando data di Linux

Come memorizzare un comando Linux come variabile nello script della shell

Come eseguire lo script della shell come servizio SystemD in Linux

Stampa il tempo di esecuzione dello script della shell in Linux

Che cos'è Shebang negli script della shell di Linux?

I 15 migliori software di backup per desktop Linux