GNU/Linux >> Belajar Linux >  >> Linux

Cadangan Basis Data MySQL Berskrip

Ikhtisar

Artikel ini menguraikan skrip pencadangan basis data MySQL yang memungkinkan Anda untuk menerapkan pencadangan otomatis harian (atau lebih sering) dengan cap tanggal dan terkompresi dari basis data MySQL Anda. Keuntungan menggunakan skrip ini adalah ia akan mencadangkan semua basis data, menyimpannya di direktori (/data/db-backups) dan mencatat aktivitasnya ke file di (/logs/db-backup) untuk diaudit dan ditinjau jika terjadi masalah apa pun.

Idealnya skrip perlu diotomatisasi menggunakan CRON sehingga setidaknya setiap hari terjadi pencadangan penuh dari setiap basis data. Ini akan memungkinkan Anda untuk memiliki beberapa tingkat pemulihan jika terjadi kesalahan dalam database Anda atau membantu dalam migrasi mudah database Anda ke sistem lain. Seperti semua proses otomatis, setelah terinstal, pencadangan akan terus dilakukan selamanya sehingga Anda perlu memastikan bahwa cadangan lama telah dihapus agar disk Anda tidak penuh.

Script

Skrip ini adalah skrip shell BASH bersih sederhana yang diuji pada Distribusi Linux CentOS tetapi mampu berjalan pada varian Linux lainnya dengan sedikit atau tanpa modifikasi.

  1. Potong dan tempel teks berikut ke dalam editor dan buat perubahan yang diperlukan untuk meningkatkan atau mengurangi fungsionalitas.
#!/bin/bash
# mysql-backup.sh
# use mysqldump to Dump DB and compress it on the fly to a mounted partition
#
BACKUP_DIR="/data/db-backups"
mkdir -p $BACKUP_DIR
chmod 777 $BACKUP_DIR
#
#
SERIAL="`date +%Y%m%d-%H%M%S`"

#=====================================
# Log Functions
#
function LogStart
{
echo "====== Log Start =========" >> $LF
echo "Time: `date`" >> $LF
echo " " >> $LF
}
function LogEnd
{
echo " " >> $LF
echo "Time: `date`" >> $LF
echo "====== Log End   =========" >> $LF
}

#=====================================
#
#
function GetDBList
{
echo "Calling GetDBList()" >> $LF
mysqlshow |grep "|"| tr -d ' '|tr -d '|'| egrep -v Databases > $DBLIST
}

#=====================================
#
#
function DoBackup
{
echo "Calling DoBackup()" >> $LF

DBFILE=$BACKUP_DIR/db-$DB-$SERIAL.sql
echo "Host [$H]" >> $LF
echo "DB File [$DBFILE]" >> $LF
if [ -a  $DBFILE ]
then
mv $DBFILE $DBFILE.`date '+%M%S'`
fi
echo "Dumping ${DB}" >> $LF
mysqldump -B ${DB}  --add-drop-database --add-drop-table >> ${DBFILE}
echo "Zipping up file!" >> $LF
gzip ${DBFILE}
echo "Done!" >> $LF
}

FILE_DATE=`date '+%Y-%m-%d'`
LF_DIR=/logs/db-backup
LF=$LF_DIR/db-backup-$FILE_DATE.log
mkdir -p $LF_DIR
chmod 777 $LF_DIR
touch $LF
chmod 664 $LF

DBLIST=/tmp/dblist-$FILE_DATE.list

LogStart
#=====================================
#
#                     MAIN Code Start

GetDBList
while read line
do
echo "Backuping up: $line"
H="localhost"
DB=$line
DoBackup
done < $DBLIST
echo "All backups Completed" >> $LF
LogEnd
#
# EOF

Menguji Cadangan

  1. Untuk memverifikasi bahwa skrip pencadangan berfungsi, jalankan perintah pencadangan sebagai berikut:
    /usr/local/bin/mysql-backups.sh
  2. Kemudian, lakukan daftar direktori /data/db-backup direktori yang dibuat oleh skrip, Anda akan melihat beberapa file, masing-masing mewakili basis data terkompresi Anda!
    [root@yourserver]#ls -l /data/db-backups
    
    -rw-r--r-- 1 root root    510 Mar  5 15:21 db-information_schema-20140305-152103.sql.gz
    -rw-r--r-- 1 root root    526 Mar  5 15:22 db-information_schema-20140305-152229.sql.gz
    -rw-r--r-- 1 root root 142122 Mar  5 15:21 db-mysql-20140305-152103.sql.gz
    -rw-r--r-- 1 root root 142283 Mar  5 15:22 db-mysql-20140305-152229.sql.gz
    ....
    [root@yourserver]#

Mengotomatiskan Skrip

Skrip harus ditempatkan di direktori bernama /usr/local/bin . Direktori ini secara khusus disisihkan untuk skrip yang berlaku untuk sistem tertulis pengguna.

Skrip harus dibuat dapat dieksekusi oleh pengguna root, gunakan perintah berikut untuk menandai file sebagai dapat dieksekusi:

"chmod 744 /usr/local/bin/mysql-backup.sh"

Untuk mengotomatisasi eksekusi script kita akan menggunakan aplikasi CRON, jadi kita akan menambahkan baris ke crontab kita menggunakan perintah "crontab -e" , ini akan memunculkan editor dan kita akan menambahkan baris sebagai berikut:

30 22 * * * /usr/local/bin/mysql-backups.sh > /dev/null 2>&1

Pada dasarnya ini akan memungkinkan skrip berjalan pada pukul 22:30 setiap hari. Ini juga akan menyembunyikan output apa pun dari program saat program masuk ke disk.

Pemulihan

Untuk memulihkan cadangan, gunakan gunzip untuk mendekompresi file kemudian gunakan mysql

Berikut adalah contoh khas dari apa yang perlu Anda jalankan:

cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql

Peringatan:Berhati-hatilah dengan apa yang Anda lakukan karena Anda akan menimpa database Anda jika Anda melakukan kesalahan.

Ke mana dari sini?

Jika Anda mencadangkan server Anda, pertimbangkan untuk menyalin file secara otomatis ke server lain dan memulihkannya secara otomatis, ini memungkinkan Anda untuk memiliki salinan produksi dari database tertentu untuk tujuan pengujian dan audit internal.


Linux
  1. FAQ Penerapan MySQL

  2. Optimalkan database MySQL

  3. Cara Membuat Database di MySQL dengan MySQL Workbench

  1. Konfigurasikan cadangan basis data MSSQL

  2. Terhubung ke database MySQL dari jarak jauh

  3. Impor Database MySQL

  1. Cara menyalin database MySQL

  2. Tingkatkan caching Database MySQL

  3. Ganti nama basis data MySQL