Replikasi Database MySQL di Linux Ubuntu – Pengantar Belajar Bareng Bulan Juli

Bulan ini Bair kebagian jatah preman untuk ngisi materi di sharing bulanan komunitas Ubuntu SumSel (Minggu, 26 Juli 2009, jam 4). Awalnya sih mau dibikin acara nonton film aja biar penyegaran :), tapi belum nemu film bagus dengan durasi setengah jam yang berkaitan atau sekedar nyinggung open source. Jadi Bair putuskan untuk ngisi dengan ngobrol-ngobrol bebas bin santai seputar database server dengan Linux Ubuntu.

Berhubung bahasan database server cukup luas, maka rencananya akan ada bahasan dan demo yang bisa langsung dilihat dengar dan rasakan oleh yang hadir sebagai pengantar dan pembuka sharing. Nah pembukanya dipilih yang sederhana aja tapi cukup menarik yaitu replikasi database MySQL menggunakan 2 mesin server berbasis Ubuntu.

Jadi sebelum tulis blog ini Bair coba-coba dulu replikasi sederhana dari MySQL, biar langkah-langkahnya bisa langsung dicatat dan dijadikan tutorial di blog, yang harapannya teman-teman yang mau datang bisa baca-baca dulu dan syukur-syukur nyobain, biar hari Minggu ntar kita bisa punya lebih banyak waktu berbicara bahasa yang lebih manusiawi :), dan melebarkan obrolannya ke hal-hal lain yang berkaitan :).

TKP Tes Replikasi MySQL di Ubuntu

TKP Tes Replikasi MySQL di Ubuntu

Supaya ceritanya bikin penasaran *emang ada Ir? hehe*, lanjutan tulisan di bawah ini hanya akan membahas tutorial sederhana replication antara 2 mesin berbasis Ubuntu, dan tidak akan membahas hal lain semisal prinsip-prinsip replikasi, pengertian, kegunaan, dan lain-lain berkaitan dengan replikasi MySQL, jadi kalau ada yang mau bahas silahkan komentar, googling atau datang aja di pertemuan hari Minggu ini :).

OK, monggo disimak dan dibetulkan kalau ada yang keliru tutorialnya (jarang-jarang nih Bair bikin tutorial :D);

I. Pertama-tama siapkan semua kebutuhan yaitu 2 mesin berbasis Ubuntu yang telah diinstal MySQL (kalau bisa versi terbaru, walaupun replikasi sebenarnya sudah tersedia sejak MySQL versi 3.23.15). Nah mesin pertama (misal IP: 192.168.1.100) yang akan kita gunakan sebagai Master dan yang kedua (misal IP: 192.168.1.101) sebagai Slave, pastikan terkoneksi dalam jaringan dan tidak ada masalah dengan port yang digunakan MySQL (defaultnya 3306).

II. Selanjutnya kita mulai dengan mengkonfigurasi mesin Master. Adapun yang harus dilakukan adalah;

a. 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

b. Selanjutnya setup lokasi file log-bin, nama database (di tutorial ini kita akan menggunakan database employee) dan id-server;

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=employee
server-id=1

c. Agar konfigurasi baru bisa langsung berfungsi, silahkan restart MySQL dengan perintah sudo /etc/init.d/mysql restart

