Springboot-多数据源主从复制

一、导入多数据源相关依赖

    <properties>
        <dynamic-datasource.version>2.5.4dynamic-datasource.version>
        <mybatis.version>2.1.1mybatis.version>
    properties>

        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>dynamic-datasource-spring-boot-starterartifactId>
            <version>${dynamic-datasource.version}version>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>${mybatis.version}version>
        dependency>

二、编写dockercompose.yml

version: '3'
services:
# 主服务器
  master:
    image: mysql:5.7.22
    restart: always
    container_name: master-6310
    command:
      --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
# 在编写多数据源的docker-compose.yml的基础上加上以下三条配置
# 设置server_id,一般设置为IP端口,注意在一个局域网唯一
      --server-id=3310
# 指定log-bin
      --log-bin=log-master
# 指定binlog格式      
      --binlog_format=mixed
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
      MYSQL_DATABASE: db_test
    volumes:
      - ./master/data/:/var/lib/mysql
      - ./master/log/:/var/log/mysql
    ports:
      - 6310:3306
  # 从服务器
  slave:
    image: mysql:5.7.22
    restart: always
    container_name: slave-6311
    command:
      --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=6311
      # 只读
      --read_only=1
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
      MYSQL_DATABASE: db_test
    volumes:
      - ./slave/data/:/var/lib/mysql
      - ./slave/log/:/var/log/mysql
    ports:
      - 6311:3306

三、Linux系统下执行docker-compose.xml文件
Springboot-多数据源主从复制_第1张图片
生成相应的mysql容器

四、连接数据库,执行以下操作命令
一、> 主服务器相关操作
1. 在主库创建一个用于同步的用户,赋予REPLICATION SLAVE的权限(直接用已有的)

grant replication master on *.* to 'master'@'%' identified by '123456';

2.执行以下命令锁定数据库以防止写入数据

FLUSH TABLES WITH READ LOCK;

3.主库执行:show master status; 记下 Position 和 File 的值,等下进行从库配置要用到

show master status;

Springboot-多数据源主从复制_第2张图片
记录下File和Position的值.

4.解锁数据表(从服务器配置完成之后别忘记解锁主数据库)。

UNLOCK TABLE

二、>从服务器相关操作

  1. 执行如下命令(先停止同步,然后设置同步信息,master_log_file 和 master_log_pos就是我们主库上面的)
change master to master_host='主服务器ip',master_user='主库的username',master_password='主库的密码',master_port=主库的端口号,master_log_file='主库操作第三个命令查的File属性', master_log_pos=438;

MASTER_HOST:主服务器的IP。

MASTER_USER:配置主服务器时建立的用户名

MASTER_PASSWORD:用户密码

MASTER_PORT:主服务器mysql端口

  1. 从库执行:show slave status 查看是否正常
start slave
show slave status

Springboot-多数据源主从复制_第3张图片
Springboot-多数据源主从复制_第4张图片
以上三个属性的值分别如上图所示表示主从关系设置成功!

四、测试
去主数据库新建一个表插入数据,从数据库会同步更新生成一个相同的表和数据。
Springboot-多数据源主从复制_第5张图片

你可能感兴趣的:(Springboot2.0)