[PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 MODUL 8 PRAKTIKUM BASIS DATA TERDISTRIBUSI “Replikasi MySql” Pendahuluan Replikasi database berfungsi untuk mirroring database antar 2 server atau lebih. Dengan satu server sebagai master dan server-server lain sebagai slave. Setiap kali update data dilakukan di server master, akan secara otomatis diupdatekan ke server-server slave, dengan demikian isi database semua server akan sama. Database pada server slave ini dapat berfungsi sebagai backup database. Ketika replikasi berjalan, statemen SQL yang merubah data disimpan kedalam file binary log(bin.log) pada server master. Hanya statemen SQL yang merubah data saja yang akan disimpan didalam file log. Sebelum memulai konfigurasi, agar replikasi berjalan dengan lancar perlu diperhatikan bahwa: • Percobaan replikasi membutuhkan minimal 2 komputer dengan versi mysql yang sama. • Catat IP Adress dari masing-masing komputer, dan tentukan mana yang menjadi master dan yang menjadi slave. • Log MySql harus aktif. • Innodb harus aktif. • Pastikan database tidak sedang diakses. • Database yang akan digunakan adalah database x, load database x ke server master. Konfigurasi Master Database Buka dan edit file my.ini atau my.cnf yang terletak pada direktori bin pada mysql. Atur agar membolehkan (enable) networking untuk MySQL, sehingga MySQL di mesin ini bisa diakses dari jaringan/berbagai IP Address. Caranya dengan memastikan pada my.cnf (biasanya di /etc/mysql/my.cnf) 2 baris, ’skip-networking’ dan ‘bind-address=127.0.0.1″ tidak aktif dengan menambahkan karakter komentar (#) di awal barisnya, sehingga menjadi: # skip-networking # bind-address = 127.0.0.1 1 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 Selanjutnya setup lokasi file log-bin, nama database (di praktikum ini kita akan menggunakan database x) dan id-server (id_server=1 digunakan untuk master, sedangkan slave dapat menggunakan id 2 dan/atau seterusnya; log-bin = mysql-bin.log binlog-do-db=x server-id=1 restart MySQL untuk menerapkan konfigurasi baru tesebut. Setelah itu, melalui command prompt, masuk ke dalam mysql dengan perintah di terminal mysql -u root -p, di terminal ketika connect ke MySQL maka prompt-nya akan berubah menjadi mysql> . Nah disini kita akan membuat user baru database MySQL yang akan diberi hak untuk melakukan replikasi; mysql> GRANT REPLICATION SLAVE ON *.* TO ’u_slave’@’%’ IDENTIFIED BY ‘123456’; mysql> FLUSH PRIVILEGES; ket= username ’u_slave’ dan password ‘123456’ silahkan diganti sesuai keinginan perintah diatas akan melakukan insert ke dalam database mysql tabel user. untuk memeriksa, dapat dilihat dengan perintah: mysql> use mysql; mysql> select * from user where user = ‘u_slave’; Setelah itu kita ambil informasi binary log dari database yang kita ingin replikasi, mysql> USE x; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; Maka akan muncul keluaran yang mirip seperti ini; +——————+———-+————–+——————+ 2 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+——————+ | mysql-bin.000002 | 107 | x | | +——————+———-+————–+——————+ 1 row in set (0.00 sec) Simpan informasi ini untuk digunakan pada konfigurasi di mesin Slave. Setelah itu jangan lupa unlock dulu semua table tadi, dan keluar dengan perintah; mysql> UNLOCK TABLES; mysql> FLUSH PRIVILEGES; mysql> exit; Selanjutnya backup database x yang akan kita replikasi, untuk nantinya kita restore di Slave agar kondisi database di kedua mesin adalah sama. ingat, database harus sama agar tidak ada perbedaan data antara server master dengan server slave. Ini bisa dilakukan di terminal dengan perintah; C:\xampp\mysql\bin > mysqldump -u root –p x > x.sql hasil backup akan tersimpan di C:\xampp\mysql\bin\x.sql. Silakan di cek! Konfigurasi Slave Database Dari command promt, masuk ke MySQL, setelah itu kita buat database baru bernama x sama seperti di Master, dan langsung keluar; mysql> CREATE DATABASE x; mysql> exit; masih dari command prompt, restore backup database x dari Master dengan perintah C:\mysql\bin\ > mysql -u root –p x < x.sql 3 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 Selanjutnya konfigurasi file my.cnf atau my.ini di server slave, sesuai dengan konfigurasi jaringan dan Master sebelumnya; server-id=2 replicate-do-db=x Ket: • nilai server-id, dapat diganti dengan angkat integer positif selain 1 yang sudah dipakai oleh Master • replicate-do-db adalah database pada master yang akan direplikasi. Restart MySQL agar konfigurasi baru bisa berjalan. Kemudian masuk lagi ke command prompt mysql dan jalankan, perintah berikut: mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.2′, MASTER_USER=’u_slave’, MASTER_PASSWORD=’123456‘, MASTER_LOG_FILE=’mysql-bin.000002‘, MASTER_LOG_POS=107; mysql> START SLAVE; mysql> FLUSH PRIVILEGES; mysql> exit; Ket: Isian parameter MASTER disesuaikan dengan server master-nya. Pengujian Untuk melihat status slave dapat dilakukan dari command prompt mysql pada server slave dengan perintah: mysql > show slave status\G; Catat hasilnya! Berikutnya anda coba menambah data pada server master, seperti misal perintah berikut: mysql> use x; mysql > insert into produk values(‘P0004’,’Gula’,’S0002’,’K2’,’10000’,’30’,’0’); mysql> select * from produk; 4 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 Catat hasilnya! Ada berapa baris? Selanjutnya anda periksa di server slave apakah penambahan data yang sebelumnya juga terreplikasi dengan perintah berikut: mysql> use x;; mysql> select * from produk; Bagaimana hasilnya? Apakah sama dengan data pada server master? 5 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 MODUL 8 PRAKTIKUM BASIS DATA TERDISTRIBUSI “Replikasi MySql” Pendahuluan Replikasi database berfungsi untuk mirroring database antar 2 server atau lebih. Dengan satu server sebagai master dan server-server lain sebagai slave. Setiap kali update data dilakukan di server master, akan secara otomatis diupdatekan ke server-server slave, dengan demikian isi database semua server akan sama. Database pada server slave ini dapat berfungsi sebagai backup database. Ketika replikasi berjalan, statemen SQL yang merubah data disimpan kedalam file binary log(bin.log) pada server master. Hanya statemen SQL yang merubah data saja yang akan disimpan didalam file log. Sebelum memulai konfigurasi, agar replikasi berjalan dengan lancar perlu diperhatikan bahwa: • Percobaan replikasi membutuhkan minimal 2 komputer dengan versi mysql yang sama. • Catat IP Adress dari masing-masing komputer, dan tentukan mana yang menjadi master dan yang menjadi slave. • Log MySql harus aktif. • Innodb harus aktif. • Pastikan database tidak sedang diakses. • Database yang akan digunakan adalah database x, load database x ke server master. Konfigurasi Master Database Buka dan edit file my.ini atau my.cnf yang terletak pada direktori bin pada mysql. Atur agar membolehkan (enable) networking untuk MySQL, sehingga MySQL di mesin ini bisa diakses dari jaringan/berbagai IP Address. Caranya dengan memastikan pada my.cnf (biasanya di /etc/mysql/my.cnf) 2 baris, ’skip-networking’ dan ‘bind-address=127.0.0.1″ tidak aktif dengan menambahkan karakter komentar (#) di awal barisnya, sehingga menjadi: # skip-networking # bind-address = 127.0.0.1 1 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 Selanjutnya setup lokasi file log-bin, nama database (di praktikum ini kita akan menggunakan database x) dan id-server (id_server=1 digunakan untuk master, sedangkan slave dapat menggunakan id 2 dan/atau seterusnya; log-bin = mysql-bin.log binlog-do-db=x server-id=1 restart MySQL untuk menerapkan konfigurasi baru tesebut. Setelah itu, melalui command prompt, masuk ke dalam mysql dengan perintah di terminal mysql -u root -p, di terminal ketika connect ke MySQL maka prompt-nya akan berubah menjadi mysql> . Nah disini kita akan membuat user baru database MySQL yang akan diberi hak untuk melakukan replikasi; mysql> GRANT REPLICATION SLAVE ON *.* TO ’u_slave’@’%’ IDENTIFIED BY ‘123456’; mysql> FLUSH PRIVILEGES; ket= username ’u_slave’ dan password ‘123456’ silahkan diganti sesuai keinginan perintah diatas akan melakukan insert ke dalam database mysql tabel user. untuk memeriksa, dapat dilihat dengan perintah: mysql> use mysql; mysql> select * from user where user = ‘u_slave’; Setelah itu kita ambil informasi binary log dari database yang kita ingin replikasi, mysql> USE x; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; Maka akan muncul keluaran yang mirip seperti ini; +——————+———-+————–+——————+ 2 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+——————+ | mysql-bin.000002 | 107 | x | | +——————+———-+————–+——————+ 1 row in set (0.00 sec) Simpan informasi ini untuk digunakan pada konfigurasi di mesin Slave. Setelah itu jangan lupa unlock dulu semua table tadi, dan keluar dengan perintah; mysql> UNLOCK TABLES; mysql> FLUSH PRIVILEGES; mysql> exit; Selanjutnya backup database x yang akan kita replikasi, untuk nantinya kita restore di Slave agar kondisi database di kedua mesin adalah sama. ingat, database harus sama agar tidak ada perbedaan data antara server master dengan server slave. Ini bisa dilakukan di terminal dengan perintah; C:\xampp\mysql\bin > mysqldump -u root –p x > x.sql hasil backup akan tersimpan di C:\xampp\mysql\bin\x.sql. Silakan di cek! Konfigurasi Slave Database Dari command promt, masuk ke MySQL, setelah itu kita buat database baru bernama x sama seperti di Master, dan langsung keluar; mysql> CREATE DATABASE x; mysql> exit; masih dari command prompt, restore backup database x dari Master dengan perintah C:\mysql\bin\ > mysql -u root –p x < x.sql 3 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 Selanjutnya konfigurasi file my.cnf atau my.ini di server slave, sesuai dengan konfigurasi jaringan dan Master sebelumnya; server-id=2 replicate-do-db=x Ket: • nilai server-id, dapat diganti dengan angkat integer positif selain 1 yang sudah dipakai oleh Master • replicate-do-db adalah database pada master yang akan direplikasi. Restart MySQL agar konfigurasi baru bisa berjalan. Kemudian masuk lagi ke command prompt mysql dan jalankan, perintah berikut: mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.2′, MASTER_USER=’u_slave’, MASTER_PASSWORD=’123456‘, MASTER_LOG_FILE=’mysql-bin.000002‘, MASTER_LOG_POS=107; mysql> START SLAVE; mysql> FLUSH PRIVILEGES; mysql> exit; Ket: Isian parameter MASTER disesuaikan dengan server master-nya. Pengujian Untuk melihat status slave dapat dilakukan dari command prompt mysql pada server slave dengan perintah: mysql > show slave status\G; Catat hasilnya! Berikutnya anda coba menambah data pada server master, seperti misal perintah berikut: mysql> use x; mysql > insert into produk values(‘P0004’,’Gula’,’S0002’,’K2’,’10000’,’30’,’0’); mysql> select * from produk; 4 [PRAKTIKUM BASIS DATA TERDISTRIBUSI D3 TI UNS] February 28, 2012 Catat hasilnya! Ada berapa baris? Selanjutnya anda periksa di server slave apakah penambahan data yang sebelumnya juga terreplikasi dengan perintah berikut: mysql> use x;; mysql> select * from produk; Bagaimana hasilnya? Apakah sama dengan data pada server master? 5