Backup-Restore Data di MySQL

Sebagai seorang DBA, backup merupakan pekerjaan wajib yang harus dilakukan sewaktu-waktu untuk menjaga keberadaan dan keamanan (dalam hal ini keutuhan) data-data yang tersimpan dalam database. Hal ini tentu dilakukan untuk menghindari kejadian-kejadian yang tidak diinginkan; yang mungkin tidak dapat kita prediksikan sebelumnya. Seberapa sering kita harus melakukan backup tentu tergantung dari kebutuhan database yang kita olah. Sebagai contoh, apabila kita mengolah database untuk kepentingan pemberitaan, mungkin kita perlu melakukan backup data per hari (sering disebut dengan backup harian atau daily backup). Namun untuk kebutuhan data-data tertentu yang perubahan datanya tidak terlalu sering, mungkin juga kita hanya perlu untuk melakukan backup secara rutin pada setiap pekan, atau bahkan setiap bulan.

Bila dibandingkan dengan proses backup dan restore data di Oracle, proses backup dan restore di MySQL ‘mungkin’ dapat dikatakan jauh lebih sederhana. Pasalnya, di sini kita tidak perlu direpotkan dengan melakukan hal-hal lain yang biasa kita lakukan di dalam Oracle, seperti: melakukan penyalinan (copy) datafile, control file, dan redo log file.

Dalam MySQL sendiri, terdapat beberapa cara yang dapat digunakan untuk melakukan roses backup dan restore, diantaranya adalah sebagai berikut:

  • · Untuk proses Backup
  1. Menggunakan perintah BACKUP
  2. Menggunakan statemen SELECT INTO
  3. Menggunakan tool MYSQLDUMP
  4. Menggunakan tool MYSQLHOTCOPY
  5. Melakukan penyalinan file secara langsung
  • Untuk proses Restore
  1. Menggunakan perintah RESTORE
  2. Menggunakan statemen LOAD DATA INFILE

Melalui artikel yang saya peroleh ini saya ingin menunjukkan kepada Anda apa saja langkah-langkah yang diperlukan untuk melakukan pekerjaan backup dan restore data di dalam MySQL. Adapun cara yang akan saya gunakan di sini hanya BACKUP dan SELECT INTO (untuk proses backup) serta RESTORE dan LOAD DATA (untuk proses restore). Artikel ini sengaja saya susun dengan logat tutorial, dengan harapan Anda dapat langsung mempraktekannya secara mudah dan cepat.

Untuk memudahkan Anda dalam memahami artikel ini, coba Anda buat terlebih dahulu sebuah database baru dengan menggunakan perintah CREATE DATABASE. Selanjutnya buatlah dua buah tabel contoh dan masukkan data-data dummy ke dalamnya. Berikut ini langkah-langkah awal yang perlu dilakukan:

  • Aktifkan direktori BIN di mana software MySQL Anda di-install
  • Tuliskan perintah berikut pada command-prompt yang tersedia

C:\MySQL\bin\mysql –u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.0.15-nt
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> create database latihdb;
Query OK, 1 row affected (0.11 sec)
mysql> use latihdb;
Database changed
mysql>

Perintah di atas akan membuat sebuah database baru dengan nama LATIHDB serta mengaktifkannya dengan perintah USE.

  • Buatlah dua buah tabel contoh (misalnya PEGAWAI dan JABATAN) dengan menggunakan perintah SQL di bawah ini.

