首頁 > 軟體

docker部署mysql後無法連線的解決方式

2022-08-08 14:00:48

1、建立範例命令

docker run -id --name=c_mysql -p 3306:3306 -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.37

2、檢視啟動的範例 docker ps

3、這裡對映的是宿主機的3306埠,我已經把埠開放了

4、在宿主機進行連線

#這個報錯像是mysql不存在,檢視mysql是否啟動

#mysql已啟動,埠也沒有被佔用

5、已經在容器裡面測試了,mysql可以正常連線;在試試將root使用者開放可以任何主機存取

5.1、進入容器,並連線mysql

docker exec -it c_mysql bash
mysql -uroot -p123456

5.2、將root使用者開放所有主機可以存取

mysql> grant all privileges on . to root@‘%'; #授權
mysql> flush privileges; #重新整理許可權表

6、在宿主進再次進行連線測試

#還是不行!!!

7、去百度了一下,覺得是宿主機的路由沒有開啟,來試試看

#一圈回來,發現問題出在宿主機,因為如果要使用mysql命令,就是必須要/usr/bin/目錄下有這個命令。但是我是docker安裝mysql所以,宿主機不能使用mysql連線docker的資料庫,使用遠端工具navicat連線時報的錯,應該是root使用者沒有開啟,任何主機可以存取的許可權。由於上面已經開了,我現在測試navicat是可以遠端連線的

8、上面說到了一個宿主機路由的問題,我們路由沒開的話就會導致宿主機於容器範例網路隔絕,所以是要開啟的。

8.1、檢視路由是否開啟

sysctl net.ipv4.ip_forward

#返回值為1代表路由已開啟,為0就是未開啟

8.2、開啟路由

echo 「net.ipv4.ip_forward = 1」 >>/etc/sysctl.conf #將命令寫入到/etc/sysctl.conf檔案中
sysctl -p #載入核心
sysctl net.ipv4.ip_forward #再次檢視路由是否開啟

補充:Docker裡的Mysql無法連線,連線一段時間超時。ERROR 2013 (HY000): Lost connection to MySQL server at

嘗試使用命令列連線

mysql -h xxx.xxx.xxx.xxx -P 3306 -u root -p 123456

如果報錯:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 "Internal error/check (Not system error)"

請重啟docker服務

然後再次啟動容器

如果不是這種報錯,請檢查Mysql版本,如果為8.0及以上版本;需要注意,該版本密碼認證機制已經升級,有些使用者端未能相容,請使用新的認證方式修改Mysql密碼

還有就是,所登入的使用者是否允許任意主機連線

use mysql;
select user,host from user;

僅允許本地連線:root@localhost

允許任意連線:root@%

如果發現為:root@localhost

不要直接修改此表

可以新建一個使用者,並賦予許可權

#Mysql8.0:

#新增遠端登入使用者
CREATE USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'passwd!';

#賦予許可權
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

總結

到此這篇關於docker部署mysql後無法連線解決的文章就介紹到這了,更多相關docker部署mysql無法連線內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com