Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Linux-Shell-Skript für die Datenbanksicherung

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 "Einzeltransaktion "-Argument, um das Sperren zu verhindern. Die mysqldump-Zeile sieht also so aus:

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