我們的專案之前在直接連線的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,如下圖: