基于shardingsphere的分库分表方案

一、准备docker容器

启动两个mysql的docker容器

复制代码
docker run -v /root/mysql_volume/data:/var/lib/mysql -v /root/mysql_volume/conf:/etc/mysql/conf.d -v /root/mysql_volume/my.cnf:/etc/my.cnf -p 3306:3306 --name mysql --restart=always --privileged=true -e MYSQL_ROOT_PASSWORD=aaaa1143134686 -d mysql:8.0.30 --lower_case_table_names=1





 docker run -v /root/mysql_volume_child1/data:/var/lib/mysql -v /root/mysql_volume_child1/conf:/etc/mysql/conf.d -v /root/mysql_volume_child1/my.cnf:/etc/my.cnf -p 3307:3306 --name mysql-child1 --restart=always --privileged=true -e MYSQL_ROOT_PASSWORD=aaaa1143134686 -d mysql:8.0.30 --lower_case_table_names=1

主节点的my.cnf配置

复制代码
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
lower_case_table_names = 1
# my.cnf 配置
server-id=1
log-bin=mysql-bin
binlog_format=ROW


pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

从节点的my.cnf配置

复制代码
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
lower_case_table_names = 1

server-id=2   # 每个从库要唯一
relay-log=relay-log
read_only=1


pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

重启主节点和从节点的mysql的docker容器后,在主节点下查看binlog位置

复制代码
SHOW MASTER STATUS;

在子节点配置主节点信息

复制代码
CHANGE MASTER TO
  MASTER_HOST='ip',
  MASTER_USER='root',
  MASTER_PASSWORD='mima',
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=117056;

START SLAVE;

SHOW SLAVE STATUS;

二、配置shardingspheres

pom文件引入

复制代码
        <!-- ShardingSphere JDBC Core -->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.1</version>
        </dependency>

配置文件引入

复制代码
spring:
  application:
    name: 可变羽翼核心
  shardingsphere:
    datasource:
      # 定义多个数据源
      names: master, slave1

      master:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://ip:3306/wing_blog?serverTimezone=UTC
        username: root
        password: passwd

      slave1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://ip:3307/wing_blog?serverTimezone=UTC
        username: root
        password: passwd
    rules:
      readwrite-splitting:
        data-sources:
          myds:
            type: Static
            props:
              write-data-source-name: master
              read-data-source-names: slave1
相关推荐
熬夜的咕噜猫37 分钟前
MySQL 核心数据库操作
adb
Yang-Never3 小时前
ADB ->adb shell perfetto 抓取 trace 指令
android·开发语言·adb·android studio
轩情吖7 小时前
MySQL之事务管理
android·后端·mysql·adb·事务·隔离性·原子性
赶路人儿1 天前
常见的mcp配置
android·adb
ego.iblacat1 天前
MySQL 数据库操作
数据库·mysql·adb
路溪非溪1 天前
adb的安装和基本使用总结
adb
XDHCOM1 天前
MySQL报错LDAP认证初始化连接池失败,远程修复思路和故障排查分享
数据库·mysql·adb
闻哥1 天前
深入理解 MySQL InnoDB Buffer Pool 的 LRU 冷热数据机制
android·java·jvm·spring boot·mysql·adb·面试
炸炸鱼.1 天前
MySQL 数据库核心操作手册
数据库·adb·oracle
总要冲动一次1 天前
MySQL 5.7 全量 + 增量备份方案(本地执行 + 远程存储)
数据库·mysql·adb