大家好,后面的就不是关于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的更多相关文章

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

    终于要进入到Docker技术系列了,感谢大家的持续关注. 为什么要选择Docker?因为Docker 轻巧快速,提供了可行.经济.高效的替代方案.举个例子,安装Nginx,Mysql,Redis等常用 ...

  2. Docker入门系列2 安装

    可以从 Docker 社区直接下载可用的模版或镜像. Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Do ...

  3. Docker学习系列之一——安装篇

    一.目的 Docker是目前非常流行的虚拟技术,在云计算领域得到了广泛的应用.国内的阿里.京东等大厂都非常普遍地应用了Docker.本文记录了Docker的基本安装过程及最终运行结果,以期备忘,及和同 ...

  4. 安装指定版本的docker

    安装 Docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE. Docker CE 即社区免费版,Docker EE 即 ...

  5. CentOS7 安装特定版本的Docker

    先卸载旧版本   sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-late ...

  6. centos7 卸载和安装最新版本docker-ce,配置阿里云加速

    一.yum卸载.安装 1.卸载老版本的 docker 及其相关依赖 sudo yum remove docker docker-common container-selinux docker-seli ...

  7. Docker学习系列(一):windows下安装docker(转载)

    本文目录如下: windows按照docker的基本要求 具体安装步骤 开始使用 安装远程连接工具连接docker 安装中遇到的问题 Docker的更新 Docker中的jupyter windows ...

  8. Docker探索系列1之docker入门安装与操作

    preface docker这种时髦的技术我接触的比较晚,如果不是公司在使用这项技术,估计还得会更晚接触.好了,说下我司现在docker使用的情况.docker在我司是用来跑web服务的,里面的web ...

  9. docker技术之安装

    由于工作原因需要使用docker完成集群的搭建,特此记录一下研究的docker技术. 首先简单的介绍一下docker: Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 L ...

随机推荐

  1. 用两个栈实现一个队列(C++)

    分析 栈:后进先出 队列:先进先出 要使用两个栈实现队列(先进先出),主要思路是 1.插入一个元素:直接将元素插入stack1即可. 2.删除一个元素:当stack2不为空时 ,直接弹出栈顶元素,当s ...

  2. RNA sequence单分子直测技术

    生命组学 按照功能分类遗传物质,可能的分类有系统流.操作流.平衡流等等.下面是使用该理论解释DNA与RNA的关系: DNA和RNA有很大不同,DNA存储遗传信息,作为生命活动的最内核物质,如同操作系统 ...

  3. Cortana携手微软学术搜索,变身研究人员最佳个人助理

    编者按:在美国时间7月14日于微软总部雷蒙德召开的2014年微软教育峰会上,负责技术与研究的微软全球执行副总裁沈向洋博士在他的开幕主题演讲中正式宣布,Windows Phone 8.1系统中的虚拟个人 ...

  4. springdatajpa 认识以及使用方式

    1.spingdatajpa是什么? Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架(即上述的:JPA的实现产品),可使开发者用极简 ...

  5. LibreOJ β Round #2」贪心只能过样例

    题目友链:https://loj.ac/problem/515 话说这题蛮简单,bitset暴力直接过. 话不多说,上代码! #include <bits/stdc++.h> using ...

  6. 基于Springboot注解的策略模式

    释义 策略模式和多态很相似 可以理解为定义了一个统一的接口,有许多不同的实现类,可以自由选择不同的实时类去执行. 实现 上代码: 定义一个统一的接口: [JavaScript] 纯文本查看 复制代码 ...

  7. Ubuntu上搭建GPU服务器

    1.安装显卡驱动 2.安装CUDA 3.安装cuDNN 下载: 根据显卡类型以及操作系统,选定CUDA版本和语言设置,下载对应的显卡驱动. 驱动下载地址 安装 $ sudo ./NVIDIA-Linu ...

  8. Python---10小结

    因一边上班一边自学python,一旦忙起来,python就会放两天,可是2天后之前学的内容就会有点忘记. 今天把python的各种启动方法总结一下; 我的文档路径: ------- 1打开文件所在的c ...

  9. 苹果会放弃iPhone吗?

    ​苹果会放弃iPhone吗?一般来讲,这是一个相当白痴的问题,苹果放弃iPhone的概率比唐僧放弃取经的概率要低20倍.前段时间回老家,正在学习英语的小侄子问我:"叔叔,苹果用英语怎么说呀? ...

  10. DIY电压基准测万用表

    | 分类 日志  | 手里有三个常用的手持表,UT61E四位半,优利德明星产品:福禄克F117C,换挡快,单手操作还带LoZ:UT210E小钳表能够通过修改EEPROM更改电表配置,已经刷了6000字 ...