Docker 技术系列之安装多版本Mysql5.6和Mysql5.7

ops/2024/12/26 15:33:49/
image

大家好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关。所以这个教程对于在linux系统还是macOS都是通用的,不用担心。

上一篇,我们安装好对应的Docker之后,感受到了它的便利。接下来我们来安装Mysql吧,它在开发中经常需要用到。

MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。

说个痛点,如果是在windows,不可想像,你要安装不同版本的mysql进行测试,而且不想让他们版本之间有什么交集。比如说,公司用着稳定版本的5.6,但是目前市面上比较新的课程都采用mysql5.7 进行教学,想尝尝鲜。这安装简直是一个噩梦,有了docker,轻松就能解决这个问题,端口和配置也不会冲突。

image

如果是centos安装还好点,如果是通过源码编译安装还是得折腾一会的。所以接下来,我们一起通过docker来安装mysql

一、查看可用的 MySQL 版本

方式一:网页端访问 MySQL 镜像库地址:

https://hub.docker.com/_/mysql

方式二:我们还可以用命令来查看可用版本。

 docker search mysql

看看效果图:

image

二、官网获取 MySQL 镜像

以下版本供您选择

# 拉取 mysql 5.7docker pull mysql:5.7# 拉取最新版mysql镜像,如果不写后面的版本号则会自动拉取最新版docker pull mysql

这里以5.7版本为例。

docker pull mysql:5.7

第一次拉去,会比较久一点,需要去下载对应的镜像。

三、查看本地镜像

使用以下命令来查看是否已安装了 mysql

docker images

四、运行Mysql容器

安装完成后,我们可以使用以下命令来运行 mysql 容器:

  • 1、创建挂载目录

创建挂载目录,主要是方便修改配置文件达到方便控制的目的。

mkdir -p $HOME/docker/mysql57

是为了方便管理建的目录,主要是表示docker项目下放置的一些配置文件。mysql57表示应用名字

cd $HOME/docker/mysql57
  • 2、运行Mysql容器

方式一:不需要挂载目录(不推荐)

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

方式二:需要挂载目录(推荐)

docker run -p 3306:3306 --name mysql57 \ 
-v $PWD/conf:/etc/mysql \
-v $PWD/logs:/var/log/mysql \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

参数说明

  • –name:容器名,此处命名为mysql57
  • -v :挂载目录
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:源镜像名,此处为 mysql:5.7并后台运行 后面为设置mysql的默认编码

3、选项执行,如果不需要mysql56,可以不需要执行。

image

创建目录

mkdir -p $HOME/docker/mysql56

进去该目录

cd $HOME/docker/mysql56

拉取镜像

docker pull mysql:5.6

mysql5.6 安装

docker run -p 3307:3306 --name mysql56 \
-v $PWD/conf:/etc/mysql \
-v $PWD/logs:/var/log/mysql \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.6 \--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci

可能会遇到的问题,如果一开始没有执行拉取镜像的命令,会自动拉取镜像,然后默认已经创建了一个镜像mysql56,我们通过命令查找回来,然后启动即可。

查看所有容器

docker ps -a

删除容器

docker rm 容器id

启动容器

docker start 容器id

额外提供俩个快速命令

# 停止所有容器docker stop $(docker ps -a -q)# remove删除所有容器$ docker rm $(docker ps -a -q)

五、安装成功

通过 docker ps 命令查看是否安装成功。

docker ps -a

容器状态的Up状态,表示容器正在运行,并且可以看到主机和容器的端口映射关系。

重启mysql容器

docker restart mysql57

查看mysql日志

docker logs -f mysql57

六、Mysql 测试

进入到mysql容器

docker exec -ti mysql57 /bin/bash

参数说明

  • -t 在容器里生产一个伪终端
  • -i 对容器内的标准输入 (STDIN) 进行交互

登陆到mysql服务器

方式一

mysql -h 127.0.0.1 -u root -p

方式二

mysql -u root -p123456

查询测试语句

use mysql;SELECT VERSION(), CURRENT_DATE;

如果需要远程登录的,需要执行授权命令 1、直接让root也可以远程登陆(不建议)

GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;

2、创建一个用户admin远程登陆(建议)

GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY '123456' WITH GRANT OPTION;

3、刷新权限

