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進入:
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,如下圖: