zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Mysql索引类型
    Linux 查看进程
    Element is not clickable at point error in chrome
    org.apache.commons.lang.StringUtils 中 Join 函数
    接口测试之webservice介绍
    Java 中正确使用 hashCode 和 equals 方法
    HTTP协议基础
    使用Groovy处理SoapUI中Json response
    SoapUI中读取法文字符
    SoapUI中XML解析
  • 原文地址:https://www.cnblogs.com/liuhongfeng/p/12515290.html
Copyright © 2011-2022 走看看