用docker 实现 mysql 主从同步

docker模拟mysql主从复制集群
    1. mysql镜像下载
        docker pull mysql:5.7
        
    2.主节点创建
        2.1 创建master实例,并启动
            master:
                docker run -p 3307:3306 --name mysql-master \
                -v /opt/mysql/master/log:/var/log/mysql \
                -v /opt/mysql/master/data:/var/lib/mysql \
                -v /opt/mysql/master/conf:/etc/mysql/conf.d \
                -e MYSQL_ROOT_PASSWORD=root \
                -d mysql:5.7
        2.2 修改master配置
            vim /opt/mysql/master/conf/my.cnf

            master conf配置:

                [mysql]
                default-character-set=utf8
                [mysqld]
                init_connect='SET collation_connection = utf8_unicode_ci'
                init_connect='SET NAMES utf8'
                character-set-server=utf8
                collation-server=utf8_unicode_ci
                skip-character-set-client-handshake
                skip-name-resolve

                server_id=1                     #指定集群id
                log-bin=mysql-bin             #打开二进制日志功能
                read-only=0                    #关闭只读,可读可写
                binlog-do-db=test_db    #指定mysql的binlog日志记录哪个db
                binlog-do-db=bigdata
                binlog-do-db=admin
                replicate-ignore-db=mysql  #用来设置不需要同步的库,此处指定的mysql系统库
                replicate-ignore-db=sys
                replicate-ignore-db=information_schema
                replicate-ignore-db=performance_schema
                
        2.3 重启mysql-master节点
            docker restart mysql-master
            
    3.从节点创建
        3.1 创建slaver节点并启动
            slave:
                docker run -p 3317:3306 --name mysql-slaver-01 \
                -v /opt/mysql/slaver/log:/var/log/mysql \
                -v /opt/mysql/slaver/data:/var/lib/mysql \
                -v /opt/mysql/slaver/conf:/etc/mysql/conf.d \
                -e MYSQL_ROOT_PASSWORD=root \
                --link mysql-master:mysql-master\
                -d mysql:5.7
        
        3.2 修改slaver 配置
            vim /opt/mysql/slaver/conf/my.cnf
            slaver-01配置:
                [client]
                default-character-set=utf8
                [mysql]
                default-character-set=utf8
                [mysqld]
                init_connect='SET collation_connection = utf8_unicode_ci'
                init_connect='SET NAMES utf8'
                character-set-server=utf8
                collation-server=utf8_unicode_ci
                skip-character-set-client-handshake
                skip-name-resolve
                
                server_id=2             #注意此处id不能与主节点相同
                log-bin=mysql-bin
                read-only=1
                binlog-do-db=test_db    #指定mysql的binlog日志记录哪个db
                binlog-do-db=bigdata
                binlog-do-db=admin
                replicate-ignore-db=mysql
                replicate-ignore-db=sys
                replicate-ignore-db=information_schema
                replicate-ignore-db=performance_schema

        3.3 重启slaver节点
            docker restart mysql-slaver-01
                
    4.为 master 授权用户来他的同步数据
        4.1. 进入容器内部    docker exec -it mysql-master /bin/bash
        4.2. 进入mysql内部   mysql -uroot -proot
        4.3. 添加用来同步的用户 
            GRANT REPLICATION SLAVE ON *.* to 'fly'@'%' identified by '123456';
            注: 
                fly: 账户名          123456: 密码
        4.4. 查看master状态
            show master status;
    

5.为 slaver-01授权用户来他的同步数据
        5.1. 进入容器内部    docker exec -it mysql-slaver-01  /bin/bash
        5.2. 进入mysql内部   mysql -uroot -proot
        5.3. 设置主库连接
            change master to master_host='47.**7.4.1*4',master_user='fly',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=0,master_port=3307;
            注:
                master_host: 服务器ip
                master_log_file必须与 master状态表中的File字段的值一致
        5.4. 启动主从同步
            start slave;
     5.5. 查看slaver状态
       show SLAVE status;
      

   半同步复制:

     0. 查看主从节点是否有 rpl_semi_sync_master插件;

        show plugins

     1. 分别在主从节点下载插件

        install plugin rpl_semi_sync_master soname 'semisync_master.so';

        install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

     2. 修改主从节点的 my.cnf配置文件

        rpl_semi_sync_master_enable=1  # 1:半同步复制开启    0:主从半同步关闭

        rpl_semi_sync_master_timeout=10000  #单位毫秒,用来配置主库等待从库写入relay-log日志成功的 ack通知时间;

        注:

          若超时, 则切换为 异步同步模式, 并返回事务 提交成功给客户端

        rpl_semi_sync_slave_enable=1  # 1:半同步复制开启    0:主从半同步关闭

     3. 分别重启 主从节点

        docker restart mysql-master

        docker restart mysql-slave01

 

   




 

posted @ 2022-07-01 19:05  54菜鸟  阅读(129)  评论(0编辑  收藏  举报