Selasa, 28 Juli 2009

Backup dan Restore di MySQL

Email Cetak PDF

I. Pendahuluan

Backup dan recovery merupakan suatu proses penyalinan dan perbaikan data untuk menghindari terjadinya kerusakan data. Hal ini mutlak diperlukan dalam administrasi database, dimana file backup ini nantinya akan menjadi master data yang sewaktu-waktu dibutuhkan. Proses backup pada MySQL dapat dilakukan secara online yaitu ketika server masih hidup atau secara offline yaitu ketika server masih aktif berjalan.

II. Merencanakan dan Mempersiapkan backup

Sebelum membackup database MySQL, ada beberapa yang harus diperhatikan agar proses backup lancar, diantaranya:
a. Menentukan seberapa sering backup
Backup merupakan program rutin seorang administrator database. Maka itu, dia harus melihat kapan waktu yang tepat untuk proses backup. Jika database itu sangat besar dan sering berubah secara konstan setiap hari, maka sebaiknya di rencanakan agar proses backup terjadi setiap hari sehingga data tersebut dapat tersimpan dengan baik. Namun, jika database itu tidak sering berubah setiap hari, maka tidak perlu dilakukan backup setiap hari, mungkin seminggu atau dua minggu sekali proses backup baru dilakukan. Namun hal di atas tergantung dari administrator itu sendiri.

b. Menamakan file backup
Seharusnya kita menamakan file backup secara teratur dan selalu memasukkan tanggal dimana backup terakhir dibuat. Misalnya database kita bernama latihan dan dibackup pada tanggal 18 januari 2009, maka seharusnya diberikan nama file backup tersebut dengan nama latihan.18012009.bkp. Namun, hal ini juga tergantung dari administrator sendiri. Namun, yang harus diperhatikan bahwa penamaan file backup tersebut juga sangat penting apalagi jika kita sering melakukan backup secara regular.

c Menyimpan File Backup
Kita seharusnya membuat kopi dari file backup kita dan menyimpan file tersebut ke computer lain atau penyimpan data yang lain seperti CD atau DVD.

III. Macam-Macam Backup

a. Backup Satu Database
Untuk membackup seluruh database maka format yang digunakan adalah:
# mysqldump -u [username] -p[password] [nama_database] > [nama-file].sql
Misal kita ingin membackup MySQL dengan passwordnya 123456 dari database latihan dan jika sudah dibackup maka namanya adalah latihan, maka perintah diatas menjadi:
# mysqldump -u root -p123456 latihan > latihan.sql

b. Backup Tabel Database
Untuk membackup satu atau lebih tabel yang ada di dalam suatu database maka formatnya adalah sebagai berikut:
# mysqldump -u [username] -p[password] [nama_database] [table1] [table2] ... > [nama-file].sql
Misal kita ingin membackup tabel tes1 dan tes2 yang berada di dalam database latihan dan jika kedua tabel itu sudah dibackup maka namanya adalah duatabel, maka perintah diatas menjadi:
# mysqldump -u root -p123456 latihan tes1 tes2 > duatabel.sql

c. Backup Dua Atau Lebih Database
Jika kita ingin membackup dua atau lebih database menjadi satu maka formatnya adalah sebagai berikut:
# mysqldump -u [username] -p[password] --database [database1] [database2] ... > [namafile].sql
Misal kita ingin menggabungkan database latihan dan database teman digabung menjadi satu dengan nama gabung, maka format diatas menjadi:
# mysqldump -u root -p123456 --database latihan teman > gabung.sql
d. Backup Seluruh Database
Jika kita ingin membackup seluruh database yang berada di Mysql, maka formatnya adalah sebagai berikut:
# mysqldump -u [username] -p[password] --all-databases > [namafile].sql
Misal kita ingin membackup seluruh database yang berada di root dengan nama gabungan, maka format di atas menjadi:
# mysqldump -u root -p123456 --all-databases > gabungan.sql

e. Backup Struktur Data
Jika kita hanya ingin membackup struktur database saja tanpa mengikutsertakan data-datanya maka formatnya sebagai berikut:
# mysqldump -u [username] -p[password] --no-data [database] > [namafile].sql
jika databasesnya lebih dari 1 maka formatnya sebagai berikut:
# mysqldump -u [username] -p[password] --no-data --databases [database1] [database2] > [namafile].sql

