ShardingSphere分库分表实战之MySQL主从集群搭建

news2024/11/26 8:20:02

在这里插入图片描述

🚀 ShardingSphere 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 ShardingSphere 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🍀 一.ShardingSphere分库分表实战之MySQL主从同步原理
      • 🥦 1.1 主从复制的用途
      • 🥦 1.2 主从部署必要条件
      • 🥦 1.3 主从复制的原理
    • 🍀 二.ShardingSphere分库分表实战之MySQL主从集群搭建
      • 🥦 2.1 创建俩个MySQL服务
      • 🥦 2.2 主数据库上创建需要同步的数据库以及表
      • 🥦 2.3 修改主数据库的配置文件my.cnf
      • 🥦 2.4 修改从数据库的配置文件my.cnf
      • 🥦 2.5 登陆主数据上创建主从复制的账号
      • 🥦 2.6 数据库中查询表获取文件名MASTER_LOG_FILE和点位MASTER_LOG_POS
      • 🥦 2.7 从库登陆,从库向主库同步信息
      • 🥦 2.8 主库插入数据,从库查询信息
    • 🍀 三.MySQL集群主从同步启动后常见的错误
      • 🥦 3.1 解决方案1:
      • 🥦 3.2 解决方案2
    • 🍀 四.总结
    • 💬 五.共勉

🍀 一.ShardingSphere分库分表实战之MySQL主从同步原理

读写分离是建立在MySQL主从复制基础之上实现的,所以必须先搭建MySQL的主从复制架构。

🥦 1.1 主从复制的用途

  • 实时灾备,用于故障切换

  • 读写分离,提供查询服务

  • 备份,避免影响业务

🥦 1.2 主从部署必要条件

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同
  • 从库服务器能连通主库

🥦 1.3 主从复制的原理

  • Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL 语句(insert,update,delete,create/alter/drop table, grant 等等)。
  • 主从复制的原理其实就是把主服务器上的 bin 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。

在这里插入图片描述

  1. 主库db的更新事件(update、insert、delete)被写到binlog
  2. 主库创建一个binlog dump thread,把binlog的内容发送到从库
  3. 从库启动并发起连接,连接到主库
  4. 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
  5. 从库启动之后,创建一个SQL线程,从relay log里面读取内容,执行读取到的更新事件,将更新内容写入到slave的db

🍀 二.ShardingSphere分库分表实战之MySQL主从集群搭建

🥦 2.1 创建俩个MySQL服务

如果你看过了之前的文章,并且都进行了实操,那么这个步骤你肯定完成了,如果你是刚刚学习,那么也不要紧,可以先去学习之前的文章,再来学习就会更加容易。

🥦 2.2 主数据库上创建需要同步的数据库以及表

-- 创建数据库
CREATE DATABASE test CHARACTER SET utf8;

-- 创建表
CREATE TABLE user (
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(20) DEFAULT NULL,
  age INT(11) DEFAULT NULL
); 

在这里插入图片描述

🥦 2.3 修改主数据库的配置文件my.cnf

直接在原来的配置文件内容下方添加即可!

# ...
# 省略原来的配置内容
# .....


# Master
# 开启日志
log-bin=mysql-bin
# 日志格式按行同步
binlog-format=ROW
# 设置服务id,主从不能一致
server-id=1
# 设置需要同步的数据库
binlog-do-db=test
# 设置忽略系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
  • server-id=1 中的1可以任定义,只要是唯一的就行。
  • log-bin=mysql-bin 表示启用binlog功能,并制定二进制日志的存储目录,
  • binlog-do-db=test 是表示只备份test 数据库。
  • binlog_ignore_db=mysql 表示忽略备份mysql。
  • 不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库。

在这里插入图片描述

🥦 2.4 修改从数据库的配置文件my.cnf

同理, 配置我们从数据库的配置文件,最重要的就是将此时从库的server-id改为2!

# ...
# 省略原来的配置内容
# .....


# Slave
# 开启日志
log-bin=mysql-bin
# 日志格式按行同步
binlog-format=ROW
# 设置服务id,主从不能一致
server-id=2
# 设置需要同步的数据库
binlog-do-db=test
# 设置忽略系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
  • server-id=2 中的1可以任定义,只要是唯一的就行。
  • log-bin=mysql-bin 表示启用binlog功能,并制定二进制日志的存储目录,
  • binlog-do-db=test 是表示只备份test 数据库。
  • binlog_ignore_db=mysql 表示忽略备份mysql。
  • 不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库。

在这里插入图片描述

🥦 2.5 登陆主数据上创建主从复制的账号

在执行下面命令的之前,俩个服务器上重启我们的MySQL服务。

docker restart mysql  

进入mysql容器内容,登陆mysql

