Springboot-Sharding-Jdbc集成(一)环境准备

知道自己是什么年纪 并把这个年纪能做好的事情尽力做好 才可能有下个年纪的随心所欲


一.概览 

ShardingSphere-Jdbc定位为轻量级Java框架,在Java的Jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,可理解为增强版的Jdbc驱动,完全兼容Jdbc和各种ORM框架。

文档地址:https://shardingsphere.apache.org/document/current/cn/overview/

二.MySQL主从复制原理 

从库B和主库A之间维持了一个长连接。主库A内部有一个线程,专门用于服务从库B的这个长连接。一个事务日志同步的完整过程如下:

  • 在从库B上通过change master命令,设置主库A的IP、端口、用户名、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。
  • 在从库B上执行start slave命令,这时从库会启动两个线程,就是图中的I/O线程和SQL线程。其中I/O线程负责与主库建立连接。
  • 主库A校验完用户名、密码后,开始按照从库B传过来的位置,从本地读取binlog,发给B。
  • 从库B拿到binlog后,写到本地文件,称为中继日志。
  • SQL线程读取中继日志,解析出日志里的命令,并执行。

由于多线程复制方案的引入,SQL线程演化成了多个线程。主从复制不是完全实时地进行同步,而是异步实时。这中间存在主从服务之间的执行延时,如果主服务器的压力很大,则可能导致主从服务器延时较大。 

三.环境准备(Docker配置Mysql主从)

1.创建mysql宿主机对应目录 

-- master mysql 对应目录
 
mkdir -p /home/mysql/sharding-mysql/master-mysql/cnf
 
mkdir -p /home/mysql/sharding-mysql/master-mysql/data
 
 
 
-- slave mysql 对应目录
 
mkdir -p /home/mysql/sharding-mysql/slave-mysql/cnf
 
mkdir -p /home/mysql/sharding-mysql/slave-mysql/data

2.创建mysql.cnf配置文件

-- master mysql,cnf
 
vim /home/mysql/sharding-mysql/master-mysql/cnf/mysql.cnf
 
-- slave mysql.cnf
 
vim /home/mysql/sharding-mysql/slave-mysql/cnf/mysql.cnf

完整配置文件如下:

-- master
[mysqld]
## 设置server_id,注意要唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
-- slave
[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启binlog,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

3.启动mysql

3.1.拉取镜像

docker pull mysql:5.7

3.2.创建网关

docker network create --driver bridge --subnet 172.18.0.0/16 self_network

3.3.启动

-- 启动master主服务器
docker create -p 13311:3306 \ -- 映射端口
--network self_network \ -- 设置网关
--network-alias master-mysql01 \ -- 网关别名
--ip 172.18.0.11 --name master-mysql01 \ --ip 固定内网Ip地址
-v /home/mysql/sharding-mysql/master-mysql/cnf:/etc/mysql/conf.d \
-v /home/mysql/sharding-mysql/master-mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456  mysql:5.7
 
 
-- 启动slave从服务器
docker create -p 13312:3306 --network self_network 
--network-alias slaver-mysql01  
--ip 172.18.0.12 --name slaver-mysql01 
-v /home/mysql/sharding-mysql/slave-mysql/cnf:/etc/mysql/conf.d 
-v /home/mysql/sharding-mysql/slave-mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456   mysql:5.7
 
-- 依次启动docker容器(create替换成run可以直接启动)
docker start 容器ID

3.4.添加复制master数据的用户reader,供从服务器使用

-- docker ps 找到容器信息
 
 
-- 进入容器
docker exec -it 容器ID/容器名称 /bin/bash
 
-- 登录mysql
mysql -u root -p123456
 
-- 创建用户
GRANT REPLICATION SLAVE ON *.* to 'reader'@'%' identified by 'reader';
 
-- 创建动作生效
FLUSH PRIVILEGES;

3.5.配置slave链接master

①从master服务器登录mysql查看master_log_file、master_log_pos两个参数

-- 登录mysql
mysql -u root -p123456
 
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      591 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
 
-- 如果docker创建mysql容器未设置IP地址则可以查询
docker inspect --format='{
   
   {.NetworkSettings.IPAddress}}' 容器名称

②从服务器上进行主服务器的连接信息的设置

-- 登录mysql
mysql -u root -p123456
 
-- 执行命令设置信息
change master to 
master_host='172.21.24.249', -- 内网IP
master_port=13311, -- mysql对外端口
master_user='reader', -- master mysql 用户名
master_password='reader', -- slave mysql 密码
master_log_file='mysql-bin.000005',
master_log_pos=591;
 
-- 启动slave mysql
start slave;
 
-- 查询slave信息
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.0.2
                  Master_User: reader
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 591
               Relay_Log_File: edu-mysql-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
--
Slave_IO_Running: Yes,Slave_SQL_Running: Yes即表示启动成功。

四.验证

1.Dbeaver 链接主从mysql

Dbeaver 下载地址: https://dbeaver.io/download/

-- 创建对应数据库
CREATE DATABASE `sharding-jdbc-db`
 
-- 新建表
-- `sharding-jdbc-db`.t_user definition
 
CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(100) DEFAULT 'JueDream',
  `password` varchar(100) DEFAULT '123456',
  `sex` int(11) DEFAULT '1',
  `age` int(11) DEFAULT '1',
  `birthday` varchar(50) DEFAULT '1997-12-19',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
 
-- 查询从库已有对应表


✨“应是上帝打翻银河,星星掉落凡间 才有这水面波光粼粼,你的眼眸 浩瀚星辰” 

猜你喜欢

转载自blog.csdn.net/qq_35731570/article/details/121392936