Mycat
下载安装
[root@dlb local]# tar -zxvf Mycat-server-1.6.7.6-release-20210930213049-linux.tar.gz -C /usr/local/ #解压到这个目录下 #加压既安装
配置文件
①schema.xml:定义逻辑库,表、分片三个节点等内容
<!-- 读写分离分库分表都在这里配置 --> <!-- 检查SQL,设置为false ,有可能是很多种类的数据表,不仅仅是mysql--> <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" randomDataNode="dn1"> <!-- auto sharding by id (long) --> <!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置--> <!--fetchStoreNodeByJdbc 启用ER表使用JDBC方式获取DataNode dataNode:拆分后的切片 和中间的dataNode标签名保持一致 rule: 拆分规则,可以自定义 --> <table name="customer" primaryKey="id" dataNode="dn1,dn2" rule="test-rule" autoIncrement="true" fetchStoreNodeByJdbc="true"> <childTable name="customer_addr" primaryKey="id" joinKey="customer_id" parentKey="id"> </childTable> </table> <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate" /> --> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> --> <!-- name:和table标签的dataNode保持一致 dataHost:读写分离的主机地址,此参数向下面的datahost标签传入 database: --> <dataNode name="dn1" dataHost="localhost1" database="msa" /> <dataNode name="dn2" dataHost="localhost1" database="msb" /> <!-- balance:读请求的负载均衡 0:不开启读写分离,所有的读操作 都发送到writehost中 1:全部的readhost 和stand by writehost都参与读操作的负载均衡 在多写多读下,除了激活状态下的写,其他节点统一按照读节点用 2:读请求,随机给读写节点,一般不用 3:读请求随机发给写主机中的读机,写机不参与读请求-——推荐 writeType:写请求的负载均衡 0:写请求先发给schema.xml的第一个writeHost标签配置的,第一个挂了发给第二个,一次向下,切换的日志会记录conf/dnindex.properties-——【推荐0】 1:写请求随机发送到所有的写机中 switchType:书否允许读操作,在读机和写机上自动切换,解决延迟问题【当从写机中出现卡住(网路等问题)自动从写中读数据】 -1:不允许 1:默认允许 2:根据“主从同步的状态”自动选择是否切换。心跳(延迟,心跳要发送延迟信息)【推荐】 --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="2" slaveThreshold="100"> <!-- 用来确认大哥和小弟是否都存活 此时改为了发送延迟信息。--> <heartbeat>select slave status</heartbeat> <!-- can have multi write hosts --> <!-- 主机为写,从机为读 --> <writeHost host="master1" url="jdbc:mysql://47.101.165.96:3306" user="admin" password="Amanda+3213"> <readHost host="slave1" url="jdbc:mysql://47.97.32.153:3306" user="admin" password="Amanda+3213"/> </writeHost> <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost>
②rule.xml:定义分片规则
<!-- 平均拆分 name和schema里设置的一致,可自定义 --> <tableRule name="test-rule"> <rule> <columns>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>
③server.xml:定义用户以及系统相关变量,如端口等
<!-- 登录mycat的账号和密码 --> <user name="mycat1" defaultAccount="true"> <property name="password">123456</property> <!-- 逻辑库,中间可以用,逗号隔开表示多个逻辑库 --> <property name="schemas">mycatdb</property> <property name="defaultSchema">TESTDB</property> <!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 --> <!-- 表级 DML 权限设置 --> <!-- 这个地方是设置表权限的的 0代表关闭,1代表可以操作,分别是增删改查 --> <!-- <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> --> </user> <!--下面可以不配--> <user name="user"> <property name="password">user</property> <property name="schemas">mycatdb</property> <property name="readOnly">true</property> <property name="defaultSchema">mycatdb</property> </user>
#下面命令必须切换到mycat的bin目录下执行 默认端口号 8066 ./mycat start #启动 ./mycat stop #停止 ./mycat status #查看状态 ./mysql-umycat -p - ./mysql -uroot -p123456 -P8066