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.

相关推荐
定偶28 分钟前
MySQL多表连接查询详解
c语言·数据库·mysql
bamboolm1 小时前
java mysql 权限状态、流程问题
数据库·mysql
怣501 小时前
MySQL排序分组限制:零基础速成语法(零基础入门版)
数据库·mysql
曾几何时`2 小时前
Docker容器化部署编译运行模块
运维·docker·容器
小天源2 小时前
银河麒麟 V10(x86_64)离线安装 MySQL 8.0
android·mysql·adb·麒麟v10
crossaspeed3 小时前
MySQL的MVCC
数据库·mysql
luoluoal3 小时前
基于opencv的疲劳检测系统(源码+文档)
python·mysql·django·毕业设计·源码
直饮水观察哨3 小时前
商用净水器亲测对比,哪个更专业?
容器
怣503 小时前
MySQL表筛选分组全解析:排序、分组与限制的艺术
数据库·mysql
Suchadar4 小时前
Docker基础命令(二)——数据卷管理端口映射与容器互联
运维·docker·容器