Mysql主从分离

ZD
ZD
2024-12-16 / 0 评论 / 8 阅读 / 正在检测是否收录...

Mysql主从分离

  1. 配置主服务器(Master)

    1、修改 MySQL 配置文件(my.cnf 或 my.ini)

    [mysqld]
    log-bin=mysql-bin      # 启用二进制日志
    server-id=1            # 设置唯一的 server-id,通常 master 为 1
    binlog-do-db=test # 指定要复制的数据库
    

    2、重启 MySQL 服务

    sudo systemctl restart mysql

    3、创建复制账号

    CREATE USER 'testuser'@'%' IDENTIFIED BY 'testpassword';
    GRANT REPLICATION SLAVE ON *.* TO 'testuser'@'%';
    FLUSH PRIVILEGES;

    4、获取主服务器的二进制日志信息

    执行以下命令,记下二进制日志文件和位置:

    SHOW MASTER STATUS;

    输出类似如下:

    +---------------------+----------+--------------+------------------+
    | File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +---------------------+----------+--------------+------------------+
    | mysql-bin.000001    | 107      | test |                  |
    +---------------------+----------+--------------+------------------+
    
  2. 配置从服务器(Slave)

    1、修改从服务器的 MySQL 配置文件

      [mysqld]
      server-id = 2             # 从服务器的唯一 ID,通常为 2
      relay_log = /var/log/mysql/mysql-relay-bin.log  # 启用中继日志
      log_bin = /var/log/mysql/mysql-bin.log       # 启用 binlog
      read_only = 1             # 设置从库为只读模式,防止直接写数据
    

    2、重启 MySQL 服务

    sudo systemctl restart mysql
    

    3、配置从服务器连接到主服务器

    CHANGE MASTER TO
      MASTER_HOST='master_ip',        # 主库的 IP 地址
      MASTER_USER='testuser',       # 复制用户
      MASTER_PASSWORD='testpassword',     # 复制用户的密码
      MASTER_LOG_FILE='mysql-bin.000001',   # 主库的 binlog 文件名
      MASTER_LOG_POS=  107;           # 主库的 binlog 位置
      MASTER_PORT=3306;  -- 如果主库使用的端口不是默认的 3306,记得修改
    

    在这种方式下,你明确指定了从库开始复制的 binlog 文件binlog 位置

    • MASTER_LOG_FILE='mysql-bin.000001':从库将从主库的 mysql-bin.000003 文件开始复制数据。
    • MASTER_LOG_POS=107:从库将从主库的二进制日志文件 mysql-bin.000003 的位置 157 开始复制。

    这种方式通常用于以下场景:

    • 你已经在主库上进行了一些更改并且希望从特定位置开始复制。
    • 恢复某个时间点的复制,或者重新启动复制
    CHANGE MASTER TO
      MASTER_HOST='master_ip', 
      MASTER_USER='testuser',
      MASTER_PASSWORD='testpassword',
      MASTER_PORT=3306;  -- 如果主库使用的端口不是默认的 3306,记得修改
    

    MASTER_LOG_FILEMASTER_LOG_POS:如果主库的二进制日志没有启用,或者你只是初次设置复制(或者你不关心从哪个二进制日志文件开始),这两个参数可以省略。MySQL 会自动选择最新的二进制日志文件。
    4、启动从库复制进程:

    START SLAVE;

    5、查看从库的状态:

    SHOW SLAVE STATUS;
  3. 重新初始化复制

    如果主从库数据不一致或复制断开,可以尝试重新初始化复制过程:

    1. 在从库上停止复制:

      STOP SLAVE;
      RESET SLAVE ALL;
    2. 在主库上查看当前的二进制日志文件和位置:

      SHOW MASTER STATUS;
      
    3. 在从库上配置复制信息:

      CHANGE MASTER TO
          MASTER_HOST = '主库IP',
          MASTER_USER = 'testuser',
          MASTER_PASSWORD = 'testpassword',
          MASTER_LOG_FILE = '记录的File',
          MASTER_LOG_POS = 记录的Position;
      
    4. 启动从库的复制进程:

      START SLAVE;
0

评论 (0)

取消