wsl 环境下用Docker 安装多版本MySQL

场景:为了模拟某项目的环境,且mySQL版本过低,本地使用的是8.0,需要5.0的,所以本地再部署一个。

1、拉取镜像,docker pull mysql5.7

2、在本地系统下,创建三个文件夹,分别是log 、conf、 data,同时需要在conf文件夹下创建my.cnf文件。

PS:mysql在5.0.17之后,不再提供my.cnf文件,但是可以自己创建。

创建三个文件夹的目的是将其进行挂载

XML 复制代码
docker run -d --rm --name mysql5.7 
-v D:\docker\mysql\log:/var/log/mysql 
-v D:\docker\mysql/data:/var/lib/mysql 
-v D:\docker\conf:/etc/mysql/conf.d  
-e MYSQL_ROOT_PASSWORD=123456 
-p 6306:3306 
-d mysql5.7

PS:

1、Windows下,执行长命令的时候,不要回车 加 " \ " ,windows识别不了,简单粗暴的方法及时直接将回车删掉。

2、-p 为端口映射,意思为将宿主机6306的端口映射到容器3306端口上【前提该服务确实是在3306端口启动的,否则你通过Navicat等工具无法连接上,但是mySQL服务能否启起来和-p配置无关系】

3、进入数据库,docker exec -it mysql5.7 bash

可以通过输入mysql -uroot -p123456 -e "show variables like 'character_set_server'"; 来查看你的my.cnf是否被正确读取了,默认是latin1,如果发现是这个,就要排查一下挂载是否正确。

我的my.cnf文件内容如下:

XML 复制代码
[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
init_connect="SET collation_connection = utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4"
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-name-resolve

老生常谈:有的人说需要额外配置一下 root 的localhost 改成 % ,这里统一说一下,mysql5.7 是不需要配置的,docker run后,就支持远程连接。

可以通过进入mysql数据库, select Host,User from User; 发现root 已经是 % 了。

一个大坑:

由于本地启了多个mySQL服务,当时想着端口冲突,其中一个写了 -p 3306: 3306 ,另一个写了 3307:3307 ,导致3307的服务docker中是成功运行的,但是通过Navicat远程连接的时候一直连不上,后面将3306的那个服务关了之后,将3307的改成3306后,能成功脸上,恍然大悟.... 端口映射写错了。

前者是暴露在宿主机上的,即windows上,如果有多个服务,这个确实是要变动的。

后者是暴露在容器内的,每个容器是独立的,所以写一样的也没任何关系,他们之间没有联系,如果你写了3307,请确保你的服务确实是在该容器的3307端口运行的,否则报错:

2013 - Lost connection to MYSQL server at 'waitting for initial communication packet System error.

相关推荐
不做菜鸟的网工3 分钟前
使用docker部署Speedtest-X内网测试网站
docker
tc&42 分钟前
为什么 Kamailio 模块封装的 MySQL 函数能有效防范 SQL 注入?
数据库·sql·mysql·网络攻击模型·kamailio
cookqq1 小时前
Java+MySQL时区难题-Date自动转换String差8小时
数据库·mysql
sugarzhangnotes1 小时前
MySQL 8.0升级中的字符集陷阱与解决方案
android·数据库·mysql
❀͜͡傀儡师1 小时前
docker部署Apache Answer 一款高效问答平台
docker·容器·apache
1***43801 小时前
技术文章大纲:用MySQL玩转数据可视化数据库连接与数据查询基础
数据库·mysql·信息可视化
WangYaolove13141 小时前
基于深度学习的身份证识别考勤系统(源码+文档)
python·mysql·django·毕业设计·源码
szm02251 小时前
Mysql
数据库·mysql
DCTANT1 小时前
【原创】使用更优雅的方式改造MyBatisPlus逻辑删除插件
spring boot·后端·mysql·kotlin·mybatis·mybatisplus
鸠摩智首席音效师2 小时前
MySQL ERROR 1114 (HY000): The table is full
数据库·mysql