linux中主从复制的架构和读写分离的方式
读写分离
- 互相主从
- 架构
- 注意点
- 双主双从
- 架构
- 注意点
- 一主多从
- 架构
- 注意点
- 读写分离
- 概念
- 部署jdk环境
- 上传文件,解压文件
- 配置环境变量
- 部署mycat环境
- mycat配置文件
- 给所有数据库创建访问用户
- 配置 server.xml
- 配置 schema.xml
- 启动mycat
- 查看启动端口
- 日志
- 负载均衡
- 测试
- 遇到的问题
- 能进mycat但是进不去TESTDB
- 调整mysql最大连接数
- 在mycat中use TESTDB特别卡
- 测试负载均衡时候,0查看到的是主2,1查看到的是主1,从1从2(基于双主双从做的读写分离)
- 更改假用户登录mycat后查看的数据库名
互相主从
架构
| ip | role |
|---|---|
| ip1 | ip2的主库、ip2的从库 |
| ip2 | ip1的主库、ip2的从库 |
注意点
两个服务器上都要创建远程登录拷贝用户
两个数据库都在写入数据,可能会造成主键冲突,可以在my.cnf配置文件中写入
auto_increment_increment=2 //设置初始步长值 auto_increment_offset=1 //设置偏移量这样就可以避免主键冲突
双主双从
架构
| ip | role |
|---|---|
| ip1 | ip3和ip2的主库,ip2的从库 |
| ip2 | ip4和ip1的主库,ip1的从库 |
| ip3 | ip1的从库 |
| ip4 | ip2的从库 |
注意点
因为ip1和ip2的主库要拷贝多份二进制binlog日志,在my.cnf里添加参数
log-slave-updates //binlog可以多次拷贝,主库复制的内容也会写入从库binlog
一主多从
架构
| ip | role |
|---|---|
| ip1 | ip2和ip3的主库 |
| ip2 | ip1的从库 |
| ip3 | ip1的从库 |
注意点
因为ip1的主库要拷贝多份二进制binlog日志,在my.cnf里添加参数
log-slave-updates //binlog可以多次拷贝,主库复制的内容也会写入从库binlog
读写分离
概念
一主一从的基础上实现读数据和写数据访问不同的服务器
Mycat 是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的数据库系统,Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。MyCAT是使用JAVA语言进行编写开发,使用前需要先安装JAVA运行环境(JRE),由于MyCAT中使用了JDK7中的一些特性,所以要求必须在JDK7以上的版本上运行。
部署jdk环境
上传文件,解压文件
tar -xf jdk-8u181-linux-x64.tar.gz
配置环境变量
vim /etc/profile.d/java.sh //java环境配置export JAVA_HOME=/opt/jdk1.8.0_211
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile.d/java.sh //使环境变量生效
部署mycat环境
tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
vim /etc/profile //环境配置export JAVA_HOME=/opt/mycat
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile //重启环境变量
mycat配置文件
mycat/conf/server.xml //定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接mycat的用户信息,简单来说,就是假的信息mycat/conf/schema.xml //定义逻辑库,表、分片节点等内容。
给所有数据库创建访问用户
grant all on *.* to '用户名'@'%' identified by "密码";
配置 server.xml
修改配置文件前备份一份
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!-- 登录mycat的用户和密码--><user name="root" defaultAccount="true"><property name="password">0</property>
<!-- 登录mycat的用户看到的数据库名--><property name="schemas">TESTDB</property></user><user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property></user>
</mycat:server>
配置 schema.xml
修改配置文件前备份一份
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--逻辑库和分表设置,与server.xml一致--><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!--数据节点,database是真实存在的组,真组和假组在这里建立连接--><dataNode name="dn1" dataHost="localhost1" database="stu" /><!--主机组,注意name和数据节点的dataHost相同即可,balance负载均衡--><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><!--健康检查--><heartbeat>select user()</heartbeat><!--读写配置,此处以双主双从举例,此处的用户数据库必须存在--> <writeHost host="hostM1" url="主1ip:端口" user="用户" password="密码"><readHost host="hostS1" url="从1ip:端口" user="用户" password="密码"/></writeHost><writeHost host="hostM2" url="主2ip:端口" user="用户" password="密码"><readHost host="hostS2" url="从2ip:端口" user="用户" password="密码"/></writeHost></dataHost>
</mycat:schema>

