GNU/Linux >> Belajar Linux >  >> Linux

Skrip shell Linux untuk cadangan basis data

Saya mendapat masalah yang sama. Tapi saya berhasil menulis skrip. Semoga ini bisa membantu.

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

Buat skrip yang mirip dengan ini:

#!/bin/sh -e

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

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

gzip $location

Kemudian Anda dapat mengedit crontab dari pengguna yang akan dijalankan skrip sebagai:

$> crontab -e

Dan tambahkan entri

01 * * * * ~/script_path.sh

Ini akan membuatnya berjalan pada menit pertama setiap jam setiap hari.

Kemudian Anda hanya perlu menambahkan gulungan dan fungsionalitas lainnya dan Anda siap melakukannya.


Setelah berjam-jam bekerja, saya membuat solusi seperti di bawah ini. Saya copy paste untuk orang lain yang bisa mendapatkan keuntungan.

Pertama-tama buat file skrip dan berikan izin file ini untuk dapat dieksekusi.

# 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

Kemudian salin baris berikut ke dalam file dengan 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

Sunting:
Jika Anda menggunakan InnoDB dan pencadangan memakan waktu terlalu lama, Anda dapat menambahkan argumen "transaksi tunggal" untuk mencegah penguncian. Jadi baris mysqldump akan seperti ini:

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

Linux
  1. Tutorial Perintah Tanggal Linux untuk Pemula (8 Contoh)

  2. Script Shell Untuk Memindahkan File Terlama?

  3. Format tanggal dan waktu untuk skrip atau variabel shell Linux

  1. Simbol Backtick (`) di Linux Shell Scripting

  2. Skrip transliterasi untuk shell linux

  3. Membuat template dengan Linux dalam Shell Script?

  1. Panduan Eksekusi Skrip Shell untuk Pemula

  2. 4 Cara Mengeksekusi Shell Script di UNIX / Linux

  3. 2 Skrip Perl Regresi Memori untuk Linux