GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Shell-Skript für die Datenbanksicherung

Ich habe das gleiche Problem. Aber ich schaffe es, ein Skript zu schreiben. Ich hoffe, das würde helfen.

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

Erstellen Sie ein ähnliches Skript wie dieses:

#!/bin/sh -e

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

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

gzip $location

Dann können Sie den crontab bearbeiten des Benutzers, unter dem das Skript ausgeführt werden soll:

$> crontab -e

Und fügen Sie den Eintrag an

01 * * * * ~/script_path.sh

Dadurch wird es jeden Tag zur ersten Minute jeder Stunde ausgeführt.

Dann müssen Sie nur noch Ihre Rollen und andere Funktionen hinzufügen und schon kann es losgehen.


Nach stundenlanger Arbeit habe ich eine Lösung wie die folgende erstellt. Ich kopiere Einfügen für andere Leute, die davon profitieren können.

Erstellen Sie zuerst eine Skriptdatei und geben Sie dieser Datei die Ausführungsberechtigung.

# 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

Kopieren Sie dann die folgenden Zeilen mit Shift+Ins

in die Datei
#!/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

Bearbeiten:
Wenn Sie InnoDB verwenden und die Sicherung zu lange dauert, können Sie das Argument „Einzeltransaktion“ hinzufügen, um eine Sperrung zu verhindern. Die mysqldump-Zeile sieht also so aus:

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

Linux
  1. Linux Date Command Tutorial für Anfänger (8 Beispiele)

  2. Shell-Skript zum Verschieben der ältesten Dateien?

  3. Shell-Skript-Ausführungsrichtlinien für Neulinge

  4. 4 Möglichkeiten zum Ausführen eines Shell-Skripts unter UNIX / Linux

  5. 2 Perl-Skripte zur Speicherregression für Linux

Formatierungstricks für den Linux-Datumsbefehl

So speichern Sie einen Linux-Befehl als Variable im Shell-Skript

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

Ausführungszeit des Shell-Skripts in Linux drucken

Was ist Shebang in Linux Shell Scripting?

Die 15 besten Backup-Software für Linux-Desktop