05.02.2011 – replikasi database dengan metode master – slave

replikasi

Berawal dari tingginya cpu usage pada saat client hendak melakukan pencarian data, saya mulai melakukan replikasi database. Sebetulnya replikasi ini sangat banyak manfaatnya, antara lain :

  • Menghindari kemungkinan tidak semua data ter-backup karena saat proses backup data manual dilakukan bisa saja terjadi perubahan data oleh client
  • Apabila server master mengalami kerusakan, database bisa segera dialihkan ke server slave
  • Secara kecepatan akses akan menjadi optimal karena server master digunakan sebagai tempat dilakukan proses secara Insert (Penambahan), Update (Perubahan), dan Delete (Penghapusan), sementara pada server slave digunakan untuk proses Select (Pemilihan)
  • Replikasi master-slave berlangsung secara realtime dimana setiap perubahan pada data server master akan otomatis merubah data pada server slave

Nah, menarik bukan ?

Dan sekarang kita akan mulai melakukan langkah-langkah replikasi database mysql. Sebagai ilustrasi, server master memiliki ip=192.168.0.1 dan server slave memiliki ip=192.168.0.2.

  • Setting pada server master
  1. Login sebagai root, lalu masuk ke mysql console
    [root@gateway ~]# mysql -u root
  2. Create user yang akan dipakai untuk replikasi
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.0.77 Source distribution

    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

    mysql> create user ‘replikasi’@’192.168.0.2′ identified by ‘replikasi’;
    Query OK, 0 rows affected (0.00 sec)

    mysql> grant replication slave on *.* to ‘replikasi’@’192.168.0.2′ identified by ‘replikasi’;
    Query OK, 0 rows affected (0.00 sec)

    mysql > exit;

  3. Kemudian edit file my.cnf dengan editor favorit anda. Tambahkan informasi server master memiliki ID=1, melakukan log dalam format binary ke file /var/lib/mysql/mysql/mysql-bin.log, serta meminta supaya server slave mengabaikan replikasi database mysql.
    [root@gateway ~]# vi /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    port=3306
    max_allowed_packet=128M
    log-bin=/var/lib/mysql/mysql-bin.log
    server-id=1
    binlog-ignore-db=”mysql”

    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1

    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

  4. Kemudian restart mysqld server anda
    [root@gateway ~]# service mysqld restart
  5. Sebagai persiapan, lakukan backup database di server master dengan menggunakan tools favorit anda
  6. Masuk ke mysql console, lalu cek status database master anda
    mysql> show master status;
    +——————+———-+————–+——————+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +——————+———-+————–+——————+
    | mysql-bin.000001 | 50788940 | | mysql |
    +——————+———-+————–+——————+
    1 row in set (0.00 sec)
    Perhatikan nama file mysql-bin.000001 dan position file 50788940
  • Setting pada server slave
  1. Login sebagai root, lalu edit file my.cnf dengan editor favorit anda
    [root@database ~]# vi /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    port=3306
    max_allowed_packet=128M

    server-id=2
    master-host = 192.168.0.1
    master-user = replikasi
    master-password = replikasi
    master-port = 3306

    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1

    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

  2. Lakukan restore database master yang sebelumnya telah anda backup ke server slave
  3. Restart service mysqld pada server slave
    [root@database ~]# service mysqld restart
  4. Masuk ke mysql console, lalu cek status database slave di server anda
    [root@database ~]# mysql -u root
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.0.77 Source distribution

    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

    mysql> stop slave;
    Query OK, 0 rows affected (0.00 sec)

    mysql> change master to master_log_file=’mysql-bin.000001′;
    Query OK, 0 rows affected (0.10 sec)

    mysql> change master to master_log_pos=50788940;
    Query OK, 0 rows affected (0.07 sec)

    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)

  5. Berikut status dari database slave server saya
    mysql> show slave status;

    Slave_IO_State : Waiting for master to send event
    Master_Host : 192.168.0.1
    Master_User : replikasi
    Master_Port : 3306
    Connect_Retry : 60
    Master_Log_File : mysql-bin.000001
    Read_Master_Log_Pos : 50788940
    Relay_Log_File : mysqld-relay-bin.000002
    Relay_Log_Pos : 235
    Relay_Master_Log_File : mysql-bin.000001
    Slave_IO_Running : Yes
    Slave_SQL_Running : Yes
    Replicate_Do_DB :
    Replicate_Ignore_DB :
    Replicate_Do_Table :
    Replicate_Ignore_Table :
    Replicate_Wild_Do_Table :
    Replicate_Wild_Ignore_Table :
    Last_Errno : 0
    Last_Error :
    Skip_Counter : 0
    Exec_Master_Log_Pos : 50788940
    Relay_Log_Space : 235
    Until_Condition : None
    Until_Log_File :
    Until_Log_Pos : 0
    Master_SSL_Allowed : No
    Master_SSL_CA_File :
    Master_SSL_CA_Path :
    Master_SSL_Cert :
    Master_SSL_Cipher :
    Master_SSL_Key :
    Seconds_Behind_Master : 0

    Perlu diperhatikan, line Slave_IO_State : Waiting for master to send event harus ada untuk memastikan replikasi sudah berjalan

Well Done. Prosedur replikasi sudah selesai dilakukan. Perlu juga diperhatikan, apabila anda hendak melakukan replikasi untuk lebih dari 1 database, anda hanya perlu backup database di server master yang diinginkan lalu me-restore-nya ke server slave. Selamat mencoba yah… :)

6 thoughts on “05.02.2011 – replikasi database dengan metode master – slave

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>