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.
- 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
- Untuk memverifikasi bahwa skrip pencadangan berfungsi, jalankan perintah pencadangan sebagai berikut:
/usr/local/bin/mysql-backups.sh
- 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:
Peringatan:Berhati-hatilah dengan apa yang Anda lakukan karena Anda akan menimpa database Anda jika Anda melakukan kesalahan.
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.
cd /data/db-backups
gunzip db-mybigdatabase-20140305-152229.sql.gz
mysql < db-mybigdatabase-20140305-152229.sql
Ke mana dari sini?