docker exec -it mysql /bin/bash

mysql -uroot -proot

在这里插入图片描述
创建一个允许从数据库来访问的用户账号

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.10.133' IDENTIFIED BY '123456';

在这里插入图片描述
查询验证:
在这里插入图片描述

🥦 2.6 数据库中查询表获取文件名MASTER_LOG_FILE和点位MASTER_LOG_POS

执行如下的命令:

show master status \G;

在这里插入图片描述

🥦 2.7 从库登陆,从库向主库同步信息

进入容器,登陆mysql在这里插入图片描述

停止同步

stop slave;

在这里插入图片描述

修改从库指向到主库,使用上一步记录的文件名以及位点

CHANGE MASTER TO 
master_host='192.168.10.132',
master_port=3306,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=154,
MASTER_CONNECT_RETRY=10;

在这里插入图片描述

启动同步

start slave;

在这里插入图片描述

查看运行状态

show slave status \G;

在这里插入图片描述

🥦 2.8 主库插入数据,从库查询信息

主库插入数据:

在这里插入图片描述

从库中查询对应的数据
在这里插入图片描述

🍀 三.MySQL集群主从同步启动后常见的错误

常见错误是Slave_IO_Running: No 或者 Connecting 的情况
在这里插入图片描述

🥦 3.1 解决方案1:

  1. 首先停掉Slave服务
stop slave;
  1. 到主服务器上查看主机状态, 记录File和Position对应的值
SHOW MASTER STATUS;

在这里插入图片描述

  1. 然后到slave服务器上执行手动同步:
CHANGE MASTER TO 
master_host='192.168.10.132',
master_port=3306,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=1181,
MASTER_CONNECT_RETRY=10;

🥦 3.2 解决方案2

  1. 程序可能在slave上进行了写操作;
  2. 也可能是slave机器重起后,事务回滚造成的.;
  3. 一般是事务回滚造成的,解决办法;
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

🍀 四.总结

本篇文章主要讲解了ShardingSphere分库分表实战之MySQL主从集群搭建,实操过程非常重要,大家一定要动手亲自实践一下,必须掌握。下节预告,ShardingSphere分库分表实战之Sharding-JDBC实现读写分离,敬请期待。

💬 五.共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp 微信小程序 uni.modal弹框+content内容自定义(内容换行)

效果图&#xff1a; 1、template <view click"showPriceDialog"></view>2、data data() {return {contentText:"",} },3、methods // 价格公示 showPriceDialog: function() {// 吨let minPriceTon 1900let maxPriceTon 3895// 袋let …

23.多项式与非多项式曲线拟合对比(matlab程序)

1.简述 拟合标准&#xff1a; (1)原始数据向量与拟合向量之间的距离最小&#xff0c;该距离的度量一般使用误差平方和表示&#xff0c;即均方误差&#xff1a;R||Q-Y||22 (2)当均方误差最小时&#xff0c;说明构造的拟合向量与原始向量最为接近&#xff0c;这种曲线拟合的方法…

sql中group by 的使用

1、概述 Group By 从字面意义上理解就是根据By指定的规则对数据进行分组&#xff0c;所谓的分组就是将一个数据集划分为若干个小区域&#xff0c;然后针对若干个小区域进行数据处理 2、原始表 3、简单的Group By 示例1 select 类别&#xff0c;数量 as 数量之和 from A gro…

easyui Uncaught TypeError: Cannot read properties of null (reading ‘width‘)

问题描述 在将easyui1.3.6版本替换为1.7版本的时候。只有表头显示出来了&#xff0c;内容并没有显示出来&#xff0c;且报异常。表头也没有按照期望的宽度正常显示。错误提示如下 问题原因及解决办法 该问题出现的原因是因为该表格的表头涉及到跨行跨列问题&#xff0c;原因…

2023年国际高校数学建模竞赛A题:购物网站的数据分析

数据处理&#xff1a; Appendix II的词频统计和数据可视化&#xff1a; 代码: 代码注释完美&#xff0c;可直接运行&#xff0c;简单易用&#xff0c;不懂可以直接问我&#xff0c;在线答疑。 四个题目的代码获取&#xff1a; 可直接运行代码 可直接运行代码 可直接运行…

小程序自定义步骤条实现

效果展示&#xff1a; 支持背景颜色自定义 <view class"hl_steps"><view class"hl_steps_item" wx:for"{{steps}}" wx:key"id"><view class"hl_steps_item_circle_out" style"background-color: {{col…

数据可视化——如何绘制地图

文章目录 前言如何绘制地图添加配置项 根据已有数据绘制地图整体代码展示 前言 前面我们学习了如何利用提供的数据来对数据进行处理&#xff0c;然后以折线图的形式展现出来&#xff0c;那么今天我将为大家分享如何将提数据以地图的形式展现。 如何绘制地图 前面我们绘制折线…

