解決辦法
之前遇到過MySQL本地可以連接但是遠程連不上的問題,沒有記錄,今天又遇到這個問題,記錄一下解決過程(MySQL版本5.5)。
1.先將mysql服務(wù)停掉
/etc/init.d/mysqld stop
2.查看mysql配置文件
vim /etc/my.cnf
****特別要注意****
bind_address和skip_networking
在bind_address前加個"#"進行注釋氮采,或者改為:bind-address = 0.0.0.0 允許任意IP訪問;或者指定自己需要遠程訪問的IP地址染苛。
bind_address一定不能為127.0.0.1鹊漠,否則只能在本地連接主到;
skip_networking一定不能出現(xiàn),否則只接受unix socket而不能提供tcp socket服務(wù)躯概;
建議把兩者都注釋掉登钥。
3.重啟mysql服務(wù)
/etc/init.d/mysqld start
4.對用戶授權(quán),允許指定用戶遠程訪問娶靡,最簡單的方式是將mysql庫中user表中的對應(yīng)的用戶的host設(shè)置為%牧牢,亦即允許該用戶從任意ip遠程訪問
方法一:
use mysql;
update user set host = '%' where user = 'root'; //這個命令執(zhí)行錯誤時可略過
flush privileges;
select host, user from user; //檢查‘%’ 是否插入到數(shù)據(jù)庫中
方法二:
grant all privileges on *.* to root@"%" identified by "password" with grant option;
第一行命令解釋如下,*.*:第一個*代表數(shù)據(jù)庫名姿锭;第二個*代表表名塔鳍。
這里的意思是所有數(shù)據(jù)庫里的所有表都授權(quán)給用戶,如果只是授權(quán)某數(shù)據(jù)庫或數(shù)據(jù)庫下某張表呻此,則把*替換成你所需的數(shù)據(jù)庫名和表明即可轮纫。
root:授予root賬號。%:表示授權(quán)的用戶IP可以指定焚鲜,這里代表任意的IP地址都能訪問MySQL數(shù)據(jù)庫掌唾。
password:分配賬號對應(yīng)的密碼,這里密碼自己替換成你的 root帳號密碼
5.一般情況下此時就能滿足遠程訪問的要求忿磅,但對于某些系統(tǒng)還需要檢查防火墻設(shè)置糯彬,和ip訪問策略,以防系統(tǒng)對網(wǎng)絡(luò)訪問的限制造成無法遠程訪問mysql
對于CentOS系統(tǒng)而言贝乎,最好檢測iptables設(shè)置。具體步驟如下:
5.1 暫停iptables服務(wù)
service iptables stop
5.2 查看iptables配置文件
vim /etc/sysconfig/iptables
5.3 也許會看到如下內(nèi)容
:OUTPUT ACCEPT [1009120:257185920]
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
#-A INPUT -s 118.144.89.18 -p tcp -m tcp --dport 3306 -j ACCEPT
#-A INPUT -s 123.127.177.239 -p tcp -m tcp --dport 3306 -j ACCEPT
建議直接開放3306端口叽粹,而不是僅限定某個ip才可以訪問3306
5.4 重啟iptables服務(wù)
service iptables start
參考資料
CentOS下mysql遠程連接的失敗的解決方法
MySQL本地可以連接览效,遠程連接不上的問題
linux配置mysql數(shù)據(jù)庫遠程連接失敗的解決方法