Cara Mengaktifkan Akses Remote MySQL Database Server


server rack

Secara default akses MySQL hanya diijinkan diakses dari server dimana MySQL tersebut diinstall (localhost). Nah, adakalanya kita ingin mengaktifkan akses remote MySQL agar database di server tersebut bisa diakses atau digunakan di server lain. Alasannya ada banyak, antara lain server tersebut memang dikhususkan sebagai server yang mengelola database, sementara webserver diletakkan di server lain. Atau bisa juga karena webserver menggunakan load-balancing sehingga membutuhkan satu database yang sama namun dapat diakses dari dua server berbeda.

server rack

Oke langsung saja ke tutorial. Pertama, edit konfigurasi MySQL nya.
Di Ubuntu dan Debian :

nano /etc/mysql/my.cnf

Di CentOS / RedHat :

nano /etc/my.cnf

Lalu cari

[mysqld]

Selanjutnya kalian tambahkan comment ( # ) pada skip-networking.
Lalu tambahkan bind-address= ip_address_server
Contohnya seperti ini :

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
bind-address    = 127.0.0.1
bind-address    = 192.168.1.29
#skip-external-locking
#
# Instead of skip-networking the default is now to listen only on

Silahkan sesuaikan sendiri ya. Selanjutnya restart MySQL service.

service mysql restart

Selanjutnya adalah membuat user database yang dapat diakses dari server lain (user remote database).

CREATE USER ‘remoteuser’@’%’ IDENTIFIED BY ‘passwordremote’;

GRANT ALL ON databaseku.* TO ‘remoteuser’@’%’;

Nah, jika pengaturannya seperti diatas, remote mysql bisa dilakukan dari dari mana saja. Artinya kalau tiba-tiba database kita bocor (leaked by hacker), dia bisa melakukan remote database dari komputernya.

Disini kita akan meng-allow database hanya boleh diakses dari ip webserver nya saja. Anggap saja disini ip mysql-server adalah 192.168.1.29 dan ip webserver adalah 192.168.1.30, masukkan rule berikut ke iptables :

iptables -I INPUT 8 -p tcp -s 192.168.1.30 –sport 1024:65535 -d 192.168.1.29 –dport 3306 -m state –state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp -s 192.168.1.29 –sport 3306 -d 192.168.1.30 –dport 1024:65535 -m state –state ESTABLISHED -j ACCEPT

Selanjutnya di state terakhir, drop koneksi keluar maupun masuk.

-A INPUT -j DROP
-A OUTPUT -j DROP

Oke sekarang kita coba test login database dari komputer.

mysql remoteuser -h 192.168.1.29 -p

Pasti tidak akan tersambung karena di block. Tapi kalo remote login dilakukan dari ip webserver (yang dalam contoh ini adalah 192.168.1.30), makan akan tersambung ke database.