d. Setelah itu masuk ke dalam mysql dengan perintah di terminal mysql -u root -p, di terminal ketika connect ke MySQL maka prompt-nya akan berubah dari $ (atau #) menjadi mysql> . Nah disini kita akan membuat user baru database MySQL yang akan diberi hak untuk melakukan replikasi;

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘password_slave_user’;
mysql> FLUSH PRIVILEGES;

ket= username ‘slave_user’ dan password ‘password_slave_user’ silahkan diganti sesuai keinginan

e. Setelah itu kita ambil informasi binary log dari database yang kita ingin replikasi,

mysql> USE employee;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

Maka akan muncul keluaran yang mirip seperti ini;

+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000003 |       98 | employee     |                  |
+——————+———-+————–+——————+
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;

f. Selanjutnya backup database employee yang akan kita replikasi, untuk nantinya kita restore di Slave agar kondisi database di kedua mesin adalah sama. Ini bisa dilakukan di terminal dengan perintah;

$ sudo mysqldump -u root -p<password> –opt employee > employee.sql

III. Langkah selanjutnya adalah mengatur konfigurasi mesin Slave-nya, adapun yang harus dilakukan adalah;

a. Dari terminal kita masuk ke MySQL, setelah itu kita buat database baru bernama employee sama seperti di Master, dan langsung keluar;

mysql> CREATE DATABASE employee;
mysql> exit;

b. Di terminal restore backup database employee dari Master dengan perintah

$ sudo mysql -u root -p<password> employee < /lokasi/folder/employee.sql

c. Selanjutnya konfigurasi file my.cnf di mesin Slave, sesuai dengan konfigurasi jaringan dan Master sebelumnya;

server-id=2
master-host=192.168.1.100
master-user=slave_user
master-password=password_slave_user
master-connect-retry=60
replicate-do-db=employee

Ket: nilai server-id, dapat diganti dengan angkat integer positif selain 1 yang sudah dipakai oleh Master

d. Restart MySQL agar konfigurasi baru bisa berjalan.

e. Kemudian masuk lagi ke mysql di terminal dan jalankan, perintah berikut ini;

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’password_slave_user‘, MASTER_LOG_FILE=’mysql-bin.000003‘, MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> FLUSH PRIVILEGES;
mysql> exit;

IV. Silahkan ditest, harusnya kalau tidak ada langkah yang salah (bisa jadi Anda yang salah mengikuti tutorial ini, atau tutorial Bair memang ada yang salahnya :D) maka jika di Master terjadi perubahan, maka Slave akan ikut-ikutan.

nb: update 090724 – 5 PM; nambahin baris ini (mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’password_slave_user’, MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=98; ) , sorry kelupaan 😀

Sampai ketemu hari Minggu 😀

mysql> CHANGE MASTER TO MASTER_HOST=’192.168.0.6′, MASTER_USER=’slave_user’, MASTER_PASSWORD='<some_password>’, MASTER_LOG_FILE=’mysql-bin.006′, MASTER_LOG_POS=167;

12 thoughts on “Replikasi Database MySQL di Linux Ubuntu – Pengantar Belajar Bareng Bulan Juli

  1. Amin

    Nice tutorial Bro 🙂

    Utk binlog-do-db=employee

    Mau tanya nih bgmn kalau kita mau replicate lebih dari 1 database ?

    Thanks

    Balas
    1. subair Penulis Tulisan

      Untuk lebih dari 1 database, harus dibuatkan dalam banyak baris, jadi misalnya ada 2 database;

      di Master
      —-
      binlog-do-db=employee
      binlog-do-db=database_kedua
      —-
      di Slave
      —-
      replicate-do-db=employee
      replicate-do-db=database_kedua
      —-

      Balas
  2. Ping balik: Sharing pengalaman dan mohon masukannya tentang ePalembang.com « Bair is a geek [??]

  3. Ping balik: Replikasi Database MySQL antara 2 Mesin Berbasis Linux Ubuntu : .:: PLUX™| Palembang Linux ::.

  4. ipur

    tolong mas, pas aq masuk ke “mysql –u root –p” kok keluarnya gini mas…

    mysql Ver 14.12 Distrib 5.0.67, for debian-linux-gnu (i486) using readline 5.2
    Copyright (C) 2000-2008 MySQL AB
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license
    Usage: mysql [OPTIONS] [database]
    -?, –help Display this help and exit.
    -I, –help Synonym for -?
    –auto-rehash Enable automatic rehashing. One doesn’t need to use
    ‘rehash’ to get table and field completion, but startup
    and reconnecting may take a longer time. Disable with
    –disable-auto-rehash.
    -A, –no-auto-rehash
    No automatic rehashing. One has to use ‘rehash’ to get
    table and field completion. This gives a quicker start of
    mysql and disables rehashing on reconnect. WARNING:
    options deprecated; use –disable-auto-rehash instead.
    -B, –batch Don’t use history file. Disable interactive behavior.
    (Enables –silent)
    –character-sets-dir=name
    Directory where character sets are.
    –default-character-set=name
    Set the default character set.
    -c, –comments Preserve comments. Send comments to the server. The
    default is –skip-comments (discard comments), enable
    with –comments
    -C, –compress Use compression in server/client protocol.
    -#, –debug[=#] This is a non-debug version. Catch this and exit
    -D, –database=name Database to use.
    –delimiter=name Delimiter to be used.
    -e, –execute=name Execute command and quit. (Disables –force and history
    file)
    -E, –vertical Print the output of a query (rows) vertically.
    -f, –force Continue even if we get an sql error.
    -G, –named-commands
    Enable named commands. Named commands mean this program’s
    internal commands; see mysql> help . When enabled, the
    named commands can be used from any line of the query,
    otherwise only from the first line, before an enter.
    Disable with –disable-named-commands. This option is
    disabled by default.
    -g, –no-named-commands
    Named commands are disabled. Use \* form only, or use
    named commands only in the beginning of a line ending
    with a semicolon (;) Since version 10.9 the client now
    starts with this option ENABLED by default! Disable with
    ‘-G’. Long format commands still work from the first
    line. WARNING: option deprecated; use
    –disable-named-commands instead.
    -i, –ignore-spaces Ignore space after function names.
    –local-infile Enable/disable LOAD DATA LOCAL INFILE.
    -b, –no-beep Turn off beep on error.
    -h, –host=name Connect to host.
    -H, –html Produce HTML output.
    -X, –xml Produce XML output
    –line-numbers Write line numbers for errors.
    -L, –skip-line-numbers
    Don’t write line number for errors. WARNING: -L is
    deprecated, use long version of this option instead.
    -n, –unbuffered Flush buffer after each query.
    –column-names Write column names in results.
    -N, –skip-column-names
    Don’t write column names in results. WARNING: -N is
    deprecated, use long version of this options instead.
    -O, –set-variable=name
    Change the value of a variable. Please note that this
    option is deprecated; you can set variables directly with
    –variable-name=value.
    –sigint-ignore Ignore SIGINT (CTRL-C)
    -o, –one-database Only update the default database. This is useful for
    skipping updates to other database in the update log.
    –pager[=name] Pager to use to display results. If you don’t supply an
    option the default pager is taken from your ENV variable
    PAGER. Valid pagers are less, more, cat [> filename],
    etc. See interactive help (\h) also. This option does not
    work in batch mode. Disable with –disable-pager. This
    option is disabled by default.
    –no-pager Disable pager and print to stdout. See interactive help
    (\h) also. WARNING: option deprecated; use
    –disable-pager instead.
    -p, –password[=name]
    Password to use when connecting to server. If password is
    not given it’s asked from the tty. WARNING: This is
    insecure as the password is visible for anyone through
    /proc for a short time.
    -P, –port=# Port number to use for connection or 0 for default to, in
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/services, built-in default (3306).
    –prompt=name Set the mysql prompt to this value.
    –protocol=name The protocol of connection (tcp,socket,pipe,memory).
    -q, –quick Don’t cache result, print it row by row. This may slow
    down the server if the output is suspended. Doesn’t use
    history file.
    -r, –raw Write fields without conversion. Used with –batch.
    –reconnect Reconnect if the connection is lost. Disable with
    –disable-reconnect. This option is enabled by default.
    -s, –silent Be more silent. Print results with a tab as separator,
    each row on new line.
    -S, –socket=name Socket file to use for connection.
    –ssl Enable SSL for connection (automatically enabled with
    other flags). Disable with –skip-ssl.
    –ssl-ca=name CA file in PEM format (check OpenSSL docs, implies
    –ssl).
    –ssl-capath=name CA directory (check OpenSSL docs, implies –ssl).
    –ssl-cert=name X509 cert in PEM format (implies –ssl).
    –ssl-cipher=name SSL cipher to use (implies –ssl).
    –ssl-key=name X509 key in PEM format (implies –ssl).
    –ssl-verify-server-cert
    Verify server’s “Common Name” in its cert against
    hostname used when connecting. This option is disabled by
    default.
    -t, –table Output in table format.
    -T, –debug-info Print some debug info at exit.
    –tee=name Append everything into outfile. See interactive help (\h)
    also. Does not work in batch mode. Disable with
    –disable-tee. This option is disabled by default.
    –no-tee Disable outfile. See interactive help (\h) also. WARNING:
    option deprecated; use –disable-tee instead
    -u, –user=name User for login if not current user.
    -U, –safe-updates Only allow UPDATE and DELETE that uses keys.
    -U, –i-am-a-dummy Synonym for option –safe-updates, -U.
    -v, –verbose Write more. (-v -v -v gives the table output format).
    -V, –version Output version information and exit.
    -w, –wait Wait and retry if connection is down.
    –connect_timeout=# Number of seconds before connection timeout.
    –max_allowed_packet=#
    Max packet length to send to, or receive from server
    –net_buffer_length=#
    Buffer for TCP/IP and socket communication
    –select_limit=# Automatic limit for SELECT when using –safe-updates
    –max_join_size=# Automatic limit for rows in a join when using
    –safe-updates
    –secure-auth Refuse client connecting to server if it uses old
    (pre-4.1.1) protocol
    –show-warnings Show warnings after every statement.

    Default options are read from the following files in the given order:
    /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
    The following groups are read: mysql client
    The following options may be given as the first argument:
    –print-defaults Print the program argument list and exit
    –no-defaults Don’t read default options from any options file
    –defaults-file=# Only read default options from the given file #
    –defaults-extra-file=# Read this file after the global files are read

    Variables (–variable-name=value)
    and boolean options {FALSE|TRUE} Value (after reading options)
    ——————————— —————————–
    auto-rehash TRUE
    character-sets-dir (No default value)
    default-character-set latin1
    comments FALSE
    compress FALSE
    database (No default value)
    delimiter ;
    vertical FALSE
    force FALSE
    named-commands FALSE
    local-infile FALSE
    no-beep FALSE
    host (No default value)
    html FALSE
    xml FALSE
    line-numbers TRUE
    unbuffered FALSE
    column-names TRUE
    sigint-ignore FALSE
    port 3306
    prompt mysql>
    quick FALSE
    raw FALSE
    reconnect TRUE
    socket /var/run/mysqld/mysqld.sock
    ssl FALSE
    ssl-ca (No default value)
    ssl-capath (No default value)
    ssl-cert (No default value)
    ssl-cipher (No default value)
    ssl-key (No default value)
    ssl-verify-server-cert FALSE
    table FALSE
    debug-info FALSE
    user (No default value)
    safe-updates FALSE
    i-am-a-dummy FALSE
    connect_timeout 0
    max_allowed_packet 16777216
    net_buffer_length 16384
    select_limit 1000
    max_join_size 1000000
    secure-auth FALSE
    show-warnings FALSE

    tolong kasih penjelasan lewt emailku aja mas…

    ip_zac@yahoo.co.id

    thanks…

    Balas
    1. subair Penulis Tulisan

      Maaf Mas Ipur, komentar ini kelewat dibalas; Oh ya, kalau saya lihat dari text yang dikasih Mas Ipur itu tulisannya mysql –u root –p, kalau saya coba juga keluar pesan error yang sama. Kelihatannya tanda penghubungnya itu masalah disitu menggunakan “–” seharusnya menggunakan “-“, jadi seharunya perintahnya mysql -u root -p.

      Biasanaya kesalahan ini kalau kita copy paste syntax dari browser yang kadang merubah kode penghubung tersebut. CMIIW

      Balas

Tinggalkan komentar