基于MYCAT的MYSQL主从与读写分离配置详解与示例

2023-10-27

原文地址:http://blog.csdn.net/dreamcode/article/details/49511833

第三版_基于Mycat的MySQL主从读写分离配置详解与示例 

完整文章下载地址:http://download.csdn.net/detail/dreamcode/9383512


1、不使用Mycat托管MySQL主从服务器,简单使用如下配置:

         <dataNodename="dn1" dataHost="localhost1" database="db1"/>

         <dataNodename="dn2" dataHost="localhost1" database="db2"/>

         <dataNodename="dn3" dataHost="localhost1" database="db3"/>   

<dataHost name="localhost1"maxCon="1000" minCon="10" balance="0"

                   writeType="0"dbType="mysql" dbDriver="native"switchType="1" slaveThreshold="100">

                   <heartbeat>selectuser()</heartbeat>

                   <writeHosthost="hostM" url="10.1.176.158:3306" user="root"

                            password="123456">

                   </writeHost>

         </dataHost>

2、使用Mycat托管主从切换使用如下配置:

         <dataHostname="localhost1" maxCon="1000" minCon="500"balance="2"

                   writeType="0" dbType="mysql"dbDriver="native" switchType="2"  slaveThreshold="100">

                   <heartbeat>show slave status</heartbeat>

                   <!--can have multi write hosts -->

                   <writeHosthost="hostM1" url="10.1.176.158:3306" user="root"

                            password="123456">

                   </writeHost>

                   <writeHosthost="hostS1" url="10.1.176.78:3306" user="root"

                            password="www.com.workssys"/>

</dataHost>

(1)注意,如果只有一个writeHost,主挂了,读也不能用。writeType=0,写操作只发第一个writeHost,发生了切换,原来的从变为主,所有写操作在原来的从执行,如果不是双向复制原来的主数据就是旧的。切换间隔是5次心跳时间,默认是10 * 5=50秒(第一次10秒没响应,后面可能会变成15秒检测,然后20秒,最后真的没响应就认为挂了),心跳配置在server.xml,使用dataNodeHeartbeatPeriod参数:对后端所有读、写库发起心跳的间隔时间,默认是10秒。

(2)注意,切换后重启原来的主,如果主从不同步 ,报错:Slave_SQL_Running:No

数据保证一致后,执行:

mysql> slave stop;

Query OK, 0 rows affected(0.00 sec)

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

Query OK, 0 rows affected(0.00 sec)

mysql> slave start;

Query OK, 0 rows affected(0.00 sec)

mysql> show slave status\G

(2)切换后,Mycat会标记新的主从状态,主从状态保存在/conf/dnindex.properties文件,正常情况是将原来的从就作为主,主从对调,修改schema.xml文件。但是如果想恢复原来的主,需要执行9066端口的Mycat管理工具的switch命令切换数据源:

switch @@datasource name:index

name:schema中配置的dataHost 中name。

index:schema中配置的dataHost 的writeHost index 位标,即按照配置顺序从上到下的一次顺序,从0开始,即第一个是WriteHost是0,另一个就是1。

切换数据源时,会将原数据源所有的连接池中连接关闭,并且从新数据源创建新连接,此时mycat服务不可用。

dnindex.properties文件记录了当前的活跃writer。

<dataHostname="blog" maxCon="100" minCon="10"balance="0"

writeType="0"dbType="mysql" dbDriver="native">

<heartbeat>select1</heartbeat>

<writeHosthost="master" url="127.0.0.1:3306" user="root"password="root"></writeHost>

<writeHosthost="master2" url="127.0.0.1:3306" user="root1"password="root"</writeHost>

</dataHost>

mysql> show @@datasource;

+----------+---------+-------+----------------+------+------+--------+------+--

|DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE |

+----------+---------+-------+----------------+------+------+--------+------+--|blog | master | mysql | 121.40.121.133 | 3306 | W | 0 | 10 | 100 | 16 |

|blog | master2 | mysql | 127.0.0.1 | 3306 | W | 0 | 0 | 100 | 0 |

+----------+---------+-------+----------------+------+------+--------+------+--2rows in set (0.00 sec)

mysql> switch @@datasource blog:1;

Query OK, 1 row affected (1min 0.05 sec)

(3)切换后,查看哪一个在执行库操作

show @@heartbeat、show @@backend

观察RS_CODE字段


