美文网首页
docker搭建mysql主从复制

docker搭建mysql主从复制

作者: bug去无踪 | 来源:发表于2022-01-20 10:50 被阅读0次

    教程:https://blog.csdn.net/abcde123_123/article/details/106244181

    用docker可以很方便的模拟多个数据库环境,可以很方便的演示效果

    数据库主从同步,一般的业务量,一主多从即可,主库写入(更改)操作,从库进行读取操作,读写分离。
    如果需要多个从库,就按照从库的配置方式多配置几个就可

    1.安装好docker

    2.远程拉取mysql数据库镜像:docker pull mysql:5.7

    3.运行镜像创建主库容器 宿主机端口:容器端口
    docker run -itd --name mysql-master -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

    运行镜像创建从库容器1
    docker run -itd --name mysql-slave -p 33062:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

    运行镜像创建从库容器2
    docker run -itd --name mysql-slave-1 -p 33063:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

    4.修改数据库root用户登录密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

    5.进入容器: docker exec -it 容器名字/容器id /bin/bash
    docker exec -it mysql-master /bin/bash

    6.docker安装vim
    步骤一 apt-get update
    步骤二 apt-get install vim

    6.主库配置:

    [mysqld]
    ## 同一局域网内注意要唯一
    server-id=100  
    ## 开启二进制日志功能,可以随便取(关键)
    log-bin=master-bin
    binlog-format=ROW     // 二级制日志格式,有三种 row,statement,mixed
    binlog-do-db=数据库名  //同步的数据库名称,如果不配置,表示同步所有的库
    

    7.重启mysql服务,重启后容器会停止
    service mysql restart

    8.重启容器
    docker start mysql-master

    9.进入容器,mysql -uroot -p 登录数据库,输入密码

    10.创建从库访问主库的用户slave
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

    11.赋予slave用户访问权限
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';

    进入Master库mysql客户端:输入show master status;查看Master状态,后面需要用到这两个参数

    image.png
    设置从库需要用到的参数
    File=master-bin.000001
    Position=2700

    12.从库也按照主库方式创建容器即可(可以配置多个从库,按照这个方式重复执行即可)

    13.从库配置:

    [mysqld]
    server-id=101  
    log-bin=mysql-slave-bin
    relay_log=mysql-relay-bin  
    read_only=1     
    

    14.设置从库的主库地址和同步起点
    change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='master-bin.000001', master_log_pos=2700, master_connect_retry=30;

    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP进行查询:

    15.进入从数据库,查看主从同步状态
    show slave status \G;

    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.17.0.2
                      Master_User: slave
                      Master_Port: 3306
                    Connect_Retry: 30
                  Master_Log_File: master-bin.000001
              Read_Master_Log_Pos: 2700
                   Relay_Log_File: mysql-relay-bin.000002
                    Relay_Log_Pos: 1330
            Relay_Master_Log_File: master-bin.000001
                 Slave_IO_Running: No
                Slave_SQL_Running: No
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 2700
                  Relay_Log_Space: 1537
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 100
                      Master_UUID: 40db205f-7906-11ec-9153-0242ac110002
                 Master_Info_File: /var/lib/mysql/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind:
          Last_IO_Error_Timestamp:
         Last_SQL_Error_Timestamp:
                   Master_SSL_Crl:
               Master_SSL_Crlpath:
               Retrieved_Gtid_Set:
                Executed_Gtid_Set:
                    Auto_Position: 0
             Replicate_Rewrite_DB:
                     Channel_Name:
               Master_TLS_Version:
    
            Slave_IO_Running: No
            Slave_SQL_Running: No
    

    16.开启主从同步
    start slave;
    Slave_IO_Running和Slave_SQL_Running变为Yes
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    17.主从复制测试,在主库里面建库建表,操作数据,在从库也会跟着执行一遍,可以自行演示
    省略演示........................

    18.如何停止从服务复制功能
    使用stop slave;命令

    19.如何重新配置主从
    使用这两个命令 stop slave; reset master;

    相关文章

      网友评论

          本文标题:docker搭建mysql主从复制

          本文链接:https://www.haomeiwen.com/subject/krnrhrtx.html