sql >> Databáze >  >> RDS >> Mysql

Linuxový shell skript pro zálohování databáze

Po hodinách a hodinách práce jsem vytvořil řešení jako níže. Kopíruji pastu pro ostatní lidi, kteří mohou mít prospěch.

Nejprve vytvořte soubor skriptu a udělte tomuto souboru oprávnění ke spuštění.

# 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

Poté zkopírujte následující řádky do souboru pomocí 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:
Pokud používáte InnoDB a zálohování trvá příliš dlouho, můžete přidat "jedna transakce " argument k zamezení uzamčení. Takže řádek mysqldump bude vypadat takto:

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


  1. Jak zobrazit kód CREATE VIEW pro zobrazení v PostgreSQL?

  2. Jak formátovat výsledky dotazů SQLite v režimu TCL

  3. Jedna tabulka Mysql s více sloupci TIMESTAMP

  4. Příkaz CASE WHEN pro klauzuli ORDER BY