【Docker入门】Navicat连接docker下的Mysql数据库服务步骤
Docker常用词
几个从前不太清楚的概念:
- Docker可以认为是vmware或者virtualbox
- 镜像可以认为是 xxx.iso
- 容器可以认为是 virtualbox运行xxx.iso后的系统
连接步骤
1、拉取mysql镜像
docker pull mysql:5.7
2、创建/运行 mysql 容器
docker run -p 3306:3306 --name docmysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- -p, --publish=[], 指定容器暴露的端口
- -name="", 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
- -e, --env=[], 指定环境变量,容器中可以使用该环境变量
- -d, --detach=false, 指定容器运行于前台还是后台,默认为false
这个部分可以采用“数据持久化”的方式,代码可直接通过目录查看第二部分获得
3、获取 mysql 容器ID
docker ps
属性 | 说明 |
---|---|
CONTAINER ID | 容器ID |
IMAGE | 镜像名 |
PORT | 端口 |
NAMES | 容器名 |
4、进入运行成功的mysql容器(根据容器ID)
docker exec -it 9f5c017a16bb /bin/bash
5、进入MySql服务器 密码为:123456
mysql -uroot -p
输入密码打数字看不见不要慌,你就想密码这么私密能让你随便看么,输入后直接回车就可以
6、使用Window系统下的Navicat Premium 连接Docker里的MySql服务
- 主机填docker的ip地址
- 端口填创建容器时-p后的第一个端口
- 密码填-e后写的密码
然后点连接就妥了,有问题大家评论区多多交流,互相学习
数据持久化
正常使用docker启动mysql容器,当关闭容器时,容器中的数据会消失,所以要将mysql容器中的数据持久化到主机上
持久化数据启动mysql容器命令如下:
docker run -p 3306:3306 --name docmysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -v/usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
命令 | 说明 |
---|---|
-p 3306:3306 | 将主机的3306端口映射到Docker容器的3306端口 |
–name mysql | 指定运行的服务的名字为mysql |
-v /usr/local/mysql/data:/var/lib/mysql | 将主机/usr/local/mysql/data目录挂载到容器指定目录 |
-e MYSQL_ROOT_PASSWORD=123456 | 初始化root用户密码为123456 |
-d | 后台运行开启的服务 |
mysql:5.6 | 指定运行的服务和版本 |
在命令指示符里写数据库
命令指示符 win+r 输入cmd 回车
不是吧!这年头不会还有人不知道命令指示符是啥吧,下次问再不会就去跪榴莲吧! docker的使用就要在命令指示符上(包括以上操作)
1、创建数据库foodapp
2、进入foodapp数据库,创建一个user表,有id,name字段
3、执行插入和查询语句
报错2059的解决方案
在一次安装完镜像并成功启动Mysql容器,用Navicat连接报错如下:
报错原因:在拉取镜像的时候,拉取的是默认版本,然后去官网docker hub查看默认版本的 具体版本号,发现latest版本更新到了8.0版本.而Mysql从8.0版本开始,使用的加密规则是 caching_sha2_password,之前的加密规则为mysql_native_password,而Navicat找不到最新的身份验证插件,所以才会出现以上报错
解决办法:修改加密规则为之前的mysql_native_password
- 按照上面的步骤进入Mysql容器,进入之后输入命令(进行远程连接授权)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
- 刷新权限
FLUSH PRIVILEGES;
- 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
- 重置root用户密码,更改密码为password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
- 刷新权限
FLUSH PRIVILEGES;
重新使用Navicat连接,连接成功!
本文部分引用来源于https://blog.csdn.net/qq_40389276/article/details/98871405
加上了一些作为小白的理解,希望能给同是码农小白的朋友一定帮助