ubuntu上mysql允許遠程連接

最近想用docker整理一個linux開發(fā)環(huán)境,打包需要的軟件與配置,在本機起一個docker容器來跑server與mysql進行開發(fā),部署時直接把dockerfile扔到機器上build一下即可。但在本機連接docker里的mysql時碰到了無法訪問的問題,開始以為是docker的問題,后來發(fā)現(xiàn)與docker無關(guān),就是mysql遠程連接的問題?,F(xiàn)象原因與解決方法如下:

  1. 在容器中mysql已啟動,可以在容器終端中進入mysql命令行操作。容器的3306端口映射到宿主機的3307端口。此時我想用宿主機上的db客戶端如mysqlworkbench連接容器中的mysql操作(這里為了方便用終端mysql-client來舉例子,實際報錯一樣)
$ mysql -uroot -h127.0.0.1 -P3307 // 向本地3307端口發(fā)起連接請求,3307對應容器中的3306

發(fā)現(xiàn)報錯:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
  1. 檢查容器中的端口占用:
$ netstat -an | grep 3306
// 輸出
tcp6       0      0 127.0.0.1:3306                  :::*                    LISTEN  

監(jiān)聽端口正常,但卻綁定了本地地址,難怪總是連接不上。于是查了下資料,找到了解決辦法:修改mysql的配置文件(不同版本路徑可能不同,我的版本是5.7.25-0ubuntu0.18.04.2),將bind-address后面增加遠程訪問IP地址或者禁掉這句話。

$ vi /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address          = 127.0.0.1
// 記得重啟哦
$ service mysql restart
  1. 再在宿主機上試一次,發(fā)現(xiàn)還是不行:
ERROR 1130 (HY000): Host '172.17.0.1' is not allowed to connect to this MySQL server

這里172.17.0.1是宿主機在容器所處局域網(wǎng)中的ip地址。
在容器mysql中查詢:

mysql> USE mysql;
mysql> SELECT user, host FROM user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

也就是說,mysql默認只允許root用戶在localhost上登錄。解決方法是為root用戶添加遠程訪問的權(quán)限(或者新增其他用戶,把下面sql中的root改成新的用戶名就行了):

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你希望root遠程訪問時輸入的密碼';
mysql> reflush privileges;

再查一次user表,發(fā)現(xiàn)多了一個root@%。這行是我們用來遠程登錄的root賬戶。注意,root@localhost的密碼可以與root@%不同,遠程登錄只能用我們剛才grant ... identified by ...時輸入的密碼。

mysql> select user,host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

最后再試一次遠程登錄,成功了。

總的來說,要遠程連接mysql,需要兩個步驟:

  1. 使mysql不止綁定localhost;
  2. 在mysql中添加可以遠程訪問的賬號并授權(quán)(這里用root舉例)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容