1、首先檢查mysql所在服務(wù)器的防火墻,如果限制了外網(wǎng)對3306端口的連接,那么放開限制
成都創(chuàng)新互聯(lián)公司專注于西林網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供西林營銷型網(wǎng)站建設(shè),西林網(wǎng)站制作、西林網(wǎng)頁設(shè)計、西林網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造西林網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供西林網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
Linux服務(wù)器中執(zhí)行
iptables -L 可以查看當前的防火墻規(guī)則
iptables -F 可以清空所有防火墻規(guī)則
2、確保mysql的監(jiān)聽地址是0.0.0.0
監(jiān)聽地址是0.0.0.0 ,表示該mysql允許所有IP地址進行連接,這是允許遠程連接的基礎(chǔ)
監(jiān)聽地址是127.0.0.1,則代表該mysql只允許所在服務(wù)器本機連接,外網(wǎng)是無法連接的
怎么知道m(xù)ysql的監(jiān)聽地址是多少
Linux服務(wù)器中執(zhí)行如下命令可以查看: netstat -nutlp|grep mysql
3、添加遠程連接mysql的賬號
此步驟是必須要操作的,mysql本身的用戶只能在本機上連接數(shù)據(jù)庫,外網(wǎng)連接的話,需要先添加遠程用戶并授權(quán)。
在mysql命令行模式下,或者phpmyadmin中執(zhí)行sql語句添加遠程連接用戶
grant all on *.* to root@'%' identified by '123456';
flush privileges;
命令解釋:
*.* 第一個*表示庫,第二個*表示表; *.*對全部數(shù)據(jù)庫的全部表授權(quán),so.ok 表示只對so這個庫中的ok表授權(quán)
root 表示要給哪個用戶授權(quán),這個用戶可以是存在的用戶,也可以是不存在的
'%' 表示允許遠程連接的IP地址,%代表允許所有IP連接
只允許某個IP遠程連接,可以寫成'123.123.123.123'
只允許123.123.123.*這個網(wǎng)段遠程連接,可以寫成 '123.123.123.%' '123456' 是設(shè)置授權(quán)用戶的連接密碼
flush privileges; 代表立即刷新權(quán)限表,使添加的用戶生效
上面三步都設(shè)置好了,就可以再次嘗試遠程連接mysql了。
mysql的root賬戶,我在連接時通常用的是localhost或127.0.0.1,公司的測試服務(wù)器上的mysql也是localhost所以我想訪問無法訪問,測試暫停.
解決方法:
1,修改表,登錄mysql數(shù)據(jù)庫,切換到mysql數(shù)據(jù)庫,使用sql語句查看"select host,user from user ;"
mysql -u root -pvmwaremysqluse mysql;
mysqlupdate user set host = '%' where user ='root';
mysqlselect host, user from user;
mysqlflush privileges;注意:最后一句很重要,目的是使修改生效.如果沒有寫,則還是不能進行遠程連接.
2,授權(quán)用戶,你想root使用密碼從任何主機連接到mysql服務(wù)器
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION;
flush privileges;
如果你想允許用戶root從ip為192.168.1.104的主機連接到mysql服務(wù)器
設(shè)置mysql服務(wù)允許外網(wǎng)訪問,修改mysql的配置文件,有的是my.ini,有的是my.cnf【linux】.
1:設(shè)置mysql的配置文件
/etc/mysql/my.cnf
找到 bind-address =127.0.0.1 將其注釋掉;//作用是使得不再只允許本地訪問;
重啟mysql:/etc/init.d/mysql restart;
2:登錄mysql數(shù)據(jù)庫:mysql -u root -p
mysql use mysql;
查詢host值:
mysql select user,host from user;
如果沒有"%"這個host值,就執(zhí)行下面這兩句:
mysql update user set host='%' where user='root';
mysql flush privileges;
或者也可以執(zhí)行:
mysqlgrand all privileges on *.* to root@'%' identifies by ' xxxx';
其中 第一個*表示數(shù)據(jù)庫名;第二個*表示該數(shù)據(jù)庫的表名;如果像上面那樣 *.*的話表示所有到數(shù)據(jù)庫下到所有表都允許訪問;
‘%':表示允許訪問到mysql的ip地址;當然你也可以配置為具體到ip名稱;%表示所有ip均可以訪問;
后面到‘xxxx'為root 用戶的password;
舉例:
任意主機以用戶root和密碼mypwd連接到mysql服務(wù)器
mysql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
mysql flush privileges;
IP為192.168.1.102的主機以用戶myuser和密碼mypwd連接到mysql服務(wù)器
mysql GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.102' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
mysql flush privileges;