Kasus ini terjadi ketika saya sedang mengerjakan sebuah proyek aplikasi PHP yang memiliki data berskala besar. Akhirnya saya memutuskan untuk merancang server aplikasi dan database terpisah di 2 server, katakanlah server A adalah server yang khusus menyimpan source code aplikasi, server B adalah server yang khusus untuk database.
Database yang digunakan adalah MySQL, sepintas bayangan saya, yang paling penting server A harus selalu terhubung dengan server B, kemudian di aplikasi hanya mengubah host koneksi dengan IP database. Namun setelah dicoba:
1 |
ERROR 1130 (HY000): Host ‘10.20.30.40’ is not allowed to connect to this MySQL server |
Baiklah, berikut adalah yang harus anda perhatikan:
Server A: Aplikasi (Contohnya memiliki IP
10.20.30.40 )
Server B: Database (Contohnya memiliki IP
10.20.30.50 )
Kedua server menggunakan OS Linux Ubuntu 12.04 Server
Ketentuan
Server A harus terhubung dengan server B, baik menggunakan koneksi lokal maupun internet, kedua server ini harus saling terhubung satu sama lain dan harus dipastikan tidak boleh ada loss connection sedikitpun, karena akan ada transaksi data secara realtime di kedua server ketika aplikasi sudah berjalan (Gunakan perintah ping IP di kedua server untuk memastikan kedua server saling terhubung).
Server A di install apache2 nmap php5 (web server) server B di install nmap mysql-server-5.5 (db server)
nmap localhost di server A sehingga menghasilkan open port 80 (Apache), di server B sehingga menghasilkan open port 3306 (MySQL)
Ubah config MySQL
Ubah file berikut di server B
1 |
nano /etc/mysql/my.cnf |
Berikan komentar di baris berikut
1 2 |
#bind-address = 127.0.0.1 #skip-networking |
Simpan, lalu restart MySQL dengan perintah
1 |
/etc/init.d/mysql restart |
Lakukan nmap 10.20.30.50 dari server A, seharusnya anda mendapatkan open port 3306 karena server db sudah tidak mengikat lagi ke lokal server.
Ubah GRANT Privilege
Secara default, MySQL hanya akan melayani hak akses untuk lokal/1 server saja, jadi harus menambahkan hak baru untuk dapat diakses oleh server A
Berikut adalah perintah untuk update hak kepada semua mesin untuk menggunakan server B
1 |
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION; |
Berikut adalah perintah untuk update hak hanya ke mesin yang dipilih untuk menggunakan server B
1 |
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'10.20.30.40' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION; |
Dimana IP 10.20.30.40 adalah IP aplikasi, anda dapat mengubahnya dengan IP server aplikasi anda, dan tentunya, anda dapat mendaftarkan banyak mesin aplikasi.
Jangan lupa untuk mengubah USERNAME dan PASSWORD dengan yang anda tetapkan.
Setelah itu, jalankan perintah berikut
1 |
mysql> FLUSH PRIVILEGES; |
Tes Koneksi
Sekarang, saatnya test koneksi dari yang sebelumnya dibuat
1 |
mysql -h10.20.30.40 -uUSERNAME -pPASSWORD |
Jika anda mendapatkan shell MySQL, anda berarti sudah berhasil terhubung, jangan lupa untuk show databases; untuk melihat daftar database yang akan anda gunakan di server A
Menghapus Akses
Bagaimana jika saya salah/terlanjur memberikan akses?
Berikut adalah perintah mencabut/menghapus akses yang sudah terlanjur dibuat di semua mesin
1 |
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%'; |
Kemudian berikut adalah perintah untuk mencabut/menghapus akses yang sudah terlanjur dibuat di mesin tertentu
1 |
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'10.20.30.40'; |
Jangan lupa untuk
1 |
mysql> FLUSH PRIVILEGES; |
Selamat mencoba 🙂