Docker04 部署MySQL

Posted Silent1376

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker04 部署MySQL相关的知识,希望对你有一定的参考价值。

从官网上拉取最新mysql镜像:

docker pull mysql:latest

 

创建并运行一个MySQL镜像的容器

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

即使该容器实例运行失败,也表示它是创建成功的,已经存在

 

命令参数的解释?

-itd
-d: 后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name mysql-test
设置该容器实例的名称标识

-p 3306:3306 
映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务

-e MYSQL_ROOT_PASSWORD=123456 mysql
设置 MySQL 服务 root 用户的密码。

如果物理机的已经运行了本地安装的MySQL并占用了3306端口,应该更改为3307或者其他端口

【如果这个容器异常无法使用,直接移除容器重新创建即可】

 

移除容器实例:

docker rm mysql-test

 

修改端口设置并重新执行运行命令

docker run -itd --name mysql-test -p 3307:3307 -e MYSQL_ROOT_PASSWORD=123456 mysql

 

我们访问MySQL容器,需要先进入这个容器:

docker exec -it 容器名称标识 bash

这里刚刚进入MySQL容器马上就退出了

再次启动就报错说容器没有运行

 

百度得知容器实例是因为Linux内存导致的

使用指令查看内存

free -h

算了玩不了。。。

 

然后使用TOP命令查看Linux所有进程使用情况:

发现本地安装的MYSQL服务内存占用高的离谱,于是立刻停止服务了

 

重新创建运行容器实例,这回正常了:

输入密码123456,访问成功:

 

使用本机的SQLyog访问测试,记住是3307端口

发现错误2003代码:

很可能是因为防火墙没开放这个端口

 

先退出容器:

防火墙开放3307端口,重启之后再看看

但是还是没有用,可能因为MYSQL8.021版本远程用户需要创建新用户才可以使用

 

进入容器实例,进入MySQL:

更改加密规则:

ALTER USER \'root\'@localhost IDENTIFIED BY \'password\' PASSWORD EXPIRE NEVER;

创建一个远程用户:

CREATE USER \'daizhizhou\'@\'%\' IDENTIFIED WITH mysql_native_password BY \'123456\';

然后赋予完整权限:

GRANT ALL PRIVILEGES ON *.* TO \'daizhizhou\'@\'%\';

最后刷新权限:

flush privileges;

使用远程账号访问还是不行,但是到这里我才明白是因为之前设置的端口号原因导致的:

删除这个镜像应该使用这个端口配置,因为mysql默认3306端口,配置3307根本无法监听

所以需要由MySQL镜像的3306配置实际端口的3307:

docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

但是又有新的问题:

这个好解决,回到上面创建新的用户并赋予所有权限,然后刷新权限,访问即可

 

终于反应过来那个配置的解释的话,这样的话就可以本机mysql和容器mysql共存了

 

以上是关于Docker04 部署MySQL的主要内容,如果未能解决你的问题,请参考以下文章

Docker Compose部署Springboot+Mysql项目

docker项目部署

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)

12-Docker-部署SonarQube

UBUNTU 20.04 docker部署 企业级开源局域网IP地址管理系统 Phpipam系统安装设置