我们的项目之前在直接连接的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,如下图: