Springboot-多数据源主从复制

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

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-datasource.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <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文件
在这里插入图片描述
生成相应的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;

在这里插入图片描述
记录下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

在这里插入图片描述
在这里插入图片描述
以上三个属性的值分别如上图所示表示主从关系设置成功!

四、测试
去主数据库新建一个表插入数据,从数据库会同步更新生成一个相同的表和数据。
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值