zoukankan      html  css  js  c++  java
  • MySQL容器化详细教程

    前言:

    上篇文章介绍了Docker工具的安装及常用命令使用。本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker里部署MySQL实例操作简单,不需要考虑操作系统等依赖差异,而且可以多实例部署,比如说我们原来服务器有安装MySQL5.7,我们想再运行MySQL8.0实例的话只需要用Docker启动MySQL8.0镜像即可。下面我们就来介绍下如何用Docker启动MySQL实例。

    ▍1.拉取MySQL官方镜像

    在上篇文章中我们介绍过Docker中三个基本的概念:镜像,容器,仓库。要用在Docker中部署MySQL,第一步要做的是从官方仓库中拉取MySQL镜像,这里我们从Docker Hub中拉取MySQL镜像。进入Docker Hub,搜索MySQL,可以看到如下画面,其中有不同版本的镜像及使用介绍。

    image.png

    比如我们想拉取MySQL5.7版本及8.0版本的镜像,可以做如下操作:

    # 拉取5.7及8.0版本镜像 稍等片刻即可拉取成功
    docker pull mysql:5.7.23
    docker pull mysql:8.0.18
    
    # 查看镜像
    docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    mysql               8.0.18              c8ee894bd2bd        2 weeks ago         456MB
    mysql               5.7.23              1b30b36ae96a        12 months ago       372MB
    

    其实MySQL官方镜像也存在一些缺陷,比如说时区不是北京时间,系统字符集问题等。下面以MySQL5.7.23版本镜像为基础,展示下如何修改构建镜像。

    # 创建Dockerfile 主要作用是更改系统字符集及时区 内容如下:
    cat Dockerfile 
    FROM mysql:5.7.23
    MAINTAINER wang
    RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc 
        && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    ENV LANG=C.UTF-8
    
    # 构建镜像
    docker build -t my-mysql:5.7.23 . 
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM mysql:5.7.23
     ---> 1b30b36ae96a
    Step 2/4 : MAINTAINER wang
     ---> Running in a7cc94f95cc7
    Removing intermediate container a7cc94f95cc7
     ---> d9590ed98de5
    Step 3/4 : RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc     && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
     ---> Running in e698bfdb3817
    Removing intermediate container e698bfdb3817
     ---> 31c9ed9103c5
    Step 4/4 : ENV LANG=C.UTF-8
     ---> Running in eefa296fef94
    Removing intermediate container eefa296fef94
     ---> 10aa697936e9
    Successfully built 10aa697936e9
    Successfully tagged my-mysql:5.7.23
    
    # 再次查看镜像即可找到我们新构建的镜像
    docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    my-mysql            5.7.23              10aa697936e9        About a minute ago   372MB
    mysql               8.0.18              c8ee894bd2bd        2 weeks ago          456MB
    mysql               5.7.23              1b30b36ae96a        12 months ago        372MB
    

    ▍2.启动MySQL实例

    这里为大家介绍如何利用上面构建的镜像来运行MySQL实例,MySQL容器化其实也需要映射端口,数据持久化,加载配置文件等操作,下面给大家演示下具体启动操作。

    2.1 创建数据持久化路径及配置文件

    # 创建配置文件目录及数据目录
    mkdir -p /data/mysql57/{cnf,data}
    
    # 添加配置文件my.cnf
    cd /data/mysql57/cnf/
    vim my.cnf
    
    # 配置文件内容如下,可自定义
    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    
    server-id = 33061
    max_connections = 1000
    sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    lower_case_table_names=1
    innodb_file_per_table = 1
    log_timestamps=SYSTEM
    character-set-server = utf8
    max_allowed_packet = 32M
    sort_buffer_size = 4M
    read_buffer_size = 4M
    join_buffer_size = 4M
    binlog_cache_size = 4M
    tmp_table_size = 96M
    max_heap_table_size = 96M
    innodb_buffer_pool_size = 512M
    
    #logs
    slow_query_log = 1
    slow_query_log_file = /var/lib/mysql/slow.log
    long_query_time = 3
    log-bin = /var/lib/mysql/binlog
    binlog_format = row
    expire_logs_days = 15
    log_bin_trust_function_creators = 1
    

    2.2 docker run运行MySQL实例

    # 一条命令启动一个MySQL实例
    docker run -itd -p 33061:3306 --name mysql57 --hostname=mysql57 -v /data/mysql57/cnf:/etc/mysql -v /data/mysql57/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=Asdf@123456  my-mysql:5.7.23
    
    # 解释下各个参数的含义
    -d: 后台运行容器,并返回容器ID
    -i: 以交互模式运行容器,通常与 -t 同时使用
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    --name="mysql57": 为容器指定一个名称
    --hostname=mysql57: 指定容器的hostname
    -v: 绑定一个卷
    --privileged=true: 以特权方式启动容器
    

    2.3 检查容器状态

    # 查看容器状态
    docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
    04cd3d99d5cb        my-mysql:5.7.23     "docker-entrypoint.s…"   13 seconds ago      Up 11 seconds       33060/tcp, 0.0.0.0:33061->3306/tcp   mysql57
    
    # 进入容器内
    docker exec -it mysql57 /bin/bash 或 docker exec -it [CONTAINER ID] /bin/bash
    

    ▍3.其他相关操作

    到此为止,我们已经在Docker中成功运行了MySQL实例,其实还没有结束,还有好多操作还没讲,比如如何备份恢复,怎么更改配置等,下面简单介绍下这类相关操作。

    • 备份恢复
    # 备份
    docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all-databases.sql
    
    # 恢复
    docker exec -i mysql57 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /tmp/all-databases.sql
    
    • 更改配置
    # 更改配置只需要修改宿主机 /data/mysql57/cnf/my.cnf 文件,然后重启容器即可
    docker restart mysql57
    

    如果你想在本地通过工具连接容器内MySQL的话,可以使用宿主机ip加映射端口来连接。比如我们上面创建的MySQL实例就可以通过宿主机ip+30661端口来连接,若无法连接请检查网络及服务器防火墙。

    总结:

    本文主要介绍在Docker中部署MySQL的方法步骤,体验下来你会发现非常简单方便,而且可以大规模多实例部署。假如你想体验最新版本8.0.18的话,可以自己部署下试试看,其实还可以更简单,比如说直接运行docker run mysql:5.7.23 即可启动一个实例,但是为了更加规范,还是建议将配置文件及数据目录都挂载到宿主机本地。

    参考资料:

    碎碎念:

    阿里云服务器双十一活动还在继续,入门级的服务器86元即可买一年,推荐大家看看。买一台云服务器,你可以学习Linux,MySQL,Docker,Git等,还可以部署个人网站,需要的小伙伴可以买来测试玩玩哦!复制下面链接到浏览器打开即可进入官网页面购买。

    https://www.aliyun.com/1111/2019/group-buying-share?ptCode=F6718C2981638C225DDA9F79172CF1F4647C88CF896EF535&share_source=copy_link

    公众号.jpg

  • 相关阅读:
    后台管理UI
    14.6.3.2 Configuring Multiple Buffer Pool Instances 配置多个Buffer Poll 实例:
    14.6.3.1 The InnoDB Buffer Pool
    innodb_buffer_pool_instances and innodb_buffer_pool_size的关系
    猪肉都被绑上了“家族标签”,大数据已波及到农牧业!
    14.6.2 Configuring InnoDB for Read-Only Operation
    jquery EasyUI datagrid重新加载传参问题
    分布式系统事务一致性解决方案
    面试题整理
    dump iot表
  • 原文地址:https://www.cnblogs.com/kunjian/p/11819844.html
Copyright © 2011-2022 走看看