MySQL 运维知识点(十五)---- 分库分表与MyCat - 教程

一、 分库分表介绍

1. 为什么要分库分表?

当单表数据量达到千万级别,或数据库实例的 QPS/TPS 过高导致性能瓶颈时,就需要考虑分库分表。

  • 垂直分库:按业务模块将不同表拆分到不同数据库中。

  • 水平分库:将同一个表的数据按某种规则拆分到多个数据库中。

  • 垂直分表:将一个宽表的字段按访问频率拆分成多个表。

  • 水平分表:将同一个表的数据按某种规则拆分到多个表中。

核心目的:解决由于数据量过大而导致的数据库性能瓶颈问题。

二、 Mycat 概述

1. 什么是 Mycat?

Mycat 是一个开源的分布式数据库系统,是一个实现了 MySQL 协议 的服务器。前端用户可以把它看作是一个数据库代理,其核心功能是分库分表

2. Mycat 的核心作用
  • 读写分离:自动将写操作路由到主库,读操作路由到从库。

  • 数据分片:将大数据表水平拆分,分布到多个后端 MySQL 节点上。

  • 多数据源整合:统一对外提供服务,隐藏后端复杂的分布式架构。

  • 高可用性:支持数据库故障自动切换。

3. Mycat 核心概念
概念描述
逻辑库应用程序直接连接的数据库,在 Mycat 中配置,不存在于实际 MySQL 中
逻辑表在逻辑库中创建的表,是物理表的逻辑映射
数据节点存储实际数据的数据库实例,如 192.168.1.1:3306/testdb
分片规则决定数据如何分布到不同数据节点的算法

三、 Mycat 入门

1. 快速开始
  1. 下载安装:从官网下载 Mycat,解压即可。

  2. 配置文件:主要修改 conf/ 目录下的配置文件。

  3. 启动:执行 bin/mycat start

  4. 连接:使用 MySQL 客户端连接 Mycat(默认端口 8066)。

2. 连接 Mycat
mysql -u root -p -P 8066 -h 127.0.0.1

注意:连接的是 Mycat 服务,不是直接的 MySQL。

四、 Mycat 配置

Mycat 的核心配置文件都在 conf/ 目录下。

1. server.xml - 系统配置

定义用户、权限、系统参数等。


    mycat_pass
    TESTDB 
2. schema.xml - 逻辑库表配置

最重要的配置文件,定义逻辑库、逻辑表、数据节点、分片规则等。




    
    
        
        
    
    
    
    
        select user()
        
    

3. rule.xml - 分片规则配置

定义分片算法和规则。

五、 Mycat 分片

1. 常见分片规则
分片规则描述适用场景
取模分片根据字段值取模分配到不同节点数据均匀分布
范围分片按字段值范围分配按时间、ID范围划分
哈希分片一致性哈希算法减少数据迁移
枚举分片按字段枚举值分配如按地区、类型分片
2. 分片规则配置示例

取模分片



    
        user_id
        mod-long
    


    3 

范围分片


    autopartition-long.txt

在 autopartition-long.txt 中定义范围:
0-1000000=0
1000001-2000000=1
2000001-3000000=2

六、 Mycat 管理与监控

1. 管理命令
-- 查看数据节点状态
show @@datanode;
-- 查看连接状态
show @@connection;
-- 查看缓存
show @@cache;
-- 查看线程池状态
show @@threadpool;
-- 重启Mycat(在连接中执行)
reload @@config;
2. 监控方式
  • 命令行监控:通过 9066 管理端口连接
mysql -u root -p -P 9066 -h 127.0.0.1
  • Web 监控:部署 Mycat-web 进行图形化监控

  • JMX 监控:通过 JMX 接口获取运行状态

3. 常见管理操作
-- 在9066管理端口执行
-- 查看帮助
show @@help;
-- 查看系统状态
show @@system;
-- 查看SQL统计
show @@sql;
-- 查看慢SQL
show @@slow;

七、 Mycat 使用示例

1. 完整的分库分表示例

场景:将 users 表按 user_id 取模分片到3个节点。

① schema.xml 配置


    



    select user()
    

② 应用程序连接

// JDBC连接字符串
String url = "jdbc:mysql://mycat-server:8066/TESTDB";
// 应用程序像使用普通MySQL一样操作,无需关心分片细节

八、 注意事项

  1. 分片键选择:选择查询频繁且数据分布均匀的字段作为分片键。

  2. 全局表:小量且需要频繁关联查询的表可配置为全局表,在所有节点冗余存储。

  3. ER表:有关联关系的表可配置为ER表,保证关联数据在同一分片。

  4. 分布式事务:Mycat 对分布式事务的支持有限,复杂事务需在应用层处理。

  5. SQL限制:某些复杂SQL(如子查询、跨分片JOIN)可能不被支持或性能较差。

总结

Mycat 作为分布式数据库中间件,核心价值在于让应用程序无感知地使用分库分表

使用流程

  1. 分析业务需求,设计分片方案

  2. 配置 server.xmlschema.xmlrule.xml

  3. 启动 Mycat 服务

  4. 应用程序连接 Mycat

  5. 通过管理端口监控运行状态

Mycat 大大降低了分库分表的技术门槛,是构建高并发、大数据量应用的重要工具。

posted on 2025-11-01 17:20  wgwyanfs  阅读(21)  评论(0)    收藏  举报

导航