MySQL主从配置

MySQL主从配置

注意

  • 主从服务器操作系统版本和位数一致;
  • Master 和 Slave 数据库的版本要一致;
  • Master 和 Slave 数据库中的数据要一致;
  • Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;

步骤

主库配置

  1. 修改配置文件/etc/my.cnf(windows下在my.ini文件中)

    1
    2
    3
    [mysqld]
    log-bin=master-bin #开启二进制文件
    server-id=100 #服务器唯一ID
  2. 重启mysql服务

    1
    systemctl restart mysqld
  3. 登录mysql创建一个用户并赋予REPLICATION SLAVE权限

    1
    2
    3
    CREATE USER 'username'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'username'@'%';
    ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
  4. 查看主库状态

    1
    show master status;

从库配置

  1. 修改配置文件

    1
    2
    [mysqld]
    server-id=101 #服务器唯一ID
  2. 重启mysql服务

  3. 设置主节点参数

    1
    2
    3
    4
    5
    6
    CHANGE MASTER TO
    MASTER_HOST='192.168.229.168',
    MASTER_USER='zs',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='master-bin.000001', #查看主库状态时File列的参数
    MASTER_LOG_POS=3578; #查看主库状态时Position列的参数
  4. 开启主从服务

    1
    start slave;
  5. 查看是否成功

    1
    show slave status \G

常见错误

  1. Slave_SQL_Running: NO

解决方式:

1
2
3
4
5
mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

或者主节点参数配置错误,重新配置一遍
  1. Slave_IO_Running: NO/Collecting

解决方式:

1
2
3
4
5
6
每次数据库重启后都会导致master status发生变化,重新配置从库的主节点参数

或者复制虚拟机时数据库的uuid相同,删除/var/lib/mysql/auto.cnf文件后重启数据库
systemctl restart mysqld

或者防火墙没关

读写分离

主库负责增删改,从库负责查

Sharding-JDBC

轻量级java框架,增强JDBC功能,可以在程序中实现数据库读写分离

  1. 导入坐标

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
    </dependency>
  2. 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    spring:
    shardingsphere:
    datasource:
    # 定义数据源名称
    names:
    master,slave
    # 主数据源
    master:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.229.168:3306/rw?characterEncoding=utf-8
    username: root
    password: 123456
    # 从数据源
    slave:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.229.130:3306/rw?characterEncoding=utf-8
    username: root
    password: 123456
    masterslave:
    # 读写分离配置(轮询)
    load-balance-algorithm-type: round_robin
    # 最终的数据源名称
    name: dataSource
    # 主库数据源名称
    master-data-source-name: master
    # 从库数据源名称列表,多个逗号分隔
    slave-data-source-names: slave
    props:
    sql:
    show: true #开启SQL显示,默认false
    main:
    #Sharding和Druid的类有重名的,需要加上这个配置
    allow-bean-definition-overriding: true

MySQL主从配置
http://xwww12.github.io/2022/08/19/数据库/mysql/MySQL主从配置/
作者
xw
发布于
2022年8月19日
许可协议