mysql> create table jabatan (
-> kode_jabatan char(4) not null,
-> nama_jabatan varchar(25) not null,
-> constraint pk_jabatan primary key(kode_jabatan)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> create table pegawai (
-> nip char(6) not null,
-> nama varchar(25) not null,
-> kode_jabatan char(4),
-> constraint pk_pegawai primary key(nip),
-> constraint fk_pegawai_jabatan foreign key(kode_jabatan)
-> references jabatan(kode_jabatan)
-> );
Query OK, 0 rows affected (0.03 sec)
mysql>

  • Isikan data-data dummy ke dalam kedua buah tabel tersebut, misalnya dengan menggunakan perintah di bawah ini.

mysql> insert into jabatan values(‘J-01’, ‘Manager’);
Query OK, 1 row affected (0.08 sec)
mysql> insert into jabatan values(‘J-02’, ‘Sales Marketing’);
Query OK, 1 row affected (0.00 sec)mysql> insert into jabatan values(‘J-03’, ‘Pimpinan Proyek’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into jabatan values(‘J-04’, ‘Analis Sistem’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into jabatan values(‘J-05’, ‘Programmer’);
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values(‘000001′,’Imam’,’J-01′);
Query OK, 1 row affected (0.03 sec)
mysql> insert into pegawai values(‘000002′,’Dewi’,’J-02′);
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values(‘000003′,’Arif’,’J-03′);
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values(‘000004′,’Camelia’,’J-04′);
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values(‘000005′,’Made’,’J-05′);
Query OK, 1 row affected (0.00 sec)
mysql> insert into pegawai values(‘000006′,’Tatang’,’J-05′);
Query OK, 1 row affected (0.00 sec)
mysql> quit
bye

Menggunakan Perintah BACKUP
Salah satu cara termudah untuk melakukan backup data di MySQL adalah dengan menggunakan perintah BACKUP. Namun hal terpenting yang perlu dicatat adalah bahwa perintah ini hanya berlaku untuk tabel-tabel tipe MyISAM.
Berikut ini sintak umum yang digunakan untuk melakukannya.

BACKUP TABLE namatabel TO ‘path_tujuan’;

path_tujuan harus dituliskan secara lengkap, namun tidak perlu disebutkan nama file-nya. Proses ini akan membuat sebuah salinan dari file .frm (definisi) and .MYD (data), tetapi tidak memasukkan file .MYI (index).
Berikut ini langkah-langkah yang diperlukan untuk menggunakan perintah BACKUP.

  • Buatlah path_tujuan, misalnya dengan nama DB_BACKUP di dalam drive C.
  • Tuliskan perintah BACKUP, seperti yang tampak pada kode di bawah ini.

mysql> backup table pegawai, jabatan to ‘c:\db_backup’;
+—————–+——–+———-+————————————-+
| Table | Op | Msg_type | Msg_text |
+—————–+——–+———-+————————————-+
| latihdb.pegawai | backup | error | Failed copying .frm file (errno: 2) |
| latihdb.pegawai | backup | status | Operation failed |
| latihdb.jabatan | backup | error | Failed copying .frm file (errno: 2) |
| latihdb.jabatan | backup | status | Operation failed |
+—————–+——–+———-+————————————-+
4 rows in set (0.03 sec)
mysql>

Kenapa proses backup di atas tidak berhasil? Masalahnya adalah kita harus menggunakan double backslash (\\) pada saat menuliskan path tujuan. Perhatikan perintah di bawah ini yang merupakan perbaikan dari kode di atas.

mysql> backup table pegawai, jabatan to ‘c:\\db_backup’;
+—————–+——–+———-+———-+
| Table | Op | Msg_type | Msg_text |
+—————–+——–+———-+———-+
| latihdb.pegawai | backup | status | OK |
| latihdb.jabatan | backup | status | OK |
+—————–+——–+———-+———-+
2 rows in set (0.03 sec)
mysql>

Menggunakan Statemen SELECT INTO
Perintah ini sama mudahnya dengan cara yang pertama (dengan menggunakan perintah BACKUP). Hanya yang perlu untuk diperhatikan di sini adalah bahwa perintah ini hanya berlaku untuk melakukan backup per tabel. Berikut ini sintak umum dari penggunaan statemen SELECT INTO.

SELECT daftar_kolom FROM nama_tabel INTO OUTFILE nama_file;

Berikut ini contoh yang akan menunjukkan bagaimana cara melakukan backup terhadap tabel PEGAWAI.

mysql> select * from pegawai into outfile ‘c:\\db_backup\\peg.dmp’;
Query OK, 6 rows affected (0.02 sec)
Perintah di atas akan membentuk sebuah file baru dengan nama PEG.DMP di dalam
direktori C:\DB_BACKUP, yang merupakan file hasil dari proses backup.

Menggunakan Perintah RESTORE
Perintah ini merupakan kebalikan dari perintah BACKUP. Fungsi dari perintah RESTORE adalah untuk melakukan restore terhadap data-data yang sebelumnya telah dibackup dengan menggunakan perintah BACKUP. Berikut ini bentuk umum dari penggunaan perintah RESTORE.

RESTORE TABLE nama_tabel FROM ‘path_tujuan’;

Penting sekali untuk diperhatikan bahwa perintah di atas tidak akan bekerja bila tabel tujuan masih ada di dalam database. Perhatikan contoh perintah di bawah ini.

mysql> restore table pegawai from ‘c:\\db_backup’;
+———+———+———-+———————————————+
| Table | Op | Msg_type | Msg_text |
+———+———+———-+———————————————+
| pegawai | restore | error | table exists, will not overwrite on restore |
+———+———+———-+———————————————+
1 row in set (0.00 sec)
mysql>

Error yang dimunculkan di atas disebabkan tabel pegawai masih terdapat di dalam database. Dan untuk mengatasi hal ini, maka kita harus menghapus tabel tersebut terlebih dahulu, yaitu dengan menggunakan perintah DROP TABLE, seperti berikut:

mysql> drop table pegawai;
Query OK, 0 rows affected (0.00 sec)
mysql> restore table pegawai from ‘c:\\db_backup’;
+—————–+———+———-+———-+
| Table | Op | Msg_type | Msg_text |
+—————–+———+———-+———-+
| latihdb.pegawai | restore | status | OK |
+—————–+———+———-+———-+
1 row in set (0.01 sec)
mysql>

Menggunakan Perintah LOAD DATA
Perintah ini merupakan kebalikan dari perintah SELECT INTO. Artinya, bila kita melakukan backup dengan perintah SELECT INTO, maka proses restore-nya perlu menggunakan LOAD DATA. Berikut ini bentuk umum untuk melakukan restore data dengan menggunakan perintah LOAD DATA.

LOAD DATA INFILE nama_file INTO TABLE nama_tabel;

Contoh:

mysql> load data infile ‘c:\\db_backup\\peg.dmp’ into table pegawai;
ERROR 1062: Duplicate entry ‘000001’ for key 1

Kesalahan di atas disebabkan dalam database masih mengandung data yang sama dengan data yang terdapat dalam file backup. Untuk mengatasi hal ini kita seharusnya menggunakan klausa IGNORE atau REPLACE, sehingga perintahnya akan tampak seperti berikut:

mysql> load data infile ‘c:\\db_backup\\peg.dmp’ ignore into table pegawai;
Query OK, 0 rows affected (0.00 sec)
Records: 6 Deleted: 0 Skipped: 6 Warnings: 0
mysql> load data infile ‘c:\\db_backup\\peg.dmp’ replace into table pegawai;
Query OK, 12 rows affected (0.00 sec)
Records: 6 Deleted: 6 Skipped: 0 Warnings: 0
mysql> select * from pegawai;
+——–+———+————–+
| nip | nama | kode_jabatan |
+——–+———+————–+
| 000001 | Imam | J-01 |
| 000002 | Dewi | J-02 |
| 000003 | Arif | J-03 |
| 000004 | Camelia | J-04 |
| 000005 | Made | J-05 |
| 000006 | Tatang | J-05 |
+——–+———+————–+
6 rows in set (0.00 sec)
mysql>

6 thoughts on “Backup-Restore Data di MySQL

  1. ekodok 20 Oktober 2008 pukul 8:14 pm

    persis kayak dimari. tulisan sampeyan kena bajak kah?😀
    http://zhopio-girlz.blogspot.com/2008/08/proses-back-up-dan-restore-data-di.html

  2. eksa 21 Oktober 2008 pukul 9:09 pm

    weleh-weleh…ga masalah mas, yang penting khan berbagi info. kadang blog ini ga keliatan digogle tp sapa tau diblog lain yang punya info sama malah muncul. Namanya juga berbagi ilmu…hehehe

  3. astawan 21 April 2009 pukul 12:10 pm

    kalau tablenya banyak dan datanya mencapai ratusan ribu, kira2 repot nggak dengan cara diatas, masalah backup dan restore adalah masalah yang paling saya risaukan di mysql. saya pernah dengan katanya kalau pakai mysqlhotcopy katanya lebih cepan dan handal, tetapi saya belum pernah coba.
    BTW terima kasih..

  4. ridwan 10 Agustus 2010 pukul 12:59 pm

    maf pak……… gamana kalo perintah langsung lewat vbx dipublikaskan biar lebih rinci terutama menggunakan type inodb

  5. eko 16 Oktober 2010 pukul 12:13 pm

    gimana kalo servernya bener-bener koit, minimal gak bisa booting??? satu satunya jalan ambil hardisknya tapi gimana caranya restore ???

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: