nodejs鏈接遠端mysql,這個折騰了一個上午才搞定。本以為,直接使用就OK了,但是發現不行,後來查閱各種資料後,終於找到了方法。
nodejs鏈接遠端數據庫主要分為幾個步驟:
1)安裝node-mysql驅動包
2)配置mysql數據庫
3)設置系統防火牆
一 安裝node-mysql安裝包,或許這個是比較簡單的,直接采用npm安裝工具安裝就可以了,npm install mysql --save
二 配置mysql數據庫
mysql服務器端配置遠端訪問數據庫的用戶名和密碼,這個可以通過直接修改mysql數據庫下的user表,增加自己的用戶名和密碼,或者通過grant 授權的方式給要訪問數據的用戶名和設置訪問權限,起主要的語句為:
grant select,insert ,update on 數據庫.表 to username@'hostname' identified by 'password'
flush privileges;
同時要注意的是:
(1)flush privileges 一定要執行,修改完mysql配置之後,需要重啟,我用的是ubuntu12.04 server 所以我的重啟命令是 /etc/init.d/mysql restart;
(2) 還要注意mysql的配置文件的配置: /etc/mysql/my.cnf 其中,如果要進行remote access 的話,那麼需要把bind-address:地址改為0.0.0.0.
(3)注意myqls.user表中的,用戶名對應的host,如果僅是特定的地址或域名,那麼一定要指定,如果是任意的地址,那麼改為%即可。
三 防火牆的設置
我的訪問數據庫服務器的策略是通過windows下的web站點(nodejs)訪問遠端linux下的mysql ,所以首先需要ping通網絡,如果網絡ping的時候,沒有問題,那麼就需要通過 telnet工具訪問遠端借口是否可以訪問。如telnet ip port,如果訪問有問題的話,那麼說明linux下的防火牆配置有問題,需要放開3306端口的流量進入。
配置防火牆,需要修改或則增加iptables的規則,在unbuntu12.04 server, 下可以通過iptables -L 查看防火牆的配置。
然後通過 ,iptables命令去修改防火牆配置。由於我的目標主要是想放開3306端口,所以我就采用了如下的命令設置防火牆。
iptables -A INPUT -p tcp -i eth0 --dport 3306 -j ACCEPT
防火牆設置之後,需要保存 iptables -save.
想要防火牆下次啟動時仍然有效,需要把規則保存到獨立的文件中,下次啟動的時候隨著系統的啟動,防火牆自動進行配置。假設防火牆配置規則保存到iptable.rules文件中, 那麼在保存的時候,需要使用
iptable-save >> iptables.rules
然後設置開機啟動自動配置,修改/etc/network/interfaces文件,在對應的網卡下增加:
pre-up iptables-restore < /etc/iptables-rules. 保存即可。
從而完成了防火牆的配置。
比較簡單,但是折騰了很久,記錄一下。