MySQL8 主从配置

2021-09-24  本文已影响0人  MrTricker

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;
    
上一篇下一篇

猜你喜欢

热点阅读