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"