查看: 467|回复: 0

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

[复制链接]
发表于 2020-3-19 09:03:08 | 显示全部楼层 |阅读模式

各人好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关。所以这个教程对于在linux系统还是macOS都是通用的,不用担心。
上一篇,我们安装好对应的Docker之后,感受到了它的便利。接下来我们来安装MySQL吧,它在开发中常常需要用到。
MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序数据库优先选择。
说个痛点,如果是在Windows,不可想像,你要安装不同版本的mysql进行测试,而且不想让他们版本之间有什么交集。比如说,公司用着稳定版本的5.6,但是现在市面上比力新的课程都采用mysql5.7 进行教学,想尝尝鲜。这安装简直是一个噩梦,有了docker,轻松就能办理这个问题,端口和配置也不会冲突。

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

方式一:网页端访问 MySQL 镜像库地址:
  1. https://hub.docker.com/_/mysql
复制代码
方式二:我们还可以用下令来查看可用版本。
  1. docker search mysql
复制代码
看看效果图:

二、官网获取 MySQL 镜像

以下版本供您选择
  1. # 拉取 mysql 5.7
  2. docker pull mysql:5.7
  3. # 拉取最新版mysql镜像,如果不写后面的版本号则会主动拉取最新版
  4. docker pull mysql
复制代码
这里以5.7版本为例。
  1. docker pull mysql:5.7
复制代码
第一次拉去,会比力久一点,需要去下载对应的镜像。
三、查看本地镜像

使用以下下令来查看是否已安装了 mysql
复制代码
四、运行Mysql容器

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


  • 1、创建挂载目次
创建挂载目次,主要是方便修改配置文件到达方便控制的目的。
  1. mkdir -p $HOME/docker/mysql57
复制代码
是为了方便管理建的目次,主要是表示docker项目下放置的一些配置文件。mysql57表示应用名字
  1. cd $HOME/docker/mysql57
复制代码


  • 2、运行Mysql容器
方式一:不需要挂载目次(不保举)
  1. docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
复制代码
方式二:需要挂载目次(保举)
  1. docker run -p 3306:3306 --name mysql57 \
  2. -v $PWD/conf:/etc/mysql \
  3. -v $PWD/logs:/var/log/mysql \
  4. -v $PWD/data:/var/lib/mysql \
  5. -e MYSQL_ROOT_PASSWORD=123456 \
  6. -d mysql:5.7 \
  7. --character-set-server=utf8mb4 \
  8. --collation-server=utf8mb4_unicode_ci
复制代码
参数说明


  • –name:容器名,此处定名为mysql57
  • -v :挂载目次
  • -e:配置信息,此处配置mysql的root用户的登岸密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:源镜像名,此处为 mysql:5.7并配景运行 后面为设置mysql的默认编码
3、选项实行,如果不需要mysql56,可以不需要实行。

创建目次
  1. mkdir -p $HOME/docker/mysql56
复制代码
进去该目次
  1. cd $HOME/docker/mysql56
复制代码
拉取镜像
  1. docker pull mysql:5.6
复制代码
mysql5.6 安装
  1. docker run -p 3307:3306 --name mysql56 \
  2. -v $PWD/conf:/etc/mysql \
  3. -v $PWD/logs:/var/log/mysql \
  4. -v $PWD/data:/var/lib/mysql \
  5. -e MYSQL_ROOT_PASSWORD=123456 \
  6. -d mysql:5.6 \
  7. --character-set-server=utf8mb4 \
  8. --collation-server=utf8mb4_unicode_ci
复制代码
可能会遇到的问题,如果一开始没有实行拉取镜像的下令,会主动拉取镜像,然后默认已经创建了一个镜像mysql56,我们通过下令查找回来,然后启动即可。
查看所有容器
  1. docker ps -a
复制代码
删除容器
  1. docker rm 容器id
复制代码
启动容器
  1. docker start 容器id
复制代码
额外提供俩个快速下令
  1. # 停止所有容器
  2. docker stop $(docker ps -a -q)
  3. # remove删除所有容器
  4. $ docker rm $(docker ps -a -q)
复制代码
五、安装乐成

通过 docker ps 下令查看是否安装乐成。
  1. docker ps -a
复制代码
容器状态的Up状态,表示容器正在运行,而且可以看到主机和容器的端口映射关系。
重启mysql容器
  1. docker restart mysql57
复制代码
查看mysql日志
  1. docker logs -f mysql57
复制代码
六、Mysql 测试

进入到mysql容器
  1. docker exec -ti mysql57 /bin/bash
复制代码
参数说明


  • -t 在容器里生产一个伪终端
  • -i 对容器内的标准输入 (STDIN) 进行交互
登岸到mysql服务器
方式一
  1. mysql -h 127.0.0.1 -u root -p
复制代码
方式二
  1. mysql -u root -p123456
复制代码
查询测试语句
  1. use mysql;
  2. SELECT VERSION(), CURRENT_DATE;
复制代码
如果需要远程登录的,需要实行授权下令 1、直接让root也可以远程登岸(不发起)
  1. GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY '123456' WITH GRANT OPTION;
复制代码
2、创建一个用户admin远程登岸(发起)
  1. GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY '123456' WITH GRANT OPTION;
复制代码
3、刷新权限
  1. FLUSH PRIVILEGES;
复制代码
4、查看用户
  1. select host,user from user;
复制代码
5、备份数据
  1. $ docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /some/path/on/your/host/all-databases.sql
复制代码
6、恢复数据
  1. $ 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版本, 查询数据时出现如下错误
  1. this is incompatible with sql_mode=only_full_group_by
复制代码
可以使用使用下列方式办理


  • 2、查询 sql_mode
  1. select @@sql_mode
复制代码
效果如下
  1. 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中
  1. [mysqld]
  2. # 表名不区分大小写
  3. lower_case_table_names=1
  4. #server-id=1
  5. datadir=/var/lib/mysql
  6. #socket=/var/lib/mysql/mysqlx.sock
  7. #symbolic-links=0
  8. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  9. [mysqld_safe]
  10. log-error=/var/log/mysqld.log
  11. pid-file=/var/run/mysqld/mysqld.pid
复制代码
涉及比力深的部分,如果有时机更新mysql方面的教程,再讲讲。
总结
1、一句下令即可完成mysql的安装,方便快捷。
2、多实例,不同端口相互之间不影响。
保举阅读
Docker 技术系列之安装Docker Desktop for Mac

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?用户注册

x

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表