MySQL 部署分布式架构 MyCAT (三)

配置垂直分表

修改 schema.xml (db1)

cd /data/mycat/conf

cp schema.xml schema.xml.rwh

# 修改配置
vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1">
        <table name="user" dataNode="sh1"/>
        <table name="order_t" dataNode="sh2"/>
</schema>
    <dataNode name="sh1" dataHost="oldguo1" database= "taobao" />
    <dataNode name="sh2" dataHost="oldguo2" database= "taobao" />
    <dataHost name="oldguo1" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1">
        <heartbeat>select user()</heartbeat>
    <writeHost host="db1" url="192.168.31.205:3307" user="root" password="123">
            <readHost host="db2" url="192.168.31.205:3309" user="root" password="123" />
    </writeHost>
    <writeHost host="db3" url="192.168.31.206:3307" user="root" password="123">
            <readHost host="db4" url="192.168.31.206:3309" user="root" password="123" />
    </writeHost>
    </dataHost>
    <dataHost name="oldguo2" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1">
        <heartbeat>select user()</heartbeat>
    <writeHost host="db1" url="192.168.31.205:3308" user="root" password="123">
            <readHost host="db2" url="192.168.31.205:3310" user="root" password="123" />
    </writeHost>
    <writeHost host="db3" url="192.168.31.206:3308" user="root" password="123">
            <readHost host="db4" url="192.168.31.206:3310" user="root" password="123" />
    </writeHost>
    </dataHost>
</mycat:schema>

创建测试数据(db1)

mysql -S /data/3307/mysql.sock -e "create database taobao charset utf8;"
mysql -S /data/3308/mysql.sock -e "create database taobao charset utf8;"
mysql -S /data/3307/mysql.sock -e "use taobao;create table user(id int,name varchar(20))";
mysql -S /data/3308/mysql.sock -e "use taobao;create table order_t(id int,name varchar(20))"

启动 mycat, 插入数据(db1)

mycat start

mysql -uroot -p123456 -h 127.0.0.1 -P8066

use TESTDB;
insert user values(1, 'klvchen');
insert order_t values(1, 'lucy');

测试(db1)

mysql -S /data/3307/mysql.sock -e "use taobao;select * from user;"
+------+---------+
| id   | name    |
+------+---------+
|    1 | klvchen |
+------+---------+

mysql -S /data/3308/mysql.sock -e "use taobao;select * from order_t;"
+------+------+
| id   | name |
+------+------+
|    1 | lucy |
+------+------+

mysql -S /data/3307/mysql.sock -e "use taobao;show tables;"
+------------------+
| Tables_in_taobao |
+------------------+
| user             |
+------------------+

mysql -S /data/3308/mysql.sock -e "use taobao;show tables;"
+------------------+
| Tables_in_taobao |
+------------------+
| order_t          |
+------------------+

分片(水平拆分)

范围分片

分片:对一个"bigtable",比如说t3表

(1)行数非常多,800w
(2)访问非常频繁

分片的目的:
(1)将大数据量进行分布存储
(2)提供均衡的访问路由

分片策略:
范围 range  800w  1-400w 400w01-800w
取模 mod    取余数
枚举
哈希 hash
时间 流水

优化关联查询
全局表
ER分片

配置

cd /data/mycat/conf/

cp schema.xml schema.xml.vertical
vi schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="sh1">
        <table name="t3" dataNode="sh1,sh2" rule="auto-sharding-long" />
</schema>
    <dataNode name="sh1" dataHost="oldguo1" database= "taobao" />
    <dataNode name="sh2" dataHost="oldguo2" database= "taobao" />
    <dataHost name="oldguo1" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1">
        <heartbeat>select user()</heartbeat>
    <writeHost host="db1" url="192.168.31.205:3307" user="root" password="123">
            <readHost host="db2" url="192.168.31.205:3309" user="root" password="123" />
    </writeHost>
    <writeHost host="db3" url="192.168.31.206:3307" user="root" password="123">
            <readHost host="db4" url="192.168.31.206:3309" user="root" password="123" />
    </writeHost>
    </dataHost>
    <dataHost name="oldguo2" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1">
        <heartbeat>select user()</heartbeat>
    <writeHost host="db1" url="192.168.31.205:3308" user="root" password="123">
            <readHost host="db2" url="192.168.31.205:3310" user="root" password="123" />
    </writeHost>
    <writeHost host="db3" url="192.168.31.206:3308" user="root" password="123">
            <readHost host="db4" url="192.168.31.206:3310" user="root" password="123" />
    </writeHost>
    </dataHost>
</mycat:schema>

vi rule.xml
        <tableRule name="auto-sharding-long">
                <rule>
                        <columns>id</columns>
                        <algorithm>rang-long</algorithm>
                </rule>
        </tableRule>

# 根据 id 来分片
vi autopartition-long.txt
0-10=0
11-20=1

# 创建测试数据库
mysql -S /data/3307/mysql.sock -e "use taobao;create table t3 (id int not null primary key auto_increment,name varchar(20) not null);"
mysql -S /data/3308/mysql.sock  -e "use taobao;create table t3 (id int not null primary key auto_increment,name varchar(20) not null);"
mycat restart

# 插入数据
use TESTDB;
insert into t3(id,name) values(1,'a');
insert into t3(id,name) values(2,'b');
insert into t3(id,name) values(3,'c');
insert into t3(id,name) values(4,'d');
insert into t3(id,name) values(11,'aa');
insert into t3(id,name) values(12,'bb');
insert into t3(id,name) values(13,'cc');
insert into t3(id,name) values(14,'dd');

检查

