mycat 分库分表

记录一下,方便查看

1.分库分表解决方案:

应用层(jar包):当当 -sharding-jdbc   阿里-TDDL

proxy: 社区: Mycat-cobar 数字:Atlas 百度:heinsberge 商业版:oneproxy  youtube:vitess

2.拆分原则:

  2.1能不拆分尽量不拆分

  2.2如果要拆分一定要选择合适的拆分规则,提前规划好

  2.3数据拆分尽量通过数据冗余或表分组来降低跨库join的可能  

  2.4跨库join是共同难题,所以业务读取尽量少使用多表join

  2.5分片规则和策略  多种分片规则策略,还可以自定义

  2.6分布式全局唯一ID  多种分布式全局唯一ID实现

  2.7多数据源管理问题   统一管理所有数据源 

  2.8跨库跨表join问题   全局表/sharedjoin/catlet

3 核心配置文件:

  server.xml:是Mycat服务器参数调整和用户授权的配置文件。

  schema.xml:是逻辑库定义和表以及分片定义的配置文件。

   rule.xml:是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启  MyCAT。

    log4j.xml:日志存放在logs/log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要可以调整输出级别为    debug;debug级别下,会输出更多的信息,方便排查问题。

   分片相关的id分片规则配置文件 autopartition-long.txt partition-hash-int.txt sequence_conf.properties   sequence_db_conf.properties

service.xml 这是mycat的用户名密码 可以用数据库连接工具连接

 

 

 

schema.xml 对应上图的 TESTDB    

配置数据库连接:可以看到这两个是前面 上一个博客写的docker mysql主从的 地址

 

看第一个table 标签 里面有个rule 就是分片规则  通过id 来分片

4 然后启动mycate(windows版本) 在bin目录下  startup_nowrap.bat

5.数据库连接:因为是本地 然后密码在配置文件展示了  用8066端口就可以连接 了

 

 

db1:

 

db2:

 

mycat库下的db:

### MyCAT 分库分表实现与配置教程 #### 1. MyCAT 分库分表的概念 MyCAT 是一款开源的分布式数据库中间件,支持通过逻辑层来管理物理上的多个数据库实例。其核心功能之一就是分库分表,即将数据按照一定的规则分布在不同的数据库或者表中[^1]。 分库分表的主要目的是解决单机数据库性能瓶颈以及存储容量不足的问题。通过对业务数据进行水平拆分,可以显著提升系统的扩展性和并发处理能力。 --- #### 2. 配置文件说明 MyCAT分库分表主要依赖于以下几个重要的配置文件: - **schema.xml**: 定义逻辑数据库、逻辑表及其对应的物理节点。 - **rule.xml**: 定义分片规则,指定如何将数据分配到不同分片上。 - **server.xml**: 配置全局参数,如线程池大小、连接超时时间等。 这些文件通常位于 MyCAT 的 `conf` 目录下[^3]。 --- #### 3. 创建逻辑数据库和逻辑表 在 schema.xml 中定义逻辑数据库和逻辑表。例如: ```xml <schema name="testDB" checkSQLSchema="false" sqlMaxLimit="100"> <table name="payment_info" dataNode="dn1,dn2" rule="auto-sharding-long"/> </schema> <dataNode name="dn1" dataHost="host1" database="db1"/> <dataNode name="dn2" dataHost="host1" database="db2"/> <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="localhost" url="jdbc:mysql://192.168.1.1:3306/" user="root" password="password"/> </dataHost> ``` 上述配置表示 `payment_info` 表的数据会根据 `auto-sharding-long` 规则分布到 `db1` 和 `db2` 数据库中[^4]。 --- #### 4. 定义分片规则 分片规则由 rule.xml 文件定义。以下是基于主键范围 (`range-long`) 的分片规则示例: ```xml <tableRule name="auto-sharding-long"> <rule> <columns>id</columns> <algorithm>rang-long</algorithm> </rule> </tableRule> <function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> </function> ``` 其中,`autopartition-long.txt` 文件用于映射具体的分片区间。例如: ``` 0=dn1 1000=dn2 ``` 这表明当 `id` 小于 1000 时,数据会被路由到 `dn1`;大于等于 1000 则被路由到 `dn2`。 --- #### 5. 测试分库分表效果 完成以上配置后,可以通过 MySQL 客户端测试分库分表的效果。例如: ```sql -- 登录 MyCAT mysql -umycat -p123456 -h 192.168.110.145 -P 8066 -- 插入数据 INSERT INTO payment_info(order_id, payment_status) VALUES(1, 1); INSERT INTO payment_info(order_id, payment_status) VALUES(1001, 1); -- 查询数据 SELECT * FROM payment_info; ``` 第一条记录应存放在 `db1`,而第二条记录应存放在 `db2`[^2]。 --- #### 6. 注意事项 - 确保各物理节点之间的网络连通性良好。 - 在设计分片规则时需充分考虑查询场景,避免跨分片的复杂关联操作。 - 如果需要修改现有的分库分表策略,则可能涉及数据迁移工作,建议提前规划并做好备份。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值