• 基于docker创建mysql容器


    基础环境

    Server: Docker Engine - Community
     Engine:
      Version:          20.10.9
    
    • 1
    • 2
    • 3

    选择镜像

    • 好用、可靠

    不好用:DOCKER OFFICIAL IMAGE mysql

    在这里插入图片描述

    好用: VERIFIED PUBLISHER bitnami/mysql

    部署容器

    配置优先

    不区分大小写

    启动容器前进行配置

    **注意:**如果是配置填写格式有问题,容器是启动不了的

    • 创建自定义配置文件
    • 挂载路径:/your_host_path/my_custom.cnf:/opt/bitnami/mysql/conf/bitnami/my_custom.cnf
    [mysqld]
    lower_case_table_names=1
    
    • 1
    • 2

    lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
    lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
    lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
    unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2

    链接:【MySQL】lower_case_table_names参数详解 - 简书 (jianshu.com)

    # 进入mysql命令行 执行以下任一语句查看:
    show variables like 'lower_case_table_names';
    select @@lower_case_table_names;
    
    • 1
    • 2
    • 3
    关闭only_full_group_by(可选)

    **注意:**如果是配置填写格式有问题,容器是启动不了的

    • 报错日志
    # which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    
    • 1
    • 调整配置后,重启生效

    注意:如果是在数据库中进行调整,重启之后就恢复原样,因为 ONLY_FULL_GROUP_BY 更加符合 SQL 标准,所以不建议关掉。

    [mysqld]
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
    • 1
    • 2

    创建桥接网络

    docker network create app-tier --driver bridge
    
    • 1

    方式一:基于命令启动容器

    • 指定容器名称
    • 加载自定义配置文件:my_custom.cnf
    • 设置环境变量,指定数据库root初始化密码
    • 为容器绑定已经创建的网络类型
    • 建立本地路径与容器路径之间的映射
    • 建立本地端口与容器端口之间的映射
    • 指定镜像名称
    • 后台运行
    • 默认支持远程主机连接,密码插件是:caching_sha2_password
    docker run -d --name dev-mysql  -v /opt/docker/mysql/home:/home -v /opt/docker/mysql/home/my_custom.cnf:/opt/bitnami/mysql/conf/bitnami/my_custom.cnf:ro  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --network app-tier bitnami/mysql:8.0.25
    
    • 1
    运行连接数据库的容器

    执行SQL,还是走容器靠谱

    • 退出时自动删除容器(已踩坑就是它)
    docker run -it --rm --network app-tier -v /opt/docker/mysql/home:/home bitnami/mysql:8.0.25  mysql -hdev-mysql -uroot -p123456
    
    • 1
    • 继续执行一个初始化SQL(可选)
    source /home/your_sql.sql
    
    • 1
    • 非容器的初始化SQL方法(可选)
    mysql -uroot -p123456 --default-character-set=utf8 < init.sql
    
    • 1

    坑:以下方式不行

    一、进入dev-mysql容器后,使用如下命令登录会失败或者成功,现象这是这样,暂不知道为什么

    docker exec -it dev-mysql bash 
    mysql -h172.24.0.2 -uroot -p123456
    
    或者 
    docker exec -it <CONTAINER_ID>  mysql -uroot -p123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    开启远程访问

    Docker MySQLAccess denied for user ‘’@’172.17.0.1’(using password: YES) - Many Minds - Medium

    MySQL8.0允许外部访问_lemon_cake的博客-CSDN博客_mysql8 远程连接

    Docker部署Mysql8.0报错 Access denied for user ‘root‘@‘localhost‘ (using password: YES)_萧道子的博客-CSDN博客

    update user set host='%' where user ='root';
    #设置密码
    #PASSWORD EXPIRE NEVER 密码永不过期
    #将默认的插件【caching_sha2_password】修改成【mysql_native_password 】加密插件
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456' PASSWORD EXPIRE NEVER;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    验证命令

    select user,host,plugin from user;
    
    • 1
    select version();
    
    • 1

    Docker Compose

    Compose file versions and upgrading | Docker Documentation

    兼容性矩阵

    Compose 文件格式有多个版本 – 1、2、2.x 和 3.x

    此表显示了哪些 Compose 文件版本支持特定的 Docker 版本。

    Compose file formatDocker Engine release
    Compose specification19.03.0+
    3.819.03.0+
    3.718.06.0+
    3.618.02.0+
    3.517.12.0+
    3.417.09.0+
    3.317.06.0+
    3.217.04.0+
    3.11.13.1+
    3.01.13.0+
    2.417.12.0+
    2.317.06.0+
    2.21.13.0+
    2.11.12.0+
    2.01.10.0+

    v2 和 v3 声明

    注意: 指定要使用的 Compose 文件版本时,请确保同时指定主要版本号和次要版本号。如果没有给出次要版本,则默认使用 0 而不是最新的次要版本。因此,将不支持后续版本中添加的功能。例如:

    version: "2"
    
    • 1

    相当于:

    version: "2.0"
    
    • 1

    方式二:基于yaml文件,启动容器

    创建mysql数据存储目录

    注意:由于这是一个非根容器,因此安装的文件和目录必须具有 UID 1001 的适当权限。若权限不对,无法正常运行容器,会卡死

    NOTE: As this is a non-root container, the mounted files and directories must have the proper permissions for the UID 1001.

    mkdir -p /opt/docker/mysql/data
    #赋权
    chown 1001:1001 /opt/docker/mysql/data
    
    • 1
    • 2
    • 3
    编写yaml配置文件
    version: '3'
    services:  
        mysql-service:
            image: bitnami/mysql:8.0.25
            hostname: mysql
            container_name: dev-mysql
            volumes:
                -  /opt/docker/mysql/data:/bitnami/mysql/data
                -  /opt/docker/mysql/home:/home
                - /opt/docker/mysql/home/my_custom.cnf:/opt/bitnami/mysql/conf/bitnami/my_custom.cnf:ro
            ports:
                - 3306:3306
            environment:
                MYSQL_ROOT_PASSWORD: '123456'
            networks:
                - app-tier
    networks:
       app-tier:
           driver: bridge
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    启动容器

    # --force-recreate  Recreate containers even if their configuration and image haven't changed.
    # 即使容器的配置和图像没有改变,也可以重新创建容器。
    docker-compose up --force-recreate
    
    • 1
    • 2
    • 3

    其它

  • 相关阅读:
    从裸机启动开始运行一个C++程序(八)
    React-View-UI组件库封装——Message 全局提示
    DRF 过滤排序分页异常处理
    《Java并发编程的艺术》总结
    MySQL及MySQLworkbench安装教程
    相机卡格式化了还能恢复吗?答案在这!(附带恢复教程)
    C++&qt day8
    ElasticSeach的Api操作学习
    Collectors.groupingBy()
    edu cf #137 Div.2(A~D)
  • 原文地址:https://blog.csdn.net/guizishou00/article/details/128119743