美文网首页
MySQL8 主从配置

MySQL8 主从配置

作者: MrTricker | 来源:发表于2021-09-24 22:28 被阅读0次

    1. 目录结构

    demo
    |-- docker-compose.yml
    |-- source
        |-- data
        |-- conf
            |-- source.cnf
    |-- replica_1
        |-- data
        |-- conf
            |-- replica.cnf
    

    2. 配置文件

    1. docker-compose.yml

      利用 docker 来进行本地测试,比使用虚拟机性价比更高,也更加方便。

      version: '3'
      
      services:
      
      # 源库
      db_source:
          image: mysql:8
          volumes:
              - "./source/data:/var/lib/mysql" # 数据备份
              - "./source/conf:/etc/mysql/conf.d" # 配置文件,需提前写好,下面会给出🌰
          environment:
              - MYSQL_ROOT_PASSWORD=password
      
      # 副本库1,可以有多个
      db_replica_1:
          image: mysql:8
          volumes:
              - "./replica_1/data:/var/lib/mysql"
              - "./replica_1/conf:/etc/mysql/conf.d"
          environment:
              - MYSQL_ROOT_PASSWORD=password
      
    2. source.cnf

      这是源库的配置文件。

      1. log-bin 启用二进制日志。
      2. server-id 给源库设置 ID,集群内必须唯一
      3. innodb_flush_log_at_trx_commitsync_binlog 提高主从复制的耐用性和一致性
      [mysqld]
      log-bin=mysql-bin
      server-id=1001
      innodb_flush_log_at_trx_commit=1
      sync_binlog=1
      
    3. replica.cnf

      这是副本的配置文件,副本不需要启用二进制日志,只需要确保 ID 唯一即可。

      [mysqld]
      server-id=1002
      

    3. 启动 docker 容器

    docker-compose up -d
    

    4. 获取源库的二进制日志坐标

    1. 进入源库容器

      $ docker-compose exec db_source mysql -u root -p
      Enter password: # 输入密码 password 即可。
      
    2. 获取二进制日志的文件名(File)和坐标(Position),这个窗口就不要动了,接下来有用。

      mysql > SHOW MASTER STATUS;
      +------------------+----------+--------------+------------------+
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
      +------------------+----------+--------------+------------------+
      | mysql-bin.000003 | 73       | test         | manual,mysql     |
      +------------------+----------+--------------+------------------+
      

    5. 给副本库设置复制源

    1. 进入副本库容器

      $ docker-compose exec db_replica_1 mysql -u root -p
      Enter password: # 输入密码 password 即可。
      
    2. 设置复制源

      1. SOURCE_HOST 源库的 ip 或者域名
      2. SOURCE_POST 源库的端口
      3. SOURCE_USER 源库中,用来执行复制的用户
      4. SOURCE_PASSWORD 源库中,用来执行复制的用户的密码
      5. SOURCE_LOG_FILE 上一节从源库中获取二进制日志的文件名(File)
      6. SOURCE_LOG_POS 上一节从源库中获取的二进制日志的坐标(Position)
      7. GET_SOURCE_PUBLIC_KEY 因为 mysql8 的密码加密使用的是 caching_sha2_password,所以要启用基于 RSA 密钥对的密码交换,这个参数只接收 0 或 1。

      Ps. 这一段解释就像:It's a cat!

      mysql> CHANGE REPLICATION SOURCE TO
          ->     SOURCE_HOST='db_source',
          ->     SOURCE_PORT=3306,
          ->     SOURCE_USER='root',
          ->     SOURCE_PASSWORD='password',
          ->     SOURCE_LOG_FILE='mysql-bin.000003',
          ->     SOURCE_LOG_POS=73,
          ->     GET_SOURCE_PUBLIC_KEY=1;
      
    3. 开启复制

      mysql> START REPLICA;
      

    相关文章

      网友评论

          本文标题:MySQL8 主从配置

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