zoukankan      html  css  js  c++  java
  • Docker容器启动Mysql,Docker实现Mysql主从,读写分离



    相关内容原文地址:

    博客园: 当我遇上你csy:Docker实战之MySQL主从复制
    CSDN:liumiaocn:MySQL: 容器化方式启动



    一、Docker文件编排

    编排docker-compose-mysql-cluster.yml,安装master和slave节点:

    version: '3'
    services:
      mysql-master:
        image: mysql:5.7
        container_name: mysql-master
        environment:
          - MYSQL_ROOT_PASSWORD=root
        ports:
          - "3307:3306"
        volumes:
          - "./mysql/master/my.cnf:/etc/my.cnf"
          - "./mysql/master/data:/var/lib/mysql"
        links:
          - mysql-slave
    
      mysql-slave:
        image: mysql:5.7
        container_name: mysql-slave
        environment:
          - MYSQL_ROOT_PASSWORD=root
        ports:
          - "3308:3306"
        volumes:
          - "./mysql/slave/my.cnf:/etc/my.cnf"
          - "./mysql/slave/data:/var/lib/mysql"
    
    1. 配置master配置文件my.cnf
    [mysqld]
    # [必须]启用二进制日志
    log-bin=mysql-bin 
    # [必须]服务器唯一ID,默认是1,一般取IP最后一段  
    server-id=1
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    
    1. 配置slave配置文件my.cnf
    [mysqld]
    # [必须]服务器唯一ID,默认是1,一般取IP最后一段  
    server-id=2
    
    1. 启动docker-compose,创建docker镜像文件
    docker-compose -f docker-compose-mysql-cluster.yml up -d
    

    通过docker ps可查看已启动的实例容器。

    二、配置主从复制

    2.1 配置master

    在这里插入图片描述

    2.2 配置slave

    在这里插入图片描述

    三、验证主从复制

    3.1 master创建db

    在这里插入图片描述
    查看slave是否同步创建:
    在这里插入图片描述

    四、读写分离

    MySQL主从复制是其自己的功能,实现读写分离就得依靠其他组件了,比如sharding-jdbc。但是sharding-jdbc只是实现读写分离,本身的权限控制还是需要MySQL这边来配置的。

    1. 配置master账户及权限
      创建帐号并授予读写权限:
    CREATE USER 'master'@'%' IDENTIFIED BY 'Password123';
    GRANT select,insert,update,delete ON *.* TO 'master'@'%';
    flush privileges;
    

    在这里插入图片描述

    1. 配置slave账户及权限
      创建帐号并授予只读权限:
    use mysql;
    CREATE USER 'slave'@'%' IDENTIFIED BY 'Password123';
    GRANT select ON *.* TO 'slave'@'%';
    FLUSH PRIVILEGES;
    

    在这里插入图片描述

    五、Docker启动Mysql

    docker run --name mysql -d                          
               -e MYSQL_ROOT_PASSWORD=liumiao123        
               -e TZ=Asia/Shanghai                      
               -v `pwd`/mysql/data/:/var/lib/mysql      
               -v `pwd`/mysql/conf.d/:/etc/mysql/conf.d 
               -p 32011:3306 liumiaocn/mysql:5.7.16
    
    

    进入mysql容器内部:

    docker exec -it mysql sh
    

    六、Docker-Compose方式

    liumiaocn:mysql liumiao$ cat docker-compose.yaml 
    version: '2'
    
    services:
      # database service: mysql
      mysql:
        image: liumiaocn/mysql:5.7.16
        ports:
          - "32011:3306"
        volumes:
          - ./mysql/data/:/var/lib/mysql
          - ./mysql/conf.d/:/etc/mysql/conf.d
        environment:
          - TZ=Asia/Shanghai
          - MYSQL_ROOT_PASSWORD=liumiao123
        restart: "no"
    liumiaocn:mysql liumiao$
    

    启动示例:

    liumiaocn:mysql liumiao$ ls
    docker-compose.yaml
    liumiaocn:mysql liumiao$ docker-compose up -d
    Creating network "mysql_default" with the default driver
    Creating mysql_mysql_1 ... done
    liumiaocn:mysql liumiao$
    

    结果确认:

    liumiaocn:mysql liumiao$ docker-compose ps
        Name                  Command             State            Ports         
    -----------------------------------------------------------------------------
    mysql_mysql_1   docker-entrypoint.sh mysqld   Up      0.0.0.0:32011->3306/tcp
    liumiaocn:mysql liumiao$ 
    liumiaocn:mysql liumiao$ docker exec -it mysql_mysql_1 sh
    # mysql -uroot -pliumiao123
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 2
    Server version: 5.7.16 MySQL Community Server (GPL)
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    mysql> 
    
  • 相关阅读:
    C#组合算法 (2)
    用匿名函数来更方便的使用缓存
    之通用权限(五):项目描述表组(转)
    软件代码(程序)管理办法
    搭建开发架构的思路
    (转)七秘诀工作效率与薪水翻番
    uml学习入门 2面向对象方法分析与设计
    一个.Net开发组合:Powerdesigner+数据库+分层设计+.Net代码生成器+VS2005
    Log4Net介绍
    【自然框架】之通用权限(一):简介、数据结构 (转)
  • 原文地址:https://www.cnblogs.com/aixing/p/13327187.html
Copyright © 2011-2022 走看看