今天在ubuntu 12.04安裝了mysql , 使用命令:
sudo apt-get install mysql-server mysql-client
安裝
安裝以後啟動正常,但是發現mysqld 服務只監聽3306端口的127.0.0.1 ip地址,
sudo netstat -ntlp
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5459/mysqld
於是上網查了一下,發現時由於my.cnf配置文件中
bind-address = 127.0.0.1
這說明它之間聽來自127.0.0.1的請求,於是,我停掉了mysql 服務,然後修改了該配置文件。
bind-address = 0.0.0.0
這代表mysql 會監聽來自任何IP地址的請求(當然,端口號必須是3306) .
修改的時候我發現該文件為只讀文件,於是,我直接將文件權限改為777
sudo chmod 777 my.cnf
然後,我重啟mysql服務,發現,服務無法重啟,報錯,無日志
無奈之下,我只好卸載mysql 然後重新安裝
sudo apt-get remove mysql-server mysql-client
我發現這種方式無法完全卸載mysql,通過查詢github,我得知,必須加purge參數,從而完整卸載包括配置文件在內的所有文件,同時,必須加上mysql-common
sudo apt-get install remove --purge mysql-server mysql-client mysql-common
重新安裝後,問題依舊:只要更改了配置文件my.cnf, mysql就無法重啟了。
經過多方排查,我發現這是由於我更改了my.cnf權限,使得該文件能夠被任何用戶讀取和修改,這是mysql不允許的。於是,我在更改了my.cnf之後,
重新把權限改回默認權限644,再次重啟mysql,成功
這時候,我用sudo netstat -nltp 查看3306端口監聽情況,發現已經變成:
sudo netstat -ntlptcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5459/mysqld
這意味著mysqld服務已經開始監聽外部ip地址的請求了,但是這不意味著來自外部ip地址的請求有權限操作mysql數據庫,必須為其添加權限:
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
這時候,就可以從外部ip地址訪問數據庫了。