Replikasi Database MySQL Master-Slave di Windows

Untuk melakukan proses replikasi dibutuhkan:
Dua atau lebih komputer yang berfungsi sebagai server, satu server berperan sebagai master dan yang lainnya sebagai slave. Adanya koneksi jaringan baik melalui LAN, WAN ataupun Wireless (setting IP Address tidak akan dibahas pada tutorial ini, pembaca dianggap sudah mengerti).

Menguji komunikasi Jaringan
Ping ipaddress-mesin 1
Ping ipaddress-mesin 2
Masuk ke terminal mesin Master dengan perintah berikut:
C:\Xampp\Mysql\bin > mysql –u root
Grant all on *.* to ‘guest’ @‘IP Mesin_Slave’ identified by ‘guest’;
Flush privileges;
Sampai keluar: Query Ok, 0 rows affected (0.1 sec)
Keterangan:
Diantara tanda @ dan tulisan sesudahnya tidak boleh ada spasi.

Menguji Client/Server Mysql
Masuk ke terminal di mesin slave, kemudian login dengan mengetikkan perintah sebagai berikut:
C:\Xampp\Mysql\bin > mysql –h ip_master –u guest –p
Enter password:
Jika login dapat dilakukan dengan munculnya prompt Mysql, maka akses dari client ke server sudah dapat bekerja dengan baik. Sebaliknya jika belum, pastikan user root Mysql di mesin master sudah ditetapkan untuk dapat diakses dari luar host.

Tahap-I, Setting Pada Komputer Master:
Masuk ke terminal mesin Master dengan perintah berikut:
Mysql –u root
Create databases mydatabase;
Use mydatabase;
Create table mytable (kode int(5) not null, nama varchar(15) not null, primary key(kode));
Untuk melihat struktur table, ketikkan perintah: desc mytable;

Melakukan konfigurasi di mesin master:
Bukalah file [my.ini] (lokasinya: c:xampp/mysql/bin.
Edit file [my.ini] dengan mengetikkan perintah berikut: [mysqld], jika sudah ada, jangan diketik lagi.
log-bin=”mysql-log”
binlog-do-db= mydatabase
auto-increment-offset=1
server-id=1
Setelah itu restrart MySQL (Bisa dilakukan manual melalui xampp control panel atau dengan mengetikkan perintah: C:\xampp\mysql_start.bat dan C:\xampp\mysql_stop.bat.
(Perlu diperhatikan, pembuatan user ditahap sebelumnya hanya sekedar untuk menguji komunikasi client/server Mysql. Bagaimanapun untuk user pendistribusian data dibuat tersendiri dengan hak yang sangat restriktif).

Membuat user replikasi di mesin master dengan langkah berikut:
Masuk ke terminal mesin Master dengan perintah berikut: C:\Xampp\Mysql\bin > mysql –u root
Kemudian, ketikkan perintah pembuatan user sebagai berikut:
Create user ‘user’@’%’ identified by ‘user’;
Grant replication slave on *.* to ‘user’ @’192.168.1.2’ identified by ‘user’;
Flush privileges;
Flush tables with read lock;

Memeriksa status master dengan perintah berikut:
 SHOW MASTER STATUS; Perintah ini akan menghasilkan keluaran berikut:
+---------------+----------+--------------+------------------+

| File | Position | Binlog_do_db | Binlog_ignore_db |

+---------------+----------+--------------+------------------+

| mysql-bin.009 | 130 | mydatabase | |

+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Kemudian jalankan perintah unlock berikut: 
UNLOCK TABLES;
Langkah terakhir adalah keluar dari console dengan perintah :
quit; (Dalam kondisi ini, mesin master tidak bias diakses lagi dari mesin slave)
dan exit (keluar dari command prompt)
Kalau databasenya tidak muncul, restart dulu mysql kemudian masuk lagi sebagai root.

Tahap-II, Konfigurasi dan Aktifasi Pada Komputer Slave (bisa lebih dari 1 slave)
Masuk ke Prompt Mysql dan buatlah database yang sama dengan milik master.
C:\Xampp\Mysql\bin > mysql -u root -p{ password yang sesuai dengan user, jika ada };
Create database mydatabase;
Use mydatabase;
Create table mytable (kode int(5) not null, nama varchar(15) not null, primary key(kode));
Untuk melihat struktur table, ketikkan perintah: desc mytable;

Untuk melakukan konfigurasi di mesin slave, Lakukan langkah-langkah berikut:
Buka file [my.ini ],
Edit file [my.ini] dengan mengetikkan perintah berikut:
server-id = 2 “Jika terdapat 2 slave maka slave ke-2 memiliki server-id=3 dan strsnya”,
master-host= IP-MASTER SERVER “Misal : komputer master memiliki IP 192.168.1.1”,
master-user=slave_user,
master-password='some_password',
master-connect-retry=60. 
Keterangan: Tulisan yang berwarna merah tidak berlaku lagi di mysql 5.
replicate-do-db= mydatabase,
auto-increment-offset=2
Setelah itu restart MySQL
Kemudian masuk lagi ke console dengan perintah :
C:\Xampp\Mysql\bin > mysql -u root -p{password yang sesuai dengan user};
Terlebih dahulu matikan mesin slave dengan perintah: STOP SLAVE;

Jalankan perintah berikut untuk menjadikan komputer slave sebagai slave dari komputer 1: (Note:Nilai-nilai atribut berikut harus disesuaikan dengan informasi status master dan konfigurasi utama):
CHANGE MASTER TO MASTER_HOST='IP Master' ,
MASTER_USER='user' ,
MASTER_PASSWORD='user',
MASTER_LOG_FILE='mysql-bin.009',
MASTER_LOG_POS=130;
START SLAVE;
 Nilai master_log_file dan master_log_pos harus merujuk kepada informasi status master terbaru.
Untuk mengetahui bahwa proses replikasi sudah berjalan dengan baik, gunakan perintah berikut: SHOW SLAVE STATUS\G; (Disarankan pakai huruf besar semua).
Periksa apakah “Slave_IO_Running: Yes “ dan “Slave_SQL_Running:Yes”
Selanjutnya ketikkan perintah untuk mengetahui bahwa proses replikasi telah berhasil dengan baik dimana komputer slave siap mengejar operasi penulisan pada server master:
SHOW PROCESSLIST\G;
Langkah terakhir adalah keluar dari console dengan perintah :
quit; dan exit
Selesai.

Test dengan cara masukkan data baru atau edit data lama pada master dan lihat hasilnya pada slave. Secara otomatis slave tersinkronisasi datanya dari master (kedua data sama).
Test dengan insert data:
Insert into mytable values(01,’apasaja’);

Catatan Penting:
Melihat Daftar User MySQL:
Untuk melihat table "user" yang ada di database "mysql", ketikkan perintah berikut:
SELECT * FROM mysql.user;
Jika dengan perintah di atas terlalu panjang, maka bisa mencoba perintah di bawah ini:
SELECT user, password, host FROM mysql.user;
untuk melihat daftar user, password (yang terenkripsi) dan sumber host yang diperbolehkan akses ke server MySQL

Menghapus User:
Untuk menghapus user, ketikkan perintah berikut:
flush privileges;
drop user 'user'@'localhost';
Jika perintah diatas tidak berhasil, maka lakukan langkah berikut:
select user,host from mysql.user where user = '<your-user>';
Jika user-nya ada, maka lakukan langkah berikut untuk menghapus user secara manual:
delete from mysql.user where user='<your-user>' and host = 'localhost';
atau flush privileges;
Penting: Jangan pernah menghapus ‘root’ user