启动mycat
mycat start
查看启动端口
ss -nplt
端口关注8066
日志
mycat/logs //日志目录drwxr-xr-x 2 root root 4096 12月 26 10:24 2023-12 //打包的日志文件
-rw-r--r-- 1 root root 23800 12月 26 11:19 mycat.log //mycat的启动日志文件
-rw-r--r-- 1 root root 5 12月 26 10:24 mycat.pid //启动程序的pid
-rw-r--r-- 1 root root 72956 12月 26 10:24 wrapper.log //错误日志
负载均衡
balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
4. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
5. balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
测试
mysql -uroot -p0 -hmycat -P8066 TESTDB //此处登录的ip地址是mycat存在的主机,登录的用户是在mycat/conf/server.xml中写的假的数据库登录信息关闭双主双从的主从复制,服务器分别创建数据库,用负载均衡,进行检查
0:只能查看正在写的数据库
1:除了正在写的数据库都有
2:所有数据库
3:所有读的数据库
遇到的问题
能进mycat但是进不去TESTDB
问题一
一般情况是数据库的用户授权或者创建有问题若是多主数据库的情况,进不去数据库时候,会一直建立连接,用户问题解决后
调整mysql最大连接数
max-connections=2000 //增加mysql最大连接数的配置,在my.cnf更改
在mycat中use TESTDB特别卡
问题一
schema.xml配置文件中
<!--数据节点,database是真实存在的组,真组和假组在这里建立连接-->
<dataNode name="dn1" dataHost="localhost1" database="stu" />
数据节点database的数据库可能在主从架构中不存在问题二
创建用户和库的时候,先创的用户,后创建的库,用户没有授权这个库,重新对用户进行授权即可
测试负载均衡时候,0查看到的是主2,1查看到的是主1,从1从2(基于双主双从做的读写分离)
主1数据库的最大连接数连满了,写的目标数据库变成主2的数据库
重启数据库即可解决或者设置数据库的最大连接数
更改假用户登录mycat后查看的数据库名
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!-- 登录mycat的用户和密码--><user name="root" defaultAccount="true"><property name="password">0</property>
<!-- 登录mycat的用户看到的数据库名--><property name="schemas">nan</property></user><user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property></user>
</mycat:server>schema.xml
<schema name="nan" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">然后就起不来了,问题在假库的配置文件,user的标签内识别不到,不用user标签,将标签删除,如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!-- 登录mycat的用户和密码--><user name="root" defaultAccount="true"><property name="password">0</property>
<!-- 登录mycat的用户看到的数据库名--><property name="schemas">nan</property></user>
</mycat:server>
重启,一般情况就起来了
相关文章:
linux中主从复制的架构和读写分离的方式
读写分离 互相主从架构注意点 双主双从架构注意点 一主多从架构注意点 读写分离概念部署jdk环境上传文件,解压文件配置环境变量 部署mycat环境mycat配置文件给所有数据库创建访问用户配置 server.xml配置 schema.xml启动mycat查看启动端口日志负载均衡测试 遇到的问…...
Ubuntu 22.04.3 Server 设置静态IP 通过修改yaml配置文件方法
目录 1.查看网卡信息 2.修改yaml配置文件 3.应用新的网络配置 4.重新启动网络服务 文章内容 本文介绍Ubuntu 22.04.3 Server系统通过修改yaml配置文件配置静态 ip 的方法。 1.查看网卡信息 使用ifconfig命令查看网卡信息获取网卡名称 如果出现Command ifconfig not fo…...
EasyCVR无人机推流+人数统计AI算法,助力公共场所人群密度管控
一、背景与需求 在公共场所和大型活动的管理中,人数统计和人群密度控制是非常重要的安全问题。传统的方法可能存在效率低下或准确度不足的情况,无法满足现代社会的需求。TSINGSEE青犀可以利用无人机推流AI人流量统计算法,基于计算机视觉技术…...
Kotlin 接口
Kotlin 的接口可以既包含抽象方法的声明也包含实现;接口无法保存状态;可以有属性但必须声明为抽象或提供访问器实现 1、定义 使用关键字 interface 来定义接口 interface MyInterface {fun bar()fun foo() {// 可选的方法体} } 2、 实现接口 一个类…...
Qt前端技术:5.QSS
这个是表示QFrame中的pushButton中的子类和它子类的子类都将背景变为red 写成大于的时候表示只有直接的子类对象才会变 这个图中的QGroupBox和QPushButton都是QFrame的直接的子类 这个中的QGroupBox是QFrame的直接的子类但是QPushButton 是QGroupBox的子类,QPushB…...
在Centos7中利用Shell脚本:实现MySQL的数据备份
目录 自动化备份MySQL 一.备份数据库脚本 1.创建备份目录 2.创建脚本文件 3.新建配置文件(连接数据库的配置文件) 4.给文件权限(mysql_backup.sh) 编辑 5.执行命令 (mysql_backup.sh) 编辑 二.数据库通过备份恢复 1.创建脚…...
大一C语言查缺补漏 12.24
遗留问题: 6-1 1 在C语言中,如果要保留小数的话,一定要除以2.0,而不是2。 设整型变量m,n,a,b的值均为1,执行表达式(m a>b)||(n a<b)后,表达式的值以及变量m和n的值是&#…...
程序员宝典:常用的免费好物API
六位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字小写、数字大写、数字大小写等情况。 四位图片验证码生成:四位图片验证码生成,包括纯数字、小写字母、大写字母、大小写混合、数字小写、数字大写、数字大小写等情况。…...
关于“Python”的核心知识点整理大全41
目录 scoreboard.py game_functions.py game_functions.py 14.3.8 显示等级 game_stats.py scoreboard.py scoreboard.py scoreboard.py game_functions.py game_functions.py alien_invasion.py 14.3.9 显示余下的飞船数 ship.py scoreboard.py 我们将最高得分圆整…...
java进阶(二)-java小干货
java一些精干知识点分享 2. java小干货2.1循环遍历2.2可变参数2.3 list和数组转化2.3.1 数组转list2.3.2 list转数组 2.4 值传递和地址传递2.4.1值传递2.4.2 地址传递2.4.3易错点总结 2.5 数据类型2.5.1基础知识2.5.2 基础数据和包装类 2.6 字符串2.6.1 char/String区别2.6.2 .…...
layui(iconPickerFa)图标选择器插件,主要用于后台菜单图标管理
话不多说直接上代码 在页面中引入如下代码 <link rel"stylesheet" href"/template/admin/layui-v2.5.6/css/layui.css"> <script type"text/javascript" src"/template/admin/layui-v2.5.6/layui.js"></script> &…...
RabbitMQ入门指南(九):消费者可靠性
专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、消费者确认机制 二、失败重试机制 三、失败处理策略 四、业务幂等性 1.通过唯一标识符保证操作的幂等性 2.通过业务判断保证操作的幂等性 总结 前言 RabbitMQ是一个高效、可靠的开源消息队列系…...
MySQL的聚合函数、MySQL的联合查询、MySQL的左连接右连接内连接
MySQL的聚合函数 MySQL聚合函数是在数据库中对数据进行聚合操作的函数。它们将多行数据作为输入,并返回单个值作为结果。 常用的MySQL聚合函数包括: COUNT:计算符合条件的行数。SUM:对指定列的数值进行求和操作。AVG࿱…...
RKNN Toolkit Lite2 一键安装和测试,sh脚本
RKNN Toolkit Lite2 安装和测试教程 本教程旨在指导用户如何使用提供的shell脚本来安装和测试RKNN Toolkit Lite2,适用于需要在Linux系统上部署和测试AI模型的开发者。 简介 RKNN Toolkit Lite2是一个高效的AI模型转换和推理工具包,专为Rockchip NPU设…...
探索中国制造API接口:解锁无限商机,引领制造业数字化转型
一、概述 中国制造API接口是一种应用程序接口,专门为中国制造行业提供数据和服务。通过使用API接口,开发者可以轻松地获取中国制造的商品信息、供应商数据、生产能力等,从而为他们的应用程序或网站提供更加丰富的内容和功能。 二、API接口的…...
CentOS上安装MySQL 8.0的详细教程
CentOS上安装MySQL 8.0的详细教程 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我将为大家分享一篇关于在CentOS上安装MySQL 8.0的详细教程。MySQL是一个强大…...
[RISCV] 为android14添加一个新的riscv device
本篇博客将基于android-14-r18添加Sifive unmatched板子的支持。 Setup build envoronment Establishing a build environment $ sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 libncurses5 x11proto-core-dev libx11-de…...
【Fastadmin】通用排序weigh不执行model模型的事件
在model模型类支持的before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert事件行为中,我们可以快捷的做很多操作,如删除缓存、逻辑判断等 但是在fastadmin的通用排序weigh拖动中无法触发…...
logstash收集华为、H3C、Cisco交换机日志
网络设备配置 将 syslog-ip 替换成服务器的IP地址。 Huawei info-center loghost source interface info-center loghost syslog-ip local-time facility local6 H3C info-center loghost source interface info-center loghost syslog-ip facility local5 Aruba logging arm …...
云上荆楚丨云轴科技ZStack成功实践精选(湖北)
湖北自古以来有九省通衢的美称,地处长江中游,富有荆楚之美誉,灵秀之蕴意。2022年湖北数字经济强省三年行动计划正式印发,计划到“十四五”末,数字经济核心产业增加值力争达到7000亿元,占GDP的比重超过12%。…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