FLUSH PRIVILEGES;

4、查看用户

select host,user from user;

5、备份数据

$ docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /some/path/on/your/host/all-databases.sql

6、恢复数据

$ docker exec -i mysql57 sh -c 'exec mysql -uroot -p"123456"' < /some/path/on/your/host/all-databases.sql

七、其他配置

  • 1、only_full_group_by 问题

如果安装的版本是 5.7版本, 查询数据时出现如下错误

this is incompatible with sql_mode=only_full_group_by

可以使用使用下列方式解决

  • 2、查询 sql_mode
select @@sql_mode

结果如下

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 3、重置

删除其中的 ONLY_FULL_GROUP_BY配置,重新设置到 config-file.cnf中

[mysqld]# 表名不区分大小写lower_case_table_names=1#server-id=1datadir=/var/lib/mysql#socket=/var/lib/mysql/mysqlx.sock#symbolic-links=0sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

涉及比较深的部分,如果有机会更新mysql方面的教程,再讲讲。

总结

1、一句命令即可完成mysql的安装,方便快捷。

2、多实例,不同端口相互之间不影响。

推荐阅读

Docker 技术系列之安装Docker Desktop for Mac

最后编辑于:2024-12-10 21:55:11


喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.ppmy.cn/ops/144639.html

相关文章

Python 写的 《监控视频存储计算器》

代码&#xff1a; import tkinter as tk from tkinter import ttk import math from tkinter.font import Fontclass StorageCalculator:def __init__(self, root):self.root rootself.root.title("监控视频存储计算器")self.root.geometry("600x800")s…

【WRF教程第3.6期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解&#xff1a;以4.5版本为例 Geogrid/Metgrid 插值选项详解1. 插值方法的工作机制2. 插值方法的详细说明2.1 四点双线性插值&#xff08;four_pt&#xff09;2.2 十六点重叠抛物线插值&#xff08;sixteen_pt&#xff09;2.3 简单四点平均插值&#xff08;av…

【CSS】优化动画性能

最核心要开启gpu加速。 建议使用requestAnimationFrame&#xff0c;如果用js修改元素的位置&#xff0c;推荐使用这个API。 定时器时间不准确&#xff0c;requestAnimationFrame 始终在当前帧的最后执行。 利用css3 translate进行元素移动 在 CSS3 中&#xff0c;可以使用 tr…

opencv中的各种滤波器简介

在 OpenCV 中&#xff0c;滤波器是图像处理中的重要工具&#xff0c;用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。 1. 均值滤波 (Mean Filter) 功能&#xff1a; 对图像进行平滑处理&#xff0c;减少噪声。 应用场景&#xff1a; 去除图像…

docker 容器的基本使用

docker 容器 一、docker是什么&#xff1f; 软件的打包技术&#xff0c;就是将算乱的多个文件打包为一个整体&#xff0c;打包技术在没有docker容器之前&#xff0c;一直是有这种需求的&#xff0c;比如上节课我把我安装的虚拟机给你们打包了&#xff0c;前面的这种打包方式是…

【Where语法全解密】.NET开源ORM框架 SqlSugar 系列

文章目录 前言一、普通表达式查询 Where二、根据SQL查询 where三、动态查询四、动态拼表达式查询 &#xff0c;拼拉姆达五、条件拼接查询六、链式条件查询七、根据Class查询&#xff0c;根据实查询八、根据Class中主键查询九、根据字典查询十、查询函数十一、Where中有子查询十…

component-后端返回图片(数据)前端进行复制到剪切板

1.前言 ‌Base64编码‌&#xff1a;将图片转换为Base64编码的字符串&#xff0c;然后通过HTTP协议传输到前端。前端接收到Base64字符串后&#xff0c;可以通过JavaScript将其解码并显示为图片。这种方式适合小图片&#xff0c;如logo或验证码&#xff0c;因为Base64编码后的字符…

【生成模型之三】ControlNet Latent Diffusion Models论文详解

论文&#xff1a;《Adding Conditional Control to Text-to-Image Diffusion Models》 我们提出了ControlNet&#xff0c;这是一种神经网络架构&#xff0c;可以将空间条件控制添加到大型预训练的文本到图像扩散模型中。ControlNet 冻结了生产就绪的大型扩散模型&#xff0c;并…