美文网首页
05.`Ubuntu18.04`下实现`mysql`主从复制

05.`Ubuntu18.04`下实现`mysql`主从复制

作者: 风安峻_ | 来源:发表于2020-08-05 09:50 被阅读0次
1. 环境准备
  1. 创建docker-compose.yml

    • vim docker-compose.yml
    version: "3"
    services:
      mysql-master:
        image: mysql:5.7.31
        restart: always
        hostname: mysql-master
        container_name: mysql-master
        ports:
          - 3317:3306
        environment:
          MYSQL_ROOT_PASSWORD: root
          TZ: Asia/Shanghai
        volumes:
          - ./mysql/master/data:/var/lib/mysql
          - ./mysql/master/mysql/log:/var/log/mysql
        command:
          --server_id=100
          --log-bin=mysql-master-bin
          --sync_binlog=1
          --binlog-ignore-db=mysql
          --binlog_format=mixed
          --expire_logs_days=7
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
        links:
          - mysql-slave-read
      mysql-slave-read:
        image: mysql:5.7.31
        restart: always
        hostname: mysql-slave-read
        container_name: mysql-slave-read
        ports:
          - 3318:3306
        environment:
          MYSQL_ROOT_PASSWORD: root
          TZ: Asia/Shanghai
        volumes:
          - ./mysql/slave/data:/var/lib/mysql
          - ./mysql/slave/log:/var/log/mysql
        command:
          --server_id=200
          --read_only=1
          --binlog-ignore-db=mysql
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
    
    • server_id一般设置为IP,在一个局域网内要唯一
这几个mysql的名称尽量一致 这几个名称尽量一致
  1. 运行docker-compose.yml
    • docker-compose up -d

    • docker ps -a

      运行并查看容器
2. 在Navicat中配置主从复制
  1. 在主数据库master中操作

    1. 创建一个用于同步的用户,赋予REPLICATION SLAVE 的权限

      • grant replication slave on *.* to 'slave'@'%' identified by 'slave';
        • 'slave'@'%'任意地址的名为slave的用户
        • identified by 'slave'密码为slave
      创建一个用户
    2. 锁住master数据库,防止写入数据

      • flush tables with read lock;
      锁住master数据库
    3. 查看master状态,记录 File 和 Positon 的值

      • show master status;
      查看master状态
  2. 配置slave从数据库

    1. 先停止主从复制

      • stop slave;
      停止主从复制
    2. 注册主从复制相关信息

      CHANGE MASTER TO
          MASTER_HOST='mysql-master',
          MASTER_USER='slave',
          MASTER_PASSWORD='slave',
          MASTER_LOG_FILE='mysql-master-bin.000003',
          MASTER_LOG_POS=430;
      
      • MASTER_HOST的值是环境准备时docker-compose.yml主数据库的名字mysql-master

        主数据库的名字
      • MASTER_LOG_FILE的值就是查看master状态的File

      • MASTER_LOG_POS的值就是查看master状态的Positon

      注册主从复制相关信息
    3. 开启主从复制

      • start slave;
      开启主从复制
    4. 查看slave状态,是否设置主从复制成功

      • show slave status
      查看slave状态
  3. 解锁master主数据库

  • unlock tables;

    解锁master数据库
  1. master端测试是否成功

    • create database test character set utf8
    • 刷新两个连接
    测试主从复制
    • drop database test
    • 刷新两个连接
    测试主从复制

相关文章

网友评论

      本文标题:05.`Ubuntu18.04`下实现`mysql`主从复制

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