MySQL运维之分库分表(四)

一枝梧桐 知识技能 57

自然月分片

1、介绍

使用场景为按照月份来分片, 每个自然月为一个分片。

2、配置

schema.xml 中逻辑表配置:

<!-- 按自然月分片 -->

<table name="tb_monthpart" dataNode="dn4,dn5,dn6" rule="sharding-by-month" />

schema.xml 中数据节点配置:

<dataNode name="dn4" dataHost="dhost1" database="itcast" />
<dataNode name="dn5" dataHost="dhost2" database="itcast" />
<dataNode name="dn6" dataHost="dhost3" database="itcast" />

rule.xml 中分片规则配置:

<tableRule name="sharding-by-month">
  <rule>
    <columns>create_time</columns>
    <algorithm>partbymonth</algorithm>
  </rule>
  </tableRule>
  
  <function name="partbymonth" class="io.mycat.route.function.PartitionByMonth">
  <property name="dateFormat">yyyy-MM-dd</property>
  <property name="sBeginDate">2022-01-01</property>
  <property name="sEndDate">2022-03-31</property>
  </function>
  
  <!--
从开始时间开始,一个月为一个分片,到达结束时间之后,会重复开始分片插入
配置表的 dataNode 的分片,必须和分片规则数量一致,例如 2022-01-01 到 2022-12-31 ,一
共需要 12 个分片。
-->

分片规则属性含义:

属性描述
columns标识将要分片的表字段
algorithm指定分片函数与function的对应关系
class指定该分片算法对应的类
dateFormat日期格式
sBeginDate开始日期
sEndDate结束日期,如果配置了结束日期,则代码数据到达了这个日期的分片后,会重复从开始分片插入

3、测试

配置完毕后,重新启动 MyCat,然后在 MyCat 的命令行中,执行如下 SQL 创建表、并插入数据,查看数据分布情况。

create table tb_monthpart(
  id bigint not null comment 'ID' primary key,
  name varchar( 100 ) null comment '姓名',
  create_time date null
  );
  
  insert into tb_monthpart(id,name ,create_time) values( 1 ,'Tom','2022-01-01');
  insert into tb_monthpart(id,name ,create_time) values( 2 ,'Cat','2022-01-10');
  insert into tb_monthpart(id,name ,create_time) values( 3 ,'Rose','2022-01-31');
  insert into tb_monthpart(id,name ,create_time) values( 4 ,'Coco','2022-02-20');
  insert into tb_monthpart(id,name ,create_time) values( 5 ,'Rose2','2022-02-25');
  insert into tb_monthpart(id,name ,create_time) values( 6 ,'Coco2','2022-03-10');
  insert into tb_monthpart(id,name ,create_time) values( 7 ,'Coco3','2022-03-31');
  insert into tb_monthpart(id,name ,create_time) values( 8 ,'Coco4','2022-04-10');
  insert into tb_monthpart(id,name ,create_time) values( 9 ,'Coco5','2022-04-30');

MyCat管理及监控

MyCat原理

在 MyCat 中,当执行一条 SQL 语句时,MyCat 需要进行 SQL 解析、分片分析、路由分析、读写分离分析等操作,最终经过一系列的分析决定将当前的 SQL 语句到底路由到那几个(或哪一个)节点数据库,数据库将数据执行完毕后,如果有返回的结果,则将结果返回给 MyCat,最终还需要在 MyCat 中进行结果合并、聚合处理、排序处理、分页处理等操作,最终再将结果返回给客户端。

而在 MyCat 的使用过程中,MyCat 官方也提供了一个管理监控平台 MyCat-Web(MyCat-eye)。

Mycat-web 是 MyCat 可视化运维的管理和监控平台,弥补了 MyCat 在监控上的空白。帮 MyCat 分担统计任务和配置管理任务。Mycat-web 引入了 ZooKeeper 作为配置中心,可以管理多个节点。

Mycat-web 主要管理和监控 Mycat 的流量、连接、活动线程和内存等,具备 IP 白名单、邮件告警等模块,还可以统计 SQL 并分析慢 SQL 和高频 SQL 等。为优化 SQL 提供依据。

MyCat管理

MyCat 默认开通 2 个端口,可以在 server.xml 中进行修改。

  • 8066 数据访问端口,即进行 DML 和 DDL 操作

  • 9066 数据库管理端口,即 MyCat 服务管理控制功能,用于管理 MyCat 的整个集群状态

连接 MyCat 的管理控制台:

mysql -h 192.168.200.210 -p 9066 -uroot -p123456
命令含义
show@@help 查看Mycat管理工具帮助文档
show@@version 查看Mycat的版本
reload@@config 重新加载Mycat的配置文件
show@@datasource 查看Mycat的数据源信息
show@@datanode 查看MyCat现有的分片节点信息
show@@threadpool 查看Mycat的线程池信息
show@@sql 查看执行的SQL
show@@sql.sum 查看执行的SQL统计

MyCat-eye

介绍

Mycat-web(Mycat-eye) 是对 mycat-server 提供监控服务,功能不局限于对 mycat-server 使用。他通过 JDBC 连接对 Mycat、Mysql 监控,监控远程服务器(目前仅限于linux系统)的cpu、内存、网络、磁盘。

Mycat-eye 运行过程中需要依赖 zookeeper,因此需要先安装 zookeeper.

安装

1、zookeeper安装

2、Mycat-web安装

具体的安装步骤,请参考资料中提供的《MyCat-Web安装文档》

访问

http://192.168.200.210:8082/mycat

 配置

1、开启 MyCat 的实时统计功能(server.xml)

<property name="useSqlStat"> 1 </property> 

<!-- 1为开启实时统计、 0 为关闭 -->

2、在 Mycat 监控界面配置服务地址

测试

配置好了之后,我们可以通过 MyCat 执行一系列的增删改查的测试,然后过一段时间之后,打开 mycat-eye 的管理界面,查看 mycat-eye 监控到的数据信息。

A. 性能监控

B. 物理节点

C. SQL统计

D. SQL表分析

E. SQL监控

F. 高频SQL

#推荐阅读

标签: MySQL MySQL日志 MySQL维护 MySQL教程 MyCat