(4)主突然宕机后,恢复顺序:

       1)查看数据是否同步,人为同步数据,同步数据时注意,主从同步状态时一定要在主的那一端执行操作,然后主会同步到从;但是一旦在从那一端操作的话,执行到主,主又会返回给从,如执行下面的操作,有drop table操作非常危险

       2)恢复主节点

       3)在DB中做主从对调,先停止原从节点的从复制操作slave stop,再启动原主节点的从复制操作slave start

       4)到新的从服务器执行以下语句,查看主从状态是否正常,首先手动启动新的slave,因为加入了skip-slave-start参数

                   slave start

                   show slavestatus \G

       5)执行插入验证,至此操作结束

       6)注意:Mycat不要重启,心跳一直会检测,在DB里把主从对调好就没错误提示了,恢复了心跳就会恢复正常

       7)注意:如需要恢复原来配置,执行switch操作,但不建议这样做(switch操作执行较慢,并且似乎有问题,并不能保证执行正确)。switch之前要检查日志主的心跳有没有恢复正常,正常了才能切。

  mysql -utest -ptest -hlocalhost -P9066 -DTESTDB

                  switch @@datasource localhost1:0

8)注意:目前主从都是通过show slave status,当主宕机以后,发生切换,从变为主,原来的主变为从,这时候show slave status就会发生错误,因为原来的主没有开启slave,不建议直接使用switch操作,而是在DB中做主从对调。

(5)特别注意:schema中的每一个dataHost的host属性值必须唯一,否则会出现主从在所有dataHost中全部切换的现象,如下所示是不对的,当一组切换时,另一组也同时切换。

<dataHostname="userDBHost" maxCon="1000" minCon="500"balance="2" writeType="0" dbType="mysql"dbDriver="native" switchType="2"slaveThreshold="100">

                 <heartbeat>showslave status</heartbeat>

                <writeHosthost="hostM1" url="172.16.224.204:3306"user="root" password="root123" />

                <writeHosthost="hostS1" url="172.16.227.129:3306"user="root" password="root123" />

</dataHost>

 

<dataHostname="orderDBHost" maxCon="1000" minCon="500"balance="2" writeType="0" dbType="mysql"dbDriver="native" switchType="2"slaveThreshold="100">

                 <heartbeat>showslave status</heartbeat>

                <writeHosthost="hostM1" url="172.16.224.205:3306"user="root" password="root123" />

                <writeHosthost="hostS1" url="172.16.225.249:3306"user="root" password="root123" />

</dataHost>

(6)注意:每天从主的那一端备份全量数据库和增量数据库

(7)注意:修改schema.xml要在linux下操作,否则出现编码错误
(8)修改schema.xml后不需要执行switch命令,重启mycat后自动回复原始状态

(9)新增表或修改schema后,重新部署顺序:1.修改Mycat Schema;2.更新MySQL;3.部署新应用

3、Mycat 1.4 支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠

         <dataNodename="dn1" dataHost="localhost1" database="db1"/>

         <dataNodename="dn2" dataHost="localhost1" database="db2"/>

         <dataNodename="dn3" dataHost="localhost1" database="db3"/>

         <dataHostname="localhost1" maxCon="1000" minCon="10"balance="1"

                   writeType="0"dbType="mysql"dbDriver="native" switchType="2"  slaveThreshold="100">

                   <heartbeat>show slave status</heartbeat>

                   <writeHosthost="hostM" url="10.1.176.158:3306" user="root"

                            password="123456">

                            <readHosthost="hostS" url="10.1.176.78:3306" user="root"

                            password="123456"/>

                   </writeHost>

         </dataHost>

(1)设置balance="1"与writeType="0"

1) Balance参数设置:

负载均衡类型,目前的取值有3种:

<1>balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

<2> balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

<3>balance="2",所有读操作都随机的在writeHost、readhost上分发。

2) WriteType参数设置:

<1> writeType="0",所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost。如果都挂了,那就悲剧了,起来哪个,写哪个,很有可能数据不一致;所以不要数据库恢复之后不要让mycat切回。

<2>writeType="1",所有写操作都随机的发送到配置的writeHost。

<3>writeType="2",没实现。

 “readHost是从属于writeHost的,即意味着它从那个writeHost获取同步数据,因此,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了。基于这个考虑,目前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在Mycat里配置为两个writeHost并设置banlance=1。”

(2)设置 switchType="2" 与slaveThreshold="100"

“Mycat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType="2" 与slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。Mycat心跳机制通过检测 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running","Slave_SQL_Running" 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延。“

0
1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MYCAT的MYSQL主从与读写分离配置详解与示例 的相关文章