mysql -uroot -p123456 -h 127.0.0.1 -P 8066
mysql -S /data/3307/mysql.sock -e "use taobao;select * from t3;"
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
|  4 | d    |
+----+------+

mysql -S /data/3308/mysql.sock -e "use taobao;select * from t3;"
+----+------+
| id | name |
+----+------+
| 11 | aa   |
| 12 | bb   |
| 13 | cc   |
| 14 | dd   |
+----+------+

原文地址:https://www.cnblogs.com/klvchen/p/12031535.html

时间: 2024-10-07 20:30:59

MySQL 部署分布式架构 MyCAT (三)的相关文章

MySQL 部署分布式架构 MyCAT (五)

分片(水平拆分) 4.全局表 业务使用场景: 如果你的业务中有些数据类似于数据字典,比如配置文件的配置, 常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大, 而且大部分的业务场景都会用到,那么这种表适合于Mycat全局表,无须对数据进行切分, 要在所有的分片上保存一份数据即可,Mycat 在Join操作中,业务表与全局表进行Join聚合会优先选择相同分片内的全局表join, 避免跨库Join,在进行数据插入操作时,mycat将把数据分发到全局表对应的所有分片执行,在进行数据读取时候

jeesz分布式架构之 mycat实现mysql读写分离实践

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] mycat是一个的数据库中间件,基于阿里开源的cobar产品而研发,由几个有志之士的牛人共同完成并开源.提供高可用性数据分片集群,自动故障切换,高可用性 ,支持读写分离,支持MySQL双主多从,以及一主多从的模式 ,支持全局表,数据自动分片到多个节点,用于高效表关联查询 ,支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询多平台支持,部署和实施简单. 今天来实践下用mycat实现mysql的读写分离,1.配置mys

【10】MySQL:MyCAT 分布式架构

写在前面的话 在学习的索引的时候,有提到,当数据表数据达到 800W 的时候,索引的性能就开始逐步下降.对于一个公司而言,主要业务数据表达到 1000W 都很容易.同时这张表一般都是业务常用的表,操作还比较频繁.所以为了提升用户体验,需要采用另外的方式对数据库进行优化,那就是分库分表.而 MyCAT 就是能够帮助我们管理分库分表的这样一个中间件. MyCAT 环境基础架构准备 架构图 1: 架构图 2: [1]搭建基础环境: 1. 在 db01:192.168.100.111 上面安装数据库多实

分布式MySQL数据库TDSQL架构分析

摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TDSQL.本文是对该系统架构分析. 腾讯计费平台部托管着公司90%以上的虚拟账户.如QB.Q点.包月服务.游戏的二级账户等,为了保证能顺畅支撑公司各大业务的实时在线交易.而且在各种灾难场景下数据是一致而且可用的,对系统的可用性.一致性切换要求很高,因此计费团队历来都很重视高一致性存储系统的建设. 到眼

MySQL主从多种架构部署及常见错误问题解析

本文的主要内容有mysql复制原理,mysql一主多从.双主架构的示例解读,以及mysql在主从复制架构实践中的常见错误问题和解决方法. 一 mysql复制原理 1 原理解读 mysql的复制(replication)是异步复制,即从一个mysql实列或端口(Master)复制到另一个mysql实列的或端口(slave):复制操作由3个进程完成,其中2个(SQL进程和I/O进程)在Slave上,另一个在Master上:要实现复制,必须打开Master端的二进制日志(log-bin),log-bi

MySQL+Heartbeat+DRBD架构部署

MySQL高可用生成业务需求 在企业实际生产场景中,一主多从的MYSQL数据库架构是最常用的DB架构方案,该架构方案部署简单,维护方便,并且通过配置简单的代理或者通过程序的方式就可以实现应用服务队主从库的读写分离,且多个从库还可以通过LVS或者Haproxy等代理实现多个从库的负载均衡,分担读的压力,同时排除单点问题 但是MYSQL数据库架构中,我们不难发现,虽然从库是多个,但是主库仅有一个,也就是说主库一旦宕机,所以写的业务都会终止,而从库宕机1个就没什么影响,那么如何解决这个主库单点的问题呢

CK21190-Mycat分布式架构之Mycat分布式架构实战解析

CK21190-Mycat分布式架构之Mycat分布式架构实战解析 Mycat是国内第一个卖电子书的开源软件,参与的作者们平生第一次分到了一笔开源收入的酬劳,虽然微不足道,但那一刻,他们都坚信,Mycat会越来越好.如今,Mycat的稳定参与者人数已经超过10人,包括很多美女,而第三代新生志愿者团队也正在形成中.Mycat已经有超过300个生产案例,从政府的项目.电信项目.电商项目.O2O项目.游戏到一些大数据分析的项目,Mycat的生态圈正在加速形成中,使用或者研究过Mycat的知名公司名单越

部署LAMP架构之Mysql安装

部署LAMP架构安装Mysql数据库1.安装环境包2.源码文件解压到/opt/目录下3.安装环境包 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql #指定安装路径 -DDEFAULT_CHARSET=utf8 #指定字符集支持中文 -DDEFAULT_COLLATION=utf8_general_ci #默认字符集 -DEXTRA_CHARSETS=all #指定扩展字符集 -DSYSCONFIDIR=/etc #指定配置文件目录 -DMYSQL_DATADIR=

Docker(三)——应用部署(MySQL部署,Nginx部署,Redis部署)

一.MySQL部署 1.拉取mysql5.7镜像 docker pull mysql:5.7 2.创建容器,启动mysql5.7 (建议别用最新版本的mysql) docker run -id --name=mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 -p  代表端口映射,格式为    宿主机映射端口:容器运行端口 -e  代表添加环境变量  MYSQL_ROOT_PASSWORD 是root用户的登录密码 设置好之后,