Cara Barbar Backup MySQL

Ada kalanya saya ingin melakukan backup untuk setiap table atau view menjadi sebuah script SQL yang mewakili table atau view tersebut. Setelah baca-baca manual alhasil nihil. Wah, mesti diakalin nih pikir saya. Pertama-tama yang saya cari adalah daemon mysqld dengan cara sebagai berikut :

[root@gondor ~]# whereis mysqld
mysqld: /usr/libexec/mysqld /usr/share/man/man8/mysqld.8.gz

Langkah selanjutnya ialah mencari dimanakah MySQL menyimpan data. Cara yang saya lakukan adalah dengan menjalankan perintah berikut :

[root@gondor ~]# /usr/libexec/mysqld --verbose --help | grep '^datadir'
datadir                           /var/lib/mysql/

Rupanya MySQL menyimpan data di folder /var/lib/mysql/. Saya coba intip folder tersebut dengan menjalankan perintah ini :

[root@gondor ~]# ls -xFl /var/lib/mysql/
total 111024
-rw-rw---- 1 mysql mysql 102760448 2009-11-24 16:09 ibdata1
-rw-rw---- 1 mysql mysql   5242880 2009-11-24 16:09 ib_logfile0
-rw-rw---- 1 mysql mysql   5242880 2009-11-24 11:44 ib_logfile1
drwx------ 2 mysql mysql      4096 2009-02-16 14:15 mysql/
drwx------ 2 mysql mysql      4096 2009-03-04 13:58 sample_db/
drwx------ 2 mysql mysql      4096 2009-02-16 14:15 test/

Rupanya terdapat 3 (tiga) buah database yaitu mysql, sample_db dan test. Agar lebih terstruktur dan tidak berserakan saya biasanya membuat sebuah folder baru seperti berikut ini :

[root@gondor ~]# mkdir -v MySQL-Backup-Test
mkdir: created directory `MySQL-Backup-Test'

Kemudian saya masuk ke folder tersebut atau istilahnya masuk ke working directory yang baru saja dibuat.

[root@gondor ~]# cd MySQL-Backup-Test/
[root@gondor MySQL-Backup-Test]# pwd
/root/MySQL-Backup-Test

Biasanya untuk melakukan backup suatu database secara keseluruhan--sebagai contoh saya backup database yang bernama mysql kemudian saya simpan pada sebuah file yang bernama backup.sql--saya lakukan perintah di bawah ini :

[root@gondor MySQL-Backup-Test]# mysqldump --compact --complete-insert --user=root --password=mypass mysql > backup.sql
[root@gondor MySQL-Backup-Test]# /bin/ls -xFl
total 392
-rw-r--r-- 1 root root 395384 2009-11-24 23:21 backup.sql

Seperti terlihat di atas saya backup database yang bernama mysql kemudian hasilnya disimpan pada sebuah file yang bernama backup.sql. Tapi apabila saya ingin simpan setiap tabel atau view menjadi sebuah file script SQL yang bersesuaian saya lakukan sebagai berikut :

[root@gondor MySQL-Backup-Test]# for filename in /var/lib/mysql/mysql/*.frm; do mysqldump --compact --complete-insert --user=root --password=mypass mysql `basename $filename .frm` > `basename ${filename%.frm}.sql`; done
[root@gondor MySQL-Backup-Test]# ls -xFl
total 828
-rw-r--r-- 1 root root 395384 2009-11-24 23:21 backup.sql
-rw-r--r-- 1 root root    785 2009-11-24 23:29 columns_priv.sql
-rw-r--r-- 1 root root   3915 2009-11-24 23:29 db.sql
-rw-r--r-- 1 root root    482 2009-11-24 23:29 func.sql
-rw-r--r-- 1 root root   1635 2009-11-24 23:29 help_category.sql
-rw-r--r-- 1 root root   6875 2009-11-24 23:29 help_keyword.sql
-rw-r--r-- 1 root root   8281 2009-11-24 23:29 help_relation.sql
-rw-r--r-- 1 root root 359994 2009-11-24 23:29 help_topic.sql
-rw-r--r-- 1 root root   1650 2009-11-24 23:29 host.sql
-rw-r--r-- 1 root root    881 2009-11-24 23:29 procs_priv.sql
-rw-r--r-- 1 root root   1699 2009-11-24 23:29 proc.sql
-rw-r--r-- 1 root root    969 2009-11-24 23:29 tables_priv.sql
-rw-r--r-- 1 root root    365 2009-11-24 23:29 time_zone_leap_second.sql
-rw-r--r-- 1 root root    321 2009-11-24 23:29 time_zone_name.sql
-rw-r--r-- 1 root root    363 2009-11-24 23:29 time_zone.sql
-rw-r--r-- 1 root root    422 2009-11-24 23:29 time_zone_transition.sql
-rw-r--r-- 1 root root    534 2009-11-24 23:29 time_zone_transition_type.sql
-rw-r--r-- 1 root root   6213 2009-11-24 23:29 user.sql

Seperti terlihat perintah tersebut menghasilkan sebuah file script SQL yang bersesuaian dengan suatu tabel atau view yang terdapat di dalam database mysql. Mungkin cara yang lebih elegan adalah dengan merangkai perintah-perintah tersebut menjadi sebuah shell script atau bahkan ada cara lainnya. Setidaknya inilah cara "akal-akalan" saya dan bagi yang tertarik mencoba saya harap lakukan dengan ekstra hati-hati sebab perintah-perintah sebelumnya tersebut dijalankan sebagai root. Selamat mencoba.

Informasi sistem GNU/Linux yang saya gunakan adalah Fedora 9 (Linux gondor.rings.tld 2.6.27.25-78.2.56.fc9.i686.PAE #1 SMP Thu Jun 18 12:36:07 EDT 2009 i686 i686 i386 GNU/Linux). Informasi diperoleh dengan menggunakan perintah uname -a.

Syndicate content