mycat入门:落地分库分表与读写分离

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 分库分表和读写分离是mycat提供的两种功能,下文将分别介绍如何落地。


image.png

分库分表和读写分离是mycat提供的两种功能,下文将分别介绍如何落地。

1.分库分表

1.修改schema.xml

将以下配置复制到文件中。可变配置请参照修改。

1. <?xml version="1.0"?>
2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
3. <mycat:schema xmlns:mycat="http://io.mycat/">
4. <!-- name:server中配置的mycat服务名 -->
5.  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
6.    <!-- name:表名 datanode 是数据库别名 意思是 dn1,dn2中的user表 在mycat服务中生成,所以需要在datanode中的数据库都需要有user表 rule则是分片策略 而mod-long为分片策略-->
7.    <table name="user" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2" rule="mod-long" />
8.  </schema>
9. 
10. <!-- dn1 dn2对应着上面配置的datanode datahost是下面配置数据源的别名 database:l连接到的mysql服务的test数据库 -->
11.   <dataNode name="dn1" dataHost="localhost1" database="test" />
12.   <dataNode name="dn2" dataHost="localhost2" database="test" />
13. 
14. <!-- name对应着上面 datehost中配置 指定datahost的数据源 -->
15.   <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
16.         writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
17.     <heartbeat>select user()</heartbeat>
18.     <!-- can have multi write hosts -->
19.     <writeHost host="hostM1" url="localhost:3306" user="root"
20.            password="root">
21.     </writeHost>
22.   </dataHost>
23. 
24.   <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
25.         writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
26.     <heartbeat>select user()</heartbeat>
27.     <!-- can have multi write hosts -->
28.     <writeHost host="hostS2" url="192.168.2.134:3306" user="root"
29.            password="123">
30.     </writeHost>
31.   </dataHost>
32. </mycat:schema>
33. 复制代码

2.效果

当我们往mycat服务插入一条时,在数据库,dn1和dn2中轮着插入一条数据。

2.读写分离

1.修改schema.xml

将以下配置复制到文件中。可变配置请参照修改。

1. <?xml version="1.0"?>
2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
3. <mycat:schema xmlns:mycat="http://io.mycat/">
4. 
5.  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
6.    <!-- auto sharding by id (long) -->
7.    <table name="user" primaryKey="id" autoIncrement="true" dataNode="dn1" />
8. 
9.  </schema>
10. 
11.   <dataNode name="dn1" dataHost="localhost1" database="test" />
12. 
13.   <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
14.         writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
15.     <heartbeat>select user()</heartbeat>
16.     <!-- can have multi write hosts -->
17.     <writeHost host="hostM1" url="localhost:3306" user="root"
18.            password="root">
19.        <readHost host="hostM1" url="192.168.2.134:3306" user="root" password="123">
20. </readHost>
21.     </writeHost>
22.   </dataHost>
23. 
24. </mycat:schema>
25. 复制代码

2.效果

读和写分别操作不同的数据库。

3.引申

楼主被面试问到了好几次 :mycat是主库数据复制到从库和直接执行sql操作从库有什么不同?

1.答案

因为主库通过io的形式发送binary log 到从库的relay log中,从库的relay log存放在 os 缓存中。因为是io操作,所以比执行sql更快。

2.复制的原理概括

  1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
  2. slave将master的binary log events拷贝到它的中继日志(relay log);
  3. slave重做中继日志中的事件,将更改应用到自己的数据上。

3.复制的原理详解

  1. 该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
  2. 下一步就是slave将master的binary   log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog  dump process。Binlog dump  process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。  SQL slave  thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
  3. 此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

要点:负责在主、从服务器传输各种修改动作的媒介是主服务器的二进制变更日志,这个日志记载着需要传输给从服务器的各种修改动作。因此,主服务器必须激活二进制日志功能。从服务器必须具备足以让它连接主服务器并请求主服务器把二进制变更日志传输给它的权限。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
859 0
|
canal 分布式计算 Hadoop
canal针对分库分表场景的高可用架构设计与应用
canal针对分库分表场景的高可用架构设计与应用
|
6月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)
Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)
89 0
|
4月前
|
SQL 存储 关系型数据库
Mycat 实现分库分表及读写分离
Mycat 实现分库分表及读写分离
77 0
|
6月前
|
中间件 关系型数据库 MySQL
【中间件】mycat读写分离分析
【中间件】mycat读写分离分析
58 0
|
存储 cobar NoSQL
开源数据库中间件-MyCat初探与分片实践
一个新颖的数据库中间件产品支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。
224 9
开源数据库中间件-MyCat初探与分片实践
聊聊MySQL架构演进:从主从复制到分库分表
背景 业务飞速发展导致数据规模急速膨胀,单机的数据库已经无法满足互联网业务的发展。 传统的将数据集中存储单一数据结节的方案,在容量、性能、可用性和可维护性方面已经难以满足互联网海量数据的场景。
|
算法 测试技术 Apache
分库分表实战
分库分表实战
257 0
|
关系型数据库 MySQL 中间件
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
Mycat中间件综合部署高可用-读写分离-分库分表(1.6)
134 0
|
关系型数据库 MySQL 分布式数据库
Mycat分布式数据库架构解决方案--Mycat实现读写分离
Mycat分布式数据库架构解决方案--Mycat实现读写分离
207 0
Mycat分布式数据库架构解决方案--Mycat实现读写分离