NetCore項目實戰篇08—Docker掛載mysql並連接.netCoreWeb

我們的項目之前在直接連接的mysql,今天我們將通過docker掛載mysql 並與我們開發的webapi項目連接。

1、 安裝docker

下載地址:

//download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

下載後直接點下一步就可完成安裝,或參見:

//www.cnblogs.com/stilldream/p/10627831.html

2、 安裝完成後查看版本:docker –version

 

 

3、 設置一下鏡像倉庫吧,點擊桌面右下角下的docer小圖標,右鍵settings進入:

加入//hub-mirror.c.163.com

 

 

4、  下載mysql 鏡像。

進入cmd 輸入命令:docker pull  mysql

 

 

5、等待所有的都下載完成後啟動mysql

docker run -d -p 3306:3306 –name mysql01 mysql/mysql-server

啟動後可以用命令:docker ps  查看到運行的容器。

6、獲取root初始密碼:docker logs mysql01

複製密碼:UP0jkovbOtj3mxEJLyvJeRasIL#

 

 

7、進入docker中的mysql

Docker exec –it mysql01 bash

如果報錯:OCI runtime exec failed:xxx

可用:Docker exec -it mysql01 /bin/sh 命令進入

 

 

8、再輸入:mysql –uroot –p

會提示我們修改密碼:將之前複製的密碼右鍵就可粘貼,回車,會要我們修改密碼

使用:SET  PASSWORD  FOR ‘root’@’localhost’=PASSWORD(‘1230’);

如果不行可能是版本問題,mysql8.0以上就用命令:alter user ‘root’@’localhost’ identified by ‘1230’;

9、修改成功後我們最好不要用root用戶,來創建一個自己的用戶吧:

Create user ‘zhengwei’@’localhost’ identified by ‘1230’;

 

 

10、查看用戶是否創建成功:

select user,host from user  或者用  select user,host from mysql.user

 

 

11、改成任意主機都可以訪問的吧:

update user set host=’%’ where user = ‘zhengwei’;

 

 

12、同樣我的是mysql8.0以上,用以下的sql給用戶賦予所有許可權:

grant all privileges on *.* to ‘zhengwei’@’%’ with grant option;

13、使用navicat連接一下我們的mysql,由於我本機之前是裝了mysql,為了防止衝突,使用exit退出後,執行net stop mysql

 

 

連接時會報錯:

 

 

14、是許可權的問題,再次進入mysql 如何再將進去,請看上面吧,然後刷新許可權:刷新許可權:FLUSH PRIVILEGES,再次連接 ,還是報錯:

 

 

原因:mysql 8.0 默認使用 caching_sha2_password 身份驗證機制;客戶端不支援新的加密方式。

修改用戶(zhengwei)的加密方式:

先查看所有用戶的加密方式:

select host,user,plugin,authentication_string from mysql.user

 

 

將zhengwei的加密方式修改為mysql_native_password

ALTER USER ‘zhengwei’@’%’ IDENTIFIED WITH mysql_native_password BY ‘1230’;

再次連接,終於完美解決,爽:

 

 

15、docker中已安裝好了mysql,那就用我們之前開發的webapi連接這個mysql吧。

16、打開之前創建的.netcore webapi項目(NetCore項目實戰篇01—EFCore CodeFirst For Mysql 資料庫初始化),修改mysql連接

 

 

17、VS中選擇工具->NuGet包管理器->程式包管理器控制台。

輸入命令:Update-Database

記得默認項目要選zhengwei.Use.Api

 

 執行完成後我們用navicat看看資料庫中也生成成功了。

 

 

如果在執行時失敗,可能是因為用戶的許可權問題,我們要回到命令行停止當前的mysql:

命令:docker stop mysql01   再刪除:docker rm mysql01

通過在啟動時加環境變數,因為我們前面已創建了zhengwei這個用戶就直接用這個用戶啟動:

docker run -d -p 3306:3306 -e MYSQL_USER=”zhengwei” -e MYSQL_PASSWORD=”1230″ -e MYSQL_ROOT_PASSWORD=”1230″  –name mysql01 mysql/mysql-server –character-set-server=utf8 –collation-server=utf8_general_ci

 

然後再給用戶授所有的權,都按上面的順序來就可以了。

18、打開postman訪問我們的webapi也是成功的,此時我們連接的mysql是docker容器中運行的mysql,如下圖:

 

Tags: