sharding-jdbc的读写分离,数据库主从同步实践

本文介绍了如何使用sharding-jdbc在Spring Boot项目中实现读写分离,以及详细步骤来配置数据库主从同步。通过添加相关jar,配置sharding-jdbc,可以在同一台物理机上的两套数据库服务之间完成数据同步。在实践中,还分享了处理主从复制中断的策略,以及如何判断主从是否同步。

  前段时间看到sharding-jdbc这个东西,我就用它来实践一下读写分离,下面是我要下面的三个步骤来写这篇文章

1,弄一个基础框架spring boot + mybatis generator 

2,整合sharding-jdbc,实现读写分离

3,实现主从数据库同步数据

 

首先我们来简单的将一下第一,二步,因为比较简单,第三步对于自己来说相当复杂一点。

第一步:

自己简单的配置一个spring boot项目,然后整合mybatis。这里注重讲一下mybatis generator 

a:首先我们先加入相应的jar

  <!-- Spring-Mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- Spring-Mybatis generator -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

b:然后在配置相应的generatorConfig.xml,想要查看相应的配置详情,大家可以查看网上,或者参考我自己的例子(后面会附上我的仓库地址)

c:写main方法去根据配置文件生产文件

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class GenMain {
    public static void main(String[] args) {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        String genCfg = "/generatorConfig.xml";
        ClassLoader load = Thread.currentThread().getContextClassLoader();
        InputStream is = load.getResourceAsStream(genCfg);
        File configFile = new File(GenMain.class.getResource(genCfg).getFile());

//        ClassLoader load = Thread.currentThread().getContextClassLoader();
//        InputStream is = load.getResourceAsStream(genCfg);
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = null;
        try {
            config = cp.parseConfiguration(configFile);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMLParserException e) {
            e.printStackTrace();
        }
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = null;
        try {
            myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        } catch (InvalidConfigurationException e) {
            e.printStackTrace();
        }
        try {
            myBatisGenerator.generate(null);
        } catch (SQLException e) {
       
### Sharding-JDBC数据库主从复制的关系 Sharding-JDBC 是一个定位为轻量级 Java 框架,在Java的JDBC层提供额外的服务。其核心功能之一是在应用程序层面实现读写分离,从而提高系统的性能和可用性[^2]。 #### 数据库主从复制简介 数据库主从复制是一种常见的高可用性和负载均衡解决方案。在这种架构下,所有的写入操作都发生在主服务器上;而读取请求可以被分发到多个只读副本(即从服务器)。这种设计不仅能够减轻单台服务器的压力,还能够在一定程度上保障数据的安全性,因为即使主节点出现问题,也可以迅速切换至备用节点继续服务[^1]。 #### 使用Sharding-JDBC实现主从复制的具体方法 为了利用Sharding-JDBC来设置MySQL的主从复制环境并完成相应的配置工作,以下是具体的操作指南: ##### 一、准备阶段 确保已经安装好MySQL实例,并完成了基本的网络通信测试。对于Linux系统来说,可以通过命令`systemctl start mysqld`启动mysqld服务,并通过`systemctl status mysqld`检查当前状态是否正常运行,最后执行`systemctl enable mysqld`使该服务开机自启[^4]。 ##### 二、配置文件调整 编辑项目的application.yml或对应的属性文件,加入如下所示的关键参数用于指定主库和两个以上的从库地址及其端口号等信息: ```yaml spring: shardingsphere: datasource: names: master,slave_0,slave_1 master: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/master_db?serverTimezone=UTC&useSSL=false username: root password: pwd slave_0: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3307/slave_db_0?serverTimezone=UTC&useSSL=false username: root password: pwd slave_1: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3308/slave_db_1?serverTimezone=UTC&useSSL=false username: root password: pwd ``` ##### 三、启用读写分离策略 接着定义如何分配SQL语句给不同的数据源处理。通常情况下,默认所有DML(DATAMANIPULATION LANGUAGE)类型的指令都会发送到master上去执行,而对于SELECT查询则会随机选取其中一个slave来进行响应。这部分逻辑同样可以在YAML配置中体现出来: ```yaml rules: masterslave: name: ms_ds master-data-source-name: master slave-data-source-names: slave_0,slave_1 props: sql-show: true ``` 以上就是关于怎样借助于Sharding-JDBC框架快速构建起一套完整的MySQL主从复制体系的大致流程介绍。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值