MySQL, dari localhost kepada IP Address

Thursday, August 02, 2012

Situasi
Install MySQL pada localhost, tetapi apabila hendak digunakan, kita dikehendaki menggunakan alamat IP, bukan localhost.

Sesetengah tempat, mereka tidak benarkan menggunakan perkataan 'localhost'. Mungkin nampak tidak secure atau tidak professional.

Penyelesaian
Di sini kita jadikan PHP sebagai contoh untuk diuji. Manakala IP localhost adalah 12.34.56.78.

Biasanya kita guna.

 $con = mysql_connect("localhost","loginsaya","mypassword");  


Tetapi dikehendaki menggunakan IP.
 $con = mysql_connect("12.34.56.78","loginsaya","mypassword");  


Apabila dijalankan connection seperti di atas, kita akan dapat error sebegini
 Could not connect: Can't connect to MySQL server on '12.34.56.78' (111)  


Itu bermakna, kita perlu setting alamat IP localhost kita pada setting MySQL.

Jadi, update file my.cnf. Lokasinya perlu dicari. Biasanya ada di /etc/. Dalam kes saya, ia ada di /etc/mysql/my.cnf
 vi /etc/mysql/my.cnf  


Cari setting bind-address, dan masukkan IP untuk localhost tersebut. Setting ini berada di bahagian [mysqld]. Secara default, bind-address = 127.0.0.1
 [mysqld]  
 bind-address      = 12.34.56.78  


Save. Kemudian, restart mysql.
 /etc/init.d/mysql restart  


Kemudian, cuba jalankan semula. Done.

Masalah lagi
Sesetengah keadaan, masih juga belum boleh membaca database. Keluar error sebegini pula.
 Could not connect: Host '10.1.9.79' is not allowed to connect to this MySQL server  


Ini bermakna, apabila user "loginsaya" itu menggunakan IP Address, tiada privilege untuk akses database tersebut. Berikan privilege.

Masuk ke screen database dan jalankan script grant privilege ini.
 GRANT ALL PRIVILEGES ON  
 namaDatabase.*   
 TO  
 'loginsaya'@'%';  
 FLUSH PRIVILEGES;  


Jika database tersebut tidak menggunakan password, privilege di atas adalah betul. Jika tidak, ia akan keluar error sebegini.
 Could not connect: Access denied for user 'loginsaya'@'12.34.56.78' (using password: YES)  


Jalankan semula script di atas, dengan menambah perkataan identified by password.

 GRANT ALL PRIVILEGES ON  
 namaDatabase.*   
 TO  
 'loginsaya'@'%'  
 IDENTIFIED BY 'mypassword';  
 FLUSH PRIVILEGES;  


Done.