sql >> Databasteknik >  >> RDS >> Mysql

Linux-skalskript för säkerhetskopiering av databas

Efter timmar på timmar skapade jag en lösning som nedan. Jag copy paste för andra som kan ha nytta av det.

Skapa först en skriptfil och ge denna fil körbar behörighet.

# 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

Kopiera sedan följande rader till filen med 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

Edit:
Om du använder InnoDB och säkerhetskopiering tar för mycket tid kan du lägga till "enkeltransaktion " argument för att förhindra låsning. Så mysqldump-raden blir så här:

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


  1. Hur COS() fungerar i MariaDB

  2. MySQL:FEL 1227 (42000):Åtkomst nekad - Kan inte SKAPA ANVÄNDARE

  3. Hur bygger man ett enkelt gransknings- och 5-stjärnigt betygssystem?

  4. Fel vid överföring av data till Heroku:tidszonförskjutning utanför intervallet