NetCore專案實戰篇08---Docker掛載mysql並連線.netCoreWeb

zhengwei_cq發表於2020-05-30

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

1、 安裝docker

下載地址:

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

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

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

2、 安裝完成後檢視版本:docker –version

 

 

3、 設定一下映象倉庫吧,點選桌面右下角下的docer小圖示,右鍵settings進入:

加入http://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,如下圖:

 

相關文章