Cara Mengaktifkan Remote Access MySQL Database Server - AMING.id™
Hi, guys! welcome to my blog, AMING.id™ | Register/Sign In

Wednesday, 15 April 2015

Cara Mengaktifkan Remote Access MySQL Database Server

Secara default akses remote ke server database MySQL dinonaktifkan untuk alasan keamanan. Namun kadang kita juga membutuhkan akses remote ke server database dari sebuah server web. Posting ini akan menjelaskan bagaimana men-setup akun pengguna dan mer-remote akses server mysql pada Linux atau Unix-like systems.

MySQL Server Remote Access

Anda perlu menjalankan perintah berikut yang akan memungkinkan koneksi remote ke server mysql.
  1. Langkah # 1: Login menggunakan SSH (jika server berada di luar data center Anda)
    Pertama, masuk lewat SSH ke remote MySQL database server. Anda mungkin perlu untuk login ke server MySQL Anda sebagai root user:
    ssh user@server1.cyberciti.biz
    ### login as the root using su or sudo ##
    su
    #sudo -s

    atau langsung login sebagai user root:

    ssh root@server1.domain.com
  2. Langkah # 2: Edit file my.cnf

    Setelah terhubung Anda perlu mengedit konfigurasi MySQL file server my.cnf menggunakan editor teks seperti vi:
    1. Jika Anda menggunakan Debian Linux terletak di lokasi /etc/mysql/my.cnf.
    2. Jika Anda menggunakan Red Hat Linux/Fedora/Centos Linux terletak di lokasi /etc/my.cnf.
    3. Jika Anda menggunakan FreeBSD Anda perlu membuat sebuah file pada /var/db/mysql/my.cnf.

    Mengedit /etc/my.cnf:

    # vi /etc/my.cnf
  3. Langkah #3: Setelah file dibuka, cari baris yang berbunyi sebagai berikut:
    [mysqld]
    Pastikan baris skip-networking adalah komentar (atau menghapus baris) dan tambahkan baris berikut
    bind-address=SERVER-IP-ANDA

    Sebagai contoh, jika server IP MySQL Anda adalah 65.55.55.2 maka seluruh blok harus terlihat seperti sebagai berikut:
    [mysqld]
    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
    language = /usr/share/mysql/English
    bind-address = 65.55.55.2
    # skip-networking
    ....
    ..
    ....

    Dimana,
    • bind-address: alamat IP untuk mengikat.
    • skip-networking: Jangan perhatikan koneksi TCP/IP. Semua interaksi dengan mysqld harus dilakukan melalui soket Unix. Pilihan ini sangat dianjurkan untuk sistem di mana hanya permintaan lokal diperbolehkan. Karena Anda perlu untuk memungkinkan koneksi remote baris ini harus dihapus dari my.cnf atau meletakkannya dalam script.

  4. Langkah #4: Simpan dan Tutup file

    Jika Anda menggunakan Debian / Ubuntu Linux, ketik perintah berikut untuk me-restart server mysql:
    # /etc/init.d/mysql restart

    Jika Anda menggunakan RHEL / CentOS / Fedora / Scientific Linux, ketik perintah berikut untuk me-restart server mysql:
    # /etc/init.d/mysqld restart

    Jika Anda menggunakan FreeBSD, ketik perintah berikut untuk me-restart server mysql:
    # /usr/local/etc/rc.d/mysql-server stop
    # /usr/local/etc/rc.d/mysql-server start

    atau
    # /usr/local/etc/rc.d/mysql-server restart
  5. Langkah #5: Grant access ke alamat IP
    Terhubung ke server mysql:
    $ mysql -u root -p mysql

    Memberikan akses ke database baru

    Jika Anda ingin menambahkan database baru yang disebut foo untuk user bar dan remote IP 202.54.10.20 maka Anda perlu mengetik perintah berikut pada prompt mysql>:
    mysql> CREATE DATABASE foo;
    mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';

    Bagaimana cara Memberikan Akses Sebuah database yang ada?

    Mari kita berasumsi bahwa Anda selalu membuat koneksi dari remote IP disebut 202.54.10.20 untuk database yang disebut webdb untuk pengguna webadmin, Untuk memberikan akses ke alamat IP ini ketik perintah berikut Pada prompt mysql> untuk database yang sudah ada, masukkan:
    mysql> update db set Host='202.54.10.20' where Db='webdb';
    mysql> update user set Host='202.54.10.20' where user='webadmin';
  6. Langkah # 6: Keluar dari MySQL

    Perintah exit Type logout mysql:
    mysql> exit
  7. Langkah # 7: Buka port 3306

    Anda perlu membuka port TCP 3306 menggunakan iptables atau BSD pf firewall.
    Contoh iptables untuk membuka Linux iptables firewall
    /sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

    ATAU hanya mengijinkan koneksi remote dari server web Anda yang berada di 10.5.1.3:
    /sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT

    ATAU hanya mengijinkan koneksi remote dari Anda lan subnet 192.168.1.0/24:
    /sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT

    Akhirnya, simpanlah rules (perintah spesifik RHEL/CentOS):
    # service iptables save

    Contoh FreeBSD / OpenBSD / NetBSD pf firewall rule (/etc/pf.conf)

    Gunakan perintah berikut untuk membuka port # 3306 pada sistem berbasis BSD:
    pass in on $ext_if proto tcp from any to any port 3306

    ATAU hanya mengijinkan akses dari server web Anda berada di 10.5.1.3:
    pass in on $ext_if proto tcp from 10.5.1.3 to any port 3306 flags S/SA synproxy state
  8. Langkah #8: Uji coba

    Dari sistem remote atau desktop Anda ketik perintah berikut:
    $ mysql -u webadmin –h 65.55.55.2 –p

    Dimana,
    • u webadmin: webadmin adalah username MySQL
    • IP h atau hostname: 65.55.55.2 adalah alamat server MySQL IP atau hostname (FQDN)
    • -p: Konfirmasi password
    Anda juga dapat menggunakan telnet atau nc perintah untuk terhubung ke port 3306 untuk tujuan pengujian:
    $ echo X | telnet -e X 65.55.55.2 3306

    ATAU
    $ nc -z -w1 65.55.55.2 3306
  9. Contoh Output:
    Connection to 65.55.55.2 3306 port [tcp/mysql] succeeded!
by Aming.