zoukankan      html  css  js  c++  java
  • centos7.5 + docker + mysql5.7 多实例安装

           很长时间没有写笔记了,在这里要感谢一下博客园客服帮助恢复账号登陆功能 ~

           应单位国产化要求,需要将生成环境切换到 Linux 操作系统,这里笔记一下数据库环境的搭建,方便日后翻阅。PS: 上一篇 MySQL 多实例部署还是在 Windows 环境 

      为了简化安装环境的繁琐配置过程,决定在 docker 上搭建 MySQL 实例,入门指导:Docker容器详解 ,下边记录一下操作过程中遇到的问题和注意事项。

      Docker 容器化数据分为持久化数据和非持久化数据,非持久化数据会随着容器的移除而移除。显然,数据库数据应该被持久化保存,持久化数据需要使用卷映射,本文中将数据库数据及数据库配置均做了持久化处理,配置文件可以在创建数据库实例是多次拷贝使用。

      docker的安装及注意事项,请参考 Docker容器详解 ,下边演示多实例配置。

      一、拉取镜像  

    [root@host-10-121-1-84 ~]# docker image pull mysql:5.7

            查看镜像:

     

       二、创建容器

      使用卷映射创建之前,先了解一下直接创建容器所需要的默认配置文件及数据保存位置, Docker Hub 中有如下解释:

       关于配置文件,容器中使用的文件是 /etc/mysql/my.cnf ,而这个文件中又指出了优先使用的配置文件路径  /etc/mysql/conf.d 或者 /etc/mysql/mysql.conf.d ,这里需要注意的是,配置文件路径中的文件默认筛选  .cnf 后缀的文件 !!

      下边可以先剧透一下 /etc/mysql/my.cnf 文件的内容 

    关于容器中数据存放地址,在红框部分中已做出明确说明了 /var/lib/mysql  。注意,将容器数据挂在到docker服务器中时,确保docker服务器文件系统有足够多的空间(可以通过逻辑卷管理扩展,不在本文讨论范围)

      初始话问题说清楚了,开始创建 3307 实例

      1、在docker主机上创建 3307 实例的文件夹,用于存放数据及配置文件

    [root@host-10-121-1-84 ~]# mkdir /srv/sysdata/mysql/3307

            切换到 3307 文件夹下,创建存放配置的文件夹 conf 及存放配置的文件夹 data ,如下:

    [root@host-10-121-1-84 3307]# mkdir conf data

               在 conf 文件夹下添加 mysql3307.cnf 文件,文件内容如下: 

    [mysqld]
    pid-file=/var/run/mysqld/mysqld.pid
    socket=/var/run/mysqld/mysqld.sock
    datadir=/var/lib/mysql
    
    server-id=1
    symbolic-links=0
    
    max_connections=100
    connect_timeout=20
    wait_timeout=6000
    max_allowed_packet=512M
    thread_cache_size=128
    sort_buffer_size=4M
    bulk_insert_buffer_size=16M
    tmp_table_size=32M
    max_heap_table_size=32M
    #
    # * MyISAM
    #
    # This replaces the startup script and checks MyISAM tables if needed
    # the first time they are touched. On error, make copy and try a repair.
    key_buffer_size=128M
    table_open_cache=400
    myisam_sort_buffer_size=512M
    concurrent_insert=2
    read_buffer_size=2M
    read_rnd_buffer_size=1M
    
    #
    # * InnoDB
    #
    # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
    # Read the manual for more InnoDB related options. There are many!
    default_storage_engine=InnoDB
    innodb_buffer_pool_size=256M
    innodb_log_buffer_size=128M
    innodb_file_per_table=1
    innodb_open_files=400
    innodb_io_capacity=400

      2、创建容器

    [root@host-10-121-1-84 ~]# docker run -d --name mysql3307 -p 3307:3306 -v /srv/sysdata/mysql/3307/conf:/etc/mysql/conf.d -v /srv/sysdata/mysql/3307/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

          这里 docker主机下的  /srv/sysdata/mysql/3307/conf 文件夹映射到容器内的 /etc/mysql/conf.d 文件夹,用于覆盖容器默认的配置文件。同理数据文件。MYSQL_ROOT_PASSWORD 是初始化本地root登陆密码。解释一下 -p 3307:3306  将docker服务器端口 3307 映射到 容器内部 3306 端口 ,为什么不是容器内部其他的端口呢? 有人说配置文件中没有指定端口,默认的就是3306端口 ,其实不仅如此,我们可以c查看一下镜像组成:在构建镜像过程中配置暴露的端口是3306

    [root@host-10-121-1-84 3307]# docker image inspect mysql:5.7

     3、查看运行状态

    [root@host-10-121-1-84 3307]# docker ps

    4、进入mysql 容器,登陆并添加用户 

    [root@host-10-121-1-84 3307]# docker exec -it mysql3307 /bin/bash
    root@7f87e912f128:/# mysql -uroot -p
    Enter password: 
    mysql> grant all privileges on *.* to 'root'@'%' identified by 'your password';
    mysql> flush privileges; 

      还记得上面写到默认使用的配置文件么,退出MySQL实例登陆,进入mysql 容器中,验证上边的内容吧

    root@7f87e912f128:/# cat /etc/mysql/my.cnf

    5、退出mysql 容器,设置 docker 主机防火墙,对外暴露 3307 端口 (ctrl + D 退出)

    [root@host-10-121-1-84 3307]# firewall-cmd --zone=public --add-port=3307/tcp --permanent  // 添加暴露端口
    [root@host-10-121-1-84 3307]# firewall-cmd --zone=public --reload        // 重新加载防火墙
    [root@host-10-121-1-84 3307]# firewall-cmd --zone=public --list-ports    // 查看端口是否暴露成功

    至此,已经完成3307实例的部署工作,恭喜 ~

    多实例安装逻辑思维如图,其他端口的实例均与上述实例配置过程一致,均是有docker服务器端口映射到 mysql 容器的 3306 端口 

     

     (完)

  • 相关阅读:
    TestNG 入门教程
    Angularjs中文版本开发指南发布
    你是码农 还是优秀程序员?
    java牛人给新人的几点建议
    有一种毒药叫励志书
    牛人眼中如何精通spring?
    驯服你的Windows Server 2003
    windows 7 里面的iis在哪里
    神器 cmder
    亚信UED前端流程自动化构建工具
  • 原文地址:https://www.cnblogs.com/gavin-num1/p/14043580.html
Copyright © 2011-2022 走看看