springboot+docker+mysql实现主从同步、读写分离

1、创建挂载目录

创建如图所示挂载目录:

图片1.png

注:仅创建到三级目录,data文件中为mysql数据,挂载后自动同步。

2、conf下创建my.cnf

master的my.cnf内容为:

[mysqld]
server-id=999
log-bin=mysql-bin

slave的my.cnf内容为:

[mysqld]
server-id=1

3、创建镜像实例

docker run -p 3306:3306 --name mysql-master -v /home/mysql/master/conf:/etc/mysql/conf.d -v /home/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
docker run -p 3307:3306 --name mysql-slave -v /home/mysql/slave/conf:/etc/mysql/conf.d -v /home/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql

查看镜像是否启动成功

docker ps

图片2.png
查看容器IP地址(后面配置需要)

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

图片3.png

注:
1. /etc/mysql/conf.d为mysql8的默认配置文件目录
2. /var/lib/mysql为mysql8的默认数据存放目录

4、配置master

进入docker容器

docker exec -it mysql-master /bin/bash

登录mysql

mysql -u root -p

创建主从复制用户并授权

create user 'replication'@'172.17.0.7' identified with mysql_native_password by '1234';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'172.17.0.7';
flush privileges;

查看主机日志状态

show master status;

图片4.png

注:file和Position配置从库会用到

5、配置slave

进入docker容器

docker exec -it mysql-slave /bin/bash

登录mysql

mysql -u root -p

设置登录主节点参数

CHANGE MASTER TO
MASTER_HOST='172.17.0.2',
MASTER_USER='replication',
MASTER_PASSWORD='1234',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=16160;

开启主从同步

start slave;

查看主从同步状态

show slave status\G;

图片5.png

注:圈出状态为途中所示,表示搭建成功,可以建表进行测试

6、引入依赖ShardingSphere-JDBC(5.1.1版本)

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.1</version>
        </dependency>

7、配置yml

# 配置mysql主从数据库
spring:
  shardingsphere:
    datasource:
      names: master,slave
      # 主数据源
      master:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghai&allowMultiQueries=true
        username: root
        password: '1234'
        hikari:
          minimum-idle: 5
          # 空闲连接存活最大时间,默认600000(10分钟)
          idle-timeout: 180000
          # 连接池最大连接数,默认是10
          maximum-pool-size: 10
          # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
          auto-commit: true
          # 连接池名称
          pool-name: MyHikariCP
          # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
          max-lifetime: 1800000
          # 数据库连接超时时间,默认30秒,即30000
          connection-timeout: 30000
          connection-test-query: SELECT 1
      # 从数据源
      slave:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3307/blog?serverTimezone=Asia/Shanghai&allowMultiQueries=true
        username: root
        password: '1234'
        hikari:
          minimum-idle: 5
          # 空闲连接存活最大时间,默认600000(10分钟)
          idle-timeout: 180000
          # 连接池最大连接数,默认是10
          maximum-pool-size: 10
          # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
          auto-commit: true
          # 连接池名称
          pool-name: MyHikariCP
          # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
          max-lifetime: 1800000
          # 数据库连接超时时间,默认30秒,即30000
          connection-timeout: 30000
          connection-test-query: SELECT 1
    enabled: true
    props:
      sql:
        show: true
      sql-show: true
    rules:
      readwrite-splitting:
        data-sources:
          load-balancers:
            roundRobin:
              type: ROUND_ROBIN
          master-slave:
            props:
              auto-aware-data-source-name: master
              load-balancer-name: roundRobin
              read-data-source-names: slave
              write-data-source-name: master
            type: Static

8、测试结果

增删改通过主库:
图片6.png
查看通过从库:
图片7.png
原文地址:TT的博客《springboot+docker+mysql实现主从同步、读写分离》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值