随机推荐

  • 使用Python的requests库与chatGPT进行通信

    前言 在人工智能领域 自然语言处理模型如OpenAI GPT 3 5 Turbo具有广泛的应用 虽然官方提供了Python库来与这些模型进行交互 但也有一些人更喜欢使用requests库来自定义请求和处理响应 比如现在很多第三方LLM都提供
  • epoll 相对于select的优势

    epoll 相对于select的优势 分类 LinuxKnowHow 819 0 举报 收藏 这个问题至今才去查 是因为我需要用的地方真的不是很多 学习了那么多年 不知道自己究竟学了什么 觉得自己的优势就是针对特定知识点都熟悉点 一整套的软
  • 微信小程序支付踩坑notify_url(支付回调)

    最近做了微信小程序支付 支付成功之后发现notify url回调地址竟然没有访问 检查了无数次代码 下单结果里面的回调地址看了又看 都没有错啊 把回调地址复制出来到浏览器上面 外网也是可以访问的啊 然后我再分析 为什么以前公众号支付都没有出
  • Rust - 简单使用 reqwest 发起 HTTP 请求

    Rust 简单使用 reqwest 发起 HTTP 请求 一 reqwest 是什么 二 使用 reqwest 发起请求 1 在 Cargo tom 添加依赖 2 main rs 三 文章参考 一 reqwest 是什么 reqwest 是
  • Lua调用Unity完成登入注册

    今天的内容是用Lua调用Unity完成登入注册 这里只是完成了一个很简单的功能哦 注意哦 这里间的Lua文件放在同一个过程的同一个文件夹下 这里用到了一个Lua模块 a CS UnityEngine Lua调用C 需要这个前缀 One fu
  • 项目管理软件dhtmlxGantt配置教程(十):如何设置时间和范围

    1 时间单位 要设置比例的单位 请使用相应比例对象中的unit属性 可能的值是 分钟 小时 天 周 季度 月 年 gantt config scales unit month step 1 format F Y unit day step
  • vue路由history模式刷新页面出现404问题

    vue hash模式下 URL中存在 用 history 模式就能解决这个问题 但是history模式会出现刷新页面后 页面出现404 解决的办法是用nginx配置一下 在nginx的配置文件中修改 方法一 server listen 90
  • oracle中nextday,Oracle日期函数 next_day

    Oracle日期函数 next day 在Oracle是提供了next day求指定日期的下一个日期 语法 next day date weekday date is used to find the next weekday weekda
  • TCP/IP的层次结构以及各层数据封装的过程 (一)

    参考文献 TCP IP详解 卷1 协议 Tcp ip协议的四个层次 在以上的图中 FTP属于应用层的协议 TCP UDP属于运输层的协议 在TCP IP协议族中 网络层IP提供的是一种不可靠的服务 它尽可能的把分组从源节点送到目的节点 但是
  • libevent源码学习(9):事件event

    目录 在event之前需要知道的event base event结构体 创建 注册一个event 向event base中添加一个event 设置event的优先级 激活一个event 删除一个event 获取指定event的状态 纯超时e
  • AD覆铜技巧、连接类型问题。

    首先先说说连接的问题 如过孔的连接主要分两种 一直是直接连接的过孔 另一种就是梅花孔 或十字孔 那么这两种连接有什么特别的地方呢 直接连接 使过孔或者焊盘与覆铜层接触面积更大 可以将整块铜层作为器件的散热板 易于散热 适合连接一些大功率 发
  • js实现todolist总结

    首先在网页布局设置好的情况下 进行js文件的编写 要求实现增加 删除 和实时变化 其实这都可以在存在浏览器的本地存储中 下面先列出我的html页面及css文件内容
  • 众享比特中标中电投电力工程有限公司区块链项目

    近日 众享比特中标中电投电力工程有限公司的区块链系统在建设项目档案中跨企业认证应用项目 众享比特将与中电投电力工程有限公司展开密切合作 应用区块链技术助力其实现工程建设档案在项目公司 监理单位 总承包单位 施工单位等跨企业认证 破解数字化档
  • 中尺度混凝土二维有限元求解——运行弯曲、运行光盘、运行比较、运行半圆形(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 中尺度混凝土二维有限元求解是一种常见的工程
  • 天平数学,12个球称3次

    天平数学 12个球称3次 问题 天平数学问题 有12个外观完全一样的球 其中有一个球和其他球的重量不一致 如何使用一个天平称3次得出不一致的球是哪个 解答 方法一 12个球 1 2 3 4 5 6 7 8 9 10 11 12 第一次 1
  • Android studio4.0 内嵌 UnityActivity

    Android studio4 0 内嵌 UnityActivity 用最简单方法嵌入UnityActivity 首先 得导出Unity Android工程 其次 新建android studio工程 排错 感言 问题 用最简单方法嵌入Un
  • 03系统多界面_秒懂:海湾JB-QB-GST200报警控制器系统调试步骤

    海湾JB QB GST200报警控制器系统调试步骤 此调试步骤可用于海湾消防JB QB GST200壁挂式火灾报警控制器 联动型 JB QB GST200立柜式火灾报警控制器 联动型 JB QB GST200琴台式火灾报警控制器 联动型 一
  • 报错处理(收集)

    1 vue axios 报错 Uncaught in promise TypeError Cannot convert undefined or null to object at Function keys
  • c++11 多线程支持 (std::shared_future)

    定义于头文件
  • 基于MYCAT的MYSQL主从与读写分离配置详解与示例

    原文地址 http blog csdn net dreamcode article details 49511833 第三版 基于Mycat的MySQL主从读写分离配置详解与示例 完整文章下载地址 http download csdn ne