Flutter动画库:animations(路由过渡动画或者页面切换动画)

animations animations 是一个 Flutter 库&#xff0c;它提供了一组用于创建动画效果的工具和组件。这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 flutter pub add animations看了下官方文档和官方例子&a…

编程规范—代码风格

先看以下两段代码。 对于计算机来说&#xff0c;这两段代码并没有什么区别&#xff0c;都可以执行&#xff0c;执行结果也一样。但是对于我们人类来说&#xff0c;第二段代码显然看起来更舒适&#xff0c;程序的可读性也更强&#xff0c;跟写作文类似&#xff0c;把所有内容挤在…

RocksDB架构

1、rocksdb是什么? RocksDB中文网 | 一个持久型的key-value存储 rocksdb是一种KV存储引擎&#xff0c;常用于数据库存储数据&#xff0c;无法直接使用&#xff0c;没有提供sql命令&#xff0c;通过调用rocksdb提供的api进行数据库的读写等操作。 rocksdb是以leveldb为基础开…

WinCE OSDesign项目创建模拟器

vs2005创建OSDesign项目&#xff0c;WinCE6 1.解决方案管理器&#xff0c;项目鼠标右键属性 默认语言设置 编译选项 2.主菜单&#xff1a;Target->Connectivity Options Add Device/Remove Device不用管 Kernel Service Map Core Service Settings默认 Service Status默…

网络安全(黑客)自学路线笔记

一、什么是黑客&#xff1f; 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手&#xff0c;现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术&#xff1f; 其实&#xff0c;网络信息空间安全已经成为海陆空之外的第四大战场&#xff0c;除了国与国之间的博弈&am…

企业微信在ios机型无法吊起打开个人信息页接口(openUserProfile)

wx.qy.openUserProfile({type: 1,//1表示该userid是企业成员&#xff0c;2表示该userid是外部联系人userid: "wmEQlEGwAAHxbWYDOK5u3Af13xlYAAAA", //可以是企业成员&#xff0c;也可以是外部联系人success: function(res) {// 回调} });遇到的问题&#xff1a;调用打…

flutter开发实战-实现推送功能Push Notification

flutter开发实战-实现推送功能Push Notification 推送服务现在可以说是所有 App 的标配了&#xff0c;最近在Flutter工程项目上实现推送功能。flutter上实现推送功能需要依赖原生的功能&#xff0c;需要插件实现&#xff0c;这里使用的是极光推送的服务。 一、效果图 效果图…

整车总线系列——FlexRay 七

整车总线系列——FlexRay 七 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能…

swagger对json数据的处理

在实习中遇到了一个不寻常的事情&#xff0c;今天和同事讨论一个小问题&#xff0c;同事使用swagger&#xff0c;想要调用一个接口&#xff0c;这个接口要传递一个json对象&#xff0c;对应java的一个实体类&#xff0c;但是有一个属性同事不想看到它&#xff0c;就用JsonIgnor…

主从复制 [学习笔记] MaterSlave

文章目录 前言MySQL主从复制的实战案例1、环境搭建2、主库配置&#xff0c;进入vim /etc/my.cnf3、重启数据库4、建立同步账号5、锁表设置只读6、设置主库状态7、备份数据库资料8、解锁9、主库备份数据上传到从库10、slave从库设置11、还原数据的备份12、设定从主库同步 前言 …

物流智能搬运机器人|HEGERLS四向穿梭车在复杂生产场景下的智能化作业应用

一般而言&#xff0c;物流有三个基本环节&#xff1a;存取、输送和分拣。在存取环节&#xff0c;常用方式有两种&#xff1a;托盘存取和料箱存取。以前托盘存取应用得多一些&#xff0c;但随着电商、新零售的兴起&#xff0c;B2b、B2C业务快速增长&#xff0c;订单碎片化趋势明…

ripv2小实验

子网划分 192.168.1.0/24&#xff1a; 192.168.1.0/26 192.168.1.64/26 192.168.1.128/26 192.168.1.192/26 192.168.1.0/26划分为 192.168.1.0/26 192.168.1.4/26 192.168.1.8/26 192.168.1.12/26 192.168.1.16/26 192.168.1.20/26 192.168.…

IDEA如何打包springboot成jar包,并运行、停止、重启,本地依赖不能打包怎么办

1、将springboot项目打包成jar 第一步 这里要注意依赖的包的导入&#xff0c;有pom.xml中网络依赖导入&#xff0c;有的包是本地依赖导入&#xff0c;本地依赖的包只需在pom.xml加入一下代码即可&#xff01; <dependency><groupId>jacob</groupId>//名称…