f. Backup Kompress Database
Jika kita ingin hasil mengkompres backup database, maka formatnya sebagai berikut:
# mysqldump -u [username] -p[password] [database] | bzip2 -c  > [namafile].sql.bz2
atau
# mysqldump -u [username] -p[password] [database] | gzip -c  > [namafile].sql.gz
Misal kita ingin membackup database latihan dan dikompress menggunakan bzip2 atau gzip dengan nama latihan, maka format di atas menjadi:
# mysqldump -u root -p123456 latihan | bzip2 -c  > latihan.sql.bz2
atau
# mysqldump -u root -p123456 latihan | gzip > latihan.sql.gzip

Jika kita ingin melakukan variasi backup seperti backup seluruh database, backup beberapa tabel saja atau yang lainnya maka hanya diubah sebelum tanda | dengan pola mengikuti format sebelumnya. Misalnya kita ingin membackup seluruh database mysql dan hasilnya berupa kompresan dengan gabungan maka perintahnya:
# mysqldump -u root -p123456 --all-databases | gzip > gabungan.sql.gzip
atau
# mysqldump -u root -p123456 --all-databases | bzip2 -c > gabungan.sql.bz2
Dan perlu diketahui bahwa hasil file kompresan bz2 mempunyai ukuran yang lebih kecil dibandingkan dengan gzip.

g. Skrip Untuk Backup
Kita juga bisa mengunakan skrip bash untuk mempermudah proses backup pada MySQL. Di bawah ini adalah salah satu contoh skrip untuk backup seluruh database:
#!/bin/sh 
mysqldump --all-databases | gzip > /var/backup/backup-`date -I`.sql.gz   
Jika ingin automasi backup, maka gunakan crontab yang caranya bisa dilihat disini.

IV. Macam-Macam Restore

a. Restore Database
Untuk merestore database maka formatnya sebagai berikut:
# mysql -u [username] -p[password]  [database] < [file_backup].sql
misal kita punya file latihan.sql ingin direstore ke database testing maka format diatas menjadi:
# mysql -u root -p123456 testing <>

b. Restore Database Hasil Kompres
Jika file backupnya berupa kompresan, maka untuk kompresan gzip formatnya seperti berikut:
# gunzip < [file_backup] | mysql -u [username] -p[password] [database]
misalnya kita ingin merestore file gabungan.sql.gzip ke database monitoring, maka format diatas berubah menjadi:
# gunzip <>
Begitu juga dengan kompresan bz2, formatnya seperti berikut:
# bunzip2 < [file_backup] | mysql -u [username] -p[password] [database]
misalnya seperti contoh diatas, maka formatnya berubah menjadi:
# bunzip2 <>

c. Backup dan Restore di Server yang lain
Bagaimana caranya agar kita ingin agar file hasil backup database yang lama dipindahkan ke database yang baru yang berbeda server atau ip? Misalnya kita mau membackup database monitoring yang ada di server 192.168.1.3 dan hasil backup akan langsung direstore ke server 192.168.1.2 di database monitoring_baru. Bisa saja kita menggunakan cara konvensional yaitu kita backup dulu database monitoring lalu file backup tersebut kita ftp ke server yang baru lalu kemudian di ekstrak di server baru tersebut. Tapi cara ini kurang efektif. Ada cara yang lebih efektif yaitu kita menggunakan format sebagai berikut:
# mysqldump -u [username] -p[password] [database] | mysql -u [username] -p[password] --host=[alamat_ip] -C [database]
Namun, cara ini mempunyai syarat yaitu adanya grant untuk memberikan hak izin akses bagi user agar dapat mengakses database. Untuk mengetahui lebih jauh tentang grant, silahkan lihat ke sini pada bagian mengakses server mysql di server lain. Di sini diandaikan kita membuat user susan untuk meminta hak akses dari IP 192.168.1.3 di server 192.168.1.2 dan kita membuat database baru yang bernama monitoring_baru.
> create database monitoring_baru; 
> grant all on testing.* to

susan@192.16This e-mail address is being protected from spambots, you need JavaScript enabled to view it .1.3 identified by 'password';
> flush privilleges; 
Jika kita sudah mendapat hak akses atau grant, maka untuk kasus format di atas menjadi:
# mysqldump -u root -p123456 monitoring | mysql -u susan -ppassword --host=192.168.1.2 -C monitoring_baru
Untuk mengeceknya gunakan perintah berikut:
>use monitoring_baru; 
> show tables;
Jika tidak ada error, maka file hasil backup database monitoring akan berada di database monitoring_baru

Referensi

www.devshed.com
http://mrothouse.wordpress.com/

Tidak ada komentar: