Docker 技术系列之安装多版本Mysql5.6和Mysql5.7
大家好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关。所以这个教程对于在linux系统还是macOS都是通用的,不用担心。
上一篇,我们安装好对应的Docker之后,感受到了它的便利。接下来我们来安装Mysql吧,它在开发中经常需要用到。
MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。
说个痛点,如果是在windows,不可想像,你要安装不同版本的mysql进行测试,而且不想让他们版本之间有什么交集。比如说,公司用着稳定版本的5.6,但是目前市面上比较新的课程都采用mysql5.7 进行教学,想尝尝鲜。这安装简直是一个噩梦,有了docker,轻松就能解决这个问题,端口和配置也不会冲突。
如果是centos安装还好点,如果是通过源码编译安装还是得折腾一会的。所以接下来,我们一起通过docker来安装mysql。
一、查看可用的 MySQL 版本
方式一:网页端访问 MySQL 镜像库地址:
https://hub.docker.com/_/mysql
方式二:我们还可以用命令来查看可用版本。
docker search mysql
看看效果图:
二、官网获取 MySQL 镜像
以下版本供您选择
# 拉取 mysql 5.7
docker 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,可以不需要执行。
创建目录
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=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
sql_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.log
pid-file=/var/run/mysqld/mysqld.pid
涉及比较深的部分,如果有机会更新mysql方面的教程,再讲讲。
总结
1、一句命令即可完成mysql的安装,方便快捷。
2、多实例,不同端口相互之间不影响。
推荐阅读
Docker 技术系列之安装Docker Desktop for Mac
Docker 技术系列之安装多版本Mysql5.6和Mysql5.7的更多相关文章
- Docker 技术系列之安装Docker Desktop for Mac
终于要进入到Docker技术系列了,感谢大家的持续关注. 为什么要选择Docker?因为Docker 轻巧快速,提供了可行.经济.高效的替代方案.举个例子,安装Nginx,Mysql,Redis等常用 ...
- Docker入门系列2 安装
可以从 Docker 社区直接下载可用的模版或镜像. Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Do ...
- Docker学习系列之一——安装篇
一.目的 Docker是目前非常流行的虚拟技术,在云计算领域得到了广泛的应用.国内的阿里.京东等大厂都非常普遍地应用了Docker.本文记录了Docker的基本安装过程及最终运行结果,以期备忘,及和同 ...
- 安装指定版本的docker
安装 Docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE. Docker CE 即社区免费版,Docker EE 即 ...
- CentOS7 安装特定版本的Docker
先卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-late ...
- centos7 卸载和安装最新版本docker-ce,配置阿里云加速
一.yum卸载.安装 1.卸载老版本的 docker 及其相关依赖 sudo yum remove docker docker-common container-selinux docker-seli ...
- Docker学习系列(一):windows下安装docker(转载)
本文目录如下: windows按照docker的基本要求 具体安装步骤 开始使用 安装远程连接工具连接docker 安装中遇到的问题 Docker的更新 Docker中的jupyter windows ...
- Docker探索系列1之docker入门安装与操作
preface docker这种时髦的技术我接触的比较晚,如果不是公司在使用这项技术,估计还得会更晚接触.好了,说下我司现在docker使用的情况.docker在我司是用来跑web服务的,里面的web ...
- docker技术之安装
由于工作原因需要使用docker完成集群的搭建,特此记录一下研究的docker技术. 首先简单的介绍一下docker: Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 L ...
随机推荐
- stack|session|fuss|anniversary
N-COUNT A stack of things is a pile of them. 摞; 堆 例: There were stacks of books on the bedside table ...
- Java IO: 网络
原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 校对:方腾飞 Java中网络的内容或多或少的超出了Java IO的范畴.关于Java网络更多 ...
- [LC] 230. Kth Smallest Element in a BST
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...
- 吴裕雄--天生自然HTML学习笔记:HTML 元素
HTML 文档由 HTML 元素定义. HTML 元素 开始标签 * 元素内容 结束标签 * <p> 这是一个段落 </p> <a href="default. ...
- (七)spring+druid多数据源配置
druid多数据源配置 一.druid简介 Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. ...
- mac下配置开发环境
常用命令 显示隐藏文件 1 defaults write com.apple.finder AppleShowAllFiles -boolean true ; killall Finder 关闭隐藏文 ...
- golang xml解析
第二章里还提到了xml的解析部分.之前有想整理下encoding包下常用的几个文件格式的处理.这次刚好整理下xml的部分.先上例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...
- 迈克尔·乔丹:几百年内AI不会觉醒
此乔丹非飞人乔丹.他是研究统计学和计算机科学家,目前研究的领域正是普通人所说的人工智能.权威的学术搜索引擎Semantic Scholar在2105年做了一项排名,关于计算机科学领域谁最具影响力 ...
- webpack的基本配置(初识)
webpack能根据模块的依赖关系递归地构建一个依赖关系图,当中包含了应用程序所需要的所有模块,最后打包成一个或多个bundle.它有四个核心概念entry.output .loader.plugin ...
- Nginx之负载节点状态监测
前言 nginx做负载均衡性能很好,但是负载中的节点有异常怎么处理呢? 当然是nginx发现某一个节点为异常节点后自动将请求转移至其他节点直至转移到一个正常节点. 为了实现这一步有如下两个解决方案可供 ...