GNU/Linux >> Znalost Linux >  >> Linux

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

Mám stejný problém. Ale podařilo se mi napsat skript. Doufám, že to pomůže.

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

Vytvořte skript podobný tomuto:

#!/bin/sh -e

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

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

gzip $location

Poté můžete upravit crontab uživatele, pod kterým bude skript spuštěn:

$> crontab -e

A připojte záznam

01 * * * * ~/script_path.sh

Díky tomu bude spouštět každý den první minutu každé hodiny.

Pak už jen stačí přidat role a další funkce a můžete vyrazit.


Po hodinách a hodinách práce jsem vytvořil řešení jako níže. Kopíruji vložit 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

Upravit:
Pokud používáte InnoDB a zálohování trvá příliš dlouho, můžete přidat argument „single-transaction“, abyste zabránili uzamčení. Takže řádek mysqldump bude vypadat takto:

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

Linux
  1. Shell skript pro přesun nejstarších souborů?

  2. Jak hledat soubory pomocí regulárního výrazu ve skriptu linuxového shellu

  3. Transliterační skript pro linuxové prostředí

  1. Linux Date Command Tutorial pro začátečníky (8 příkladů)

  2. Pokyny pro spouštění skriptů Shell pro nováčky

  3. 4 způsoby provádění skriptu Shell v systému UNIX / Linux

  1. 2 Perl skripty pro regresi paměti pro Linux

  2. Automaticky zálohujte databázi MySQL na linuxovém serveru

  3. Šablony s Linuxem ve skriptu Shell?