• Docker mysql 主从


    一、独立容器部署mysql主从 

    # 主从 my.cnf加上
    
    [mysqld]
    server-id = XXX
    log-bin = mysql-bin
    log-bin-index = log-bin.index 

      (1)master

    docker run -d 
    --name mysql_master 
    -p 3310:3306 
    -v /data/conf/master-slave/master.cnf:/etc/mysql/my.cnf 
    -v /data/conf/master-slave/localtime:/etc/localtime  
    -v /data/storage/cluster_data/master_data:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=Password4Root 
    mysql

      (2)slave 

    docker run -d 
    --name mysql_slave 
    -p 3311:3306 
    -v /data/conf/master-slave/slave.cnf:/etc/mysql/my.cnf 
    -v /data/conf/master-slave/localtime:/etc/localtime 
    -v /data/storage/cluster_data/slave_data:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=Password4Root 
    --link mysql_master:master 
    mysql
    

      (3)查看 

    docker ps
    CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS              PORTS                            NAMES
    dc5f46aa135b        mysql                   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3311->3306/tcp           mysql_slave
    be3e1af663cd        mysql                   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3310->3306/tcp           mysql_master
    

      (4)主库Replication设置

    # 登入主库
    docker exec -it mysql_master mysql -uroot -pPassword4Root
    
    mysql> grant all privileges on *.* to 'repl'@'%' identified by 'repl_password';
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    
    mysql> show master statusG;
    *************************** 1. row ***************************
                 File: mysql-bin.000003
             Position: 434
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)

      (5)从库Replication设置

    # 登入从库
    docker exec -it mysql_slave mysql -uroot -pPassword4Root
    
    # 设置主从
    mysql> change master to
        -> master_host='master',
        -> master_user='repl',
        -> master_password='repl_password',
        -> master_log_file='mysql-bin.000003',
        -> master_log_pos=434;
    
    # 启动slave
    mysql> start slave;
    
    # 查看状态
    mysql> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: master
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000003
              Read_Master_Log_Pos: 434
                   Relay_Log_File: 5925cc301b6b-relay-bin.000002
                    Relay_Log_Pos: 320
            Relay_Master_Log_File: mysql-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB:
    

      

      

      (6)测试

      主库新建数据库

      

      从库查看

      

      尝试重启mysql_master容器,slave状态变为connecting

      

      重启完成后,状态恢复正常

      

     二、Docker Swarm mysql主从

      (1)创建secret文件

    # echo "Password4Root" | docker secret create root_cluster_password -
    w4wv4askqam5znua5032gm8vt
    

      (2)使用swarm配置管理

      master.cnf和slave.cnf要存在

    # 创建主从配置文件
    [root@manager master-slave]# docker config create master.cnf master.cnf
    t1rjlq7djtulxzl7gppf3rrum
    [root@manager master-slave]# docker config create slave.cnf slave.cnf
    u229zquvbevbq50k92ylqcgqn
    

      (3)创建overlay网络  

    # docker network create -d overlay mysql-cluster --subnet 10.10.2.0/24 
    zf4n8waxc283uprq8eppx2gzp
    

      (4)创建服务 

    # master
    [root@manager ~]# docker service create 
    > --name mysql_master 
    > --replicas 1 
    > --network mysql-cluster 
    > --secret root_cluster_password 
    > --config src=master.cnf,target=/etc/mysql/my.cnf 
    > -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_cluster_password 
    > --mount type=volume,src=master_data,dst=/var/lib/mysql 
    > --publish 3320:3306 
    > mysql
    nuthmf6fdpmjmew1pzhdninmg
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged
    
    # slave
    [root@manager ~]# docker service create 
    > --name mysql_slave 
    > --replicas 1 
    > --network mysql-cluster 
    > --secret root_cluster_password 
    > --config src=slave.cnf,target=/etc/mysql/my.cnf 
    > --mount type=volume,src=slave_data,dst=/var/lib/mysql 
    > -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_cluster_password 
    > --publish 3321:3306 
    > mysql
    pyed0j0jlijy1upbyicuayvko
    overall progress: 1 out of 1 tasks 
    1/1: running   [==================================================>] 
    verify: Service converged 
    

      

    [root@manager ~]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    nuthmf6fdpmj        mysql_master        replicated          1/1                 mysql:latest        *:3320->3306/tcp
    pyed0j0jlijy        mysql_slave         replicated          1/1                 mysql:latest        *:3321->3306/tcp 

      (5)主从配置

    # 登入master所在节点的主库
    
    mysql> grant all privileges on *.* to 'repl'@'%' identified by 'repl_password';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> show master statusG;
    *************************** 1. row ***************************
                 File: mysql-bin.000003
             Position: 434
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)
    
    # 登入slave所在节点从库
    mysql> change master to
        -> master_host='mysql_master',
        -> master_user='repl',
        -> master_password='repl_password',
        -> master_log_file='mysql-bin.000003',
        -> master_log_pos=434;
    Query OK, 0 rows affected, 2 warnings (0.29 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.01 sec
    

      查看状态

      

      (6)测试验证

      主库创建数据库

      

      查看从库

      

      stop 主库(在swarm集群中,关停的容器默认会自动重启)

      

      重启完成后恢复正常

      

    三、服务编排部署mysql主从

       (1)mysql_replications.yml  

    version: "3.3"
    services:
      master:
        image: mysql:latest
        networks:
          - rep_net
        ports:
          - "3330:3306"
        volumes:
          - type: volume
            source: master-data
            target: /var/lib/mysql
            volume:
              nocopy: true
        configs:
          - source: localtime
            target: /etc/localtime
          - source: master.cnf
            target: /etc/mysql/my.cnf
        deploy:
          replicas: 1
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: '0.8'
              memory: 500M
            reservations:
              cpus: '0.25'
              memory: 200M
        secrets:
          - root_password
        environment:
          - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password
    
      slave:
        image: mysql:latest
        networks:
          - rep_net
        ports:
          - "3331:3306"
        volumes:
          - type: volume
            source: slave-data
            target: /var/lib/mysql
            volume:
              nocopy: true
        configs:
          - source: localtime
            target: /etc/localtime
          - source: slave.cnf
            target: /etc/mysql/my.cnf
        deploy:
          replicas: 1
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: '0.8'
              memory: 500M
            reservations:
              cpus: '0.25' 
              memory: 200M
        secrets:
          - root_password
        environment:
          - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password
    
    secrets:
      root_password:
        external: true
    
    configs:
      localtime:
        external: true
      master.cnf:
        external: true
      slave.cnf:
        external: true
    
    volumes:
      master-data:
      slave-data:
    networks:
      rep_net:
        driver: overlay
    

      (2)部署服务

    # docker stack deploy -c mysql_replications.yml repl
    Creating network repl_rep_net
    Creating service repl_master
    Creating service repl_slave
    

      (3)查看服务 

    [root@manager stack_compose]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               
    khfpkq81op7b        repl_master         replicated          1/1                 mysql:latest        *:3330->3306/tcp
    u7k4enpy1eru        repl_slave          replicated          1/1                 mysql:latest        *:3331->3306/tcp
    

      (4)配置主从

    # master
    
    # docker exec -it fb85153f27ac mysql -uroot -pPassword4Root
    
    mysql> grant all privileges on *.* to 'repl'@'%' identified by 'repl_password';
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    
    mysql> show master statusG;
    *************************** 1. row ***************************
                 File: mysql-bin.000003
             Position: 434
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)
    
    # slave
    
    mysql> change master to
        -> master_host='master',
        -> master_user='repl',
        -> master_password='repl_password',
        -> master_log_file='mysql-bin.000003',
        -> master_log_pos=434;
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec
    
    
    mysql> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: master
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000003
              Read_Master_Log_Pos: 434
                   Relay_Log_File: 0ddecac560e1-relay-bin.000002
                    Relay_Log_Pos: 320
            Relay_Master_Log_File: mysql-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                .....
                .....
    

      主从正常

  • 相关阅读:
    Conntect Bluetooth devices in iOS.
    Why NSAttributedString import html must be on main thread?
    IOS7 SDK 几宗罪
    How to browse the entire documentation using XCode 5 Documentation and API Reference ?
    High Precision Timers in iOS / OS X
    [UWP]抄抄《CSS 故障艺术》的动画
    [Microsoft Teams]使用连接器接收Azure DevOps的通知
    [WPF 自定义控件]自定义一个“传统”的 Validation.ErrorTemplate
    [WPF 自定义控件]在MenuItem上使用RadioButton
    [WPF 自定义控件]创建包含CheckBox的ListBoxItem
  • 原文地址:https://www.cnblogs.com/bigberg/p/8884788.html
Copyright © 2020-2023  润新知