-
开发步骤:
-
第一步:准备三台服务器 mycat、 master、 slave
mycat 192.168.68.131 虚拟的数据库 作为代理服务器使用的
master 192.168.68.129 物理数据库1 作为真正存储数据的数据库
slave 192.168.68.130 物理数据库2 作为真正存储数据的数据库
-
在master上面创建一个数据库,作为测试使用 创建数据库 : ZKL_TABLE
-
在master上面新建数据库表 dept和user 在slave上面新建数据库表 dept和student
-
表的功能介绍:dept在这里充当负载均衡,可以操作master和slave两个数据库,user表只让他操作master数据库,student表只让他操作slave数据库
-
让dept这张表实现负载均衡,谁的执行速度快就加载哪个数据库。
-
第二步:配置mycat文件:server.xml schema.xml rule.xml
-
配置server.xml文件
<!--配置连接mycat的信息 user 新增用户配置 user指的是用户配置节点 name ="连接mycat的登录账户" password 连接mycat的登录密码 schema 使用mycat连接的数据库名 此处声明必须使用大写 如果连接的数据库较多,中间用逗号隔开 该数据库名 需要和后面配置的schema.xml文件中的schema配置产生一一映射 (关联)保持一致 参数 privileges readOnly false用户可以对表进行读写操作 true只读模式 user可以配置多个 --> <user name = "root"> <property name = "password">root</property> <property name = "schema" >ZKL_TABLE</property> <property name = "readOnly">false</property> </user>
-
配置 schema.xml文件
<!--配置mycat的物理数据库和逻辑表 <property name = "schema" >ZKL_TABLE</property> name = "ZKL_TABLE" 两者之间保持一致 --> <schema name = "ZKL_TABLE" checkSqlschema="false" sqlMaxLimit = "100"> <table name = "user" dataNode = "dn01" /> <table name = "student" dataNode = "dn02" /> <table name = "dept" dataNode = "dn01,dn02" primaryKey = "d_id" autoIncrement = "true" rule = "mod-log"/> </schema> <!--分库分表配置 分片--> <dataNode name = "dn01" dataHost = "master" dataBase = "ZKL_TABLE"/> <dataNode name = "dn02" dataHost = "slave01" dataBase = "ZKL_TABLE"/> <!--注意事项:尽量schema配置放在一起,dataNode配置放在一起--> <!--配置物理数据库 真实的数据库--> <dataHost name = "master" maxCon = "1000" minCon = "10" balance = "0" writeType = "0" dbType = "mysql" dbDriver = "native"> <!--心跳检查机制--> <heartbeat>select user();</heartbeat> <!--指定到底哪个服务器来处理dataNode请求--> <writeHost host = "master" url = "192.168.68.129:3306" user = "root" password = "MyNewPass4!"> </writeHost> </dataHost> <dataHost name = "slave01" maxCon = "1000" minCon = "10" balance = "0" writeType = "0" dbType = "mysql" dbDriver = "native"> <!--心跳检查机制--> <heartbeat>select user();</heartbeat> <!--指定到底哪个服务器来处理dataNode请求--> <writeHost host = "slave01" url = "192.168.68.130:3306" user = "root" password = "MyNewPass4!"> </writeHost> </dataHost>
参数介绍:
1.schema 数据库的设置,此数据库为逻辑数据库 name值需要和server.xml文件中的schema保持一致 * schema属性介绍 * name 逻辑数据库名 * checkSqlschema 数据库的前缀配置 详情看文档 此处配置false * sqlMaxLimit select查询时默认的limit 避免查询全表 * table属性介绍 * name 表名 * dataNode 表到底存储在哪个节点上 * primaryKey 主键字段名 * autoIncrement 是否自增 * rule 分库分表规则 此处采用mod-log 平均分配 2.dataNode 分库信息,进行分库的相关配置 * 属性介绍 name 节点名 dataHost 物理数据库的域名,与dataHost标签中的name属性保持一致 dataBase 物理数据库的数据库名 3.dataHost 物理数据库的配置 真正存储数据的数据库 * 属性介绍 * name 节点名 与dataNode中的dataHost属性保持一致 * balance 负载均衡方式 balance = "0" 不开启读写分离 balance = "1" 全部的readHost与writeHost都参与select语句的负载均衡 balance = "2" 所有的读操作都随机在readHost和writeHost上分发 balance = "3" 所有的读操作都随机分发到writeHost中的readHost中执行,也就是 wirteHost不参与负载均衡 * writeType 写入的方式 writeType = "0" 所有的读操作发送到配置的第一个writeHost中,如果第一个挂了,立马切换到第二个writeHost中执行 writeType = "1" 没有还没有实现 * dbType 数据库的类型 哪个厂商生成的数据库产品 mysql oracle Sql Server * heartbeat 心跳检测语句 注意在结尾添加分号";"
-
分别在三台服务器中进行域名配置 mycat master slave01
192.168.68.129 192.168.68.130 这两台服务器均有ZKL_TABLE
user表只写入dn01 —>192.168.68.129
student表只写入dn02 —>192.168.68.130
dept表写入到dn01,dn02中 也就是192.168.68.129 和 192.168.68.130
分库分表的规则:mod-long 将数据平均分配
-
配置rule.xml文件
<tableRule name="mod-long"> <rule> <columns>d_id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!-- how many data nodes --> <property name="count">2</property> </function>
-
-
测试
-
启动mycat
切换到bin目录中
cd …/bin
./mycat start
-
查看mycat的启动日志 wrapper.log
-
搭建mycat中的分库分表
最新推荐文章于 2024-05-10 02:51:19 发布