四、安装mycat 1、jdk环境主从数据库
https://blog.csdn.net/qq_50743124/article/details/124074378?spm=1001.2014.3001.5501
#查看安装的jdk版本 -如果有环境可以不用下载
java -version
# 执行以下命令查看可安装的jdk版本:
yum -y list java*
2、安装mycat
# 查询mycat镜像列表,选择星数高
docker search mycat
# 拉取mycat镜像
docker pull longhronshens/mycat-docker
# 查看版本信息
docker image inspect longhronshens/mycat-docker:latest|grep -i version
五、mycat读写分离
1、为什么要读写分离
读写分离之后可以降低计算机的压力
2、读写分离的原理读写分离,简单地说是把对数据库的读和写 *** 作分开,以对应不同的数据库服务器。主数据库提供写 *** 作,从数据库提供读 *** 作,
这样能有效地减轻单台数据库的压力。
通过Mycat即可轻易实现上述功能,不仅可以支持MysoL,也可以支持oracle和sql Server。
MyCat控制后台数据库的读写分离和负载均衡由schema . xml文件datahost标签的balance属性控制。
docker run --name Mmycat -v /usr/local/mycat/schema.xml:/usr/local/mycat/conf/schema.xml -v /usr/local/mycat/rule.xml:/usr/local/mycat/conf/rule.xml -v /usr/local/mycat/server.xml:/usr/local/mycat/conf/server.xml --privileged=true -p 8066:8066 -p 9066:9066 -e MYSQL_ROOT_PASSWORD=mysql1234 -d longhronshens/mycat-docker
参数说明:
-v:容器文件挂载到本地文件;目的:本地修改文件容器内绑定的文件一起变 3.1、确认启动 4、mycat配置前提
主库和从库要有schema.xml配的 balance: 负载均衡类型,目前取值有4种: balance="0”:不开启读写分离机制,所有读 *** 作都发送到当前可用的writeHost上。 balance=“1”︰全部的readHost 与 stand by writeHost(备用的writeHost)都参与select语句的负载均衡,简而言之,就是采用双主双从模式(1 -->s1 ,M2 -->S2,正常情况下,M2,51,S2 都参与 select 语句的负载均衡)。 balance=“2”:所有的读写 *** 作都随机在writeHost , readHost上分发。 balance="3”:所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力 ;balance=3只在MyCat1.4 之后生效。 checkSQLschema 默认读者使用finalshell 注意不是这个;是尾部没有init的 找到这个目录 把info修改debug才能出现日志 欢迎分享,转载请注明来源:内存溢出
4.2、schema.xml(重点关注)
DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0property>
<property name="useHandshakeV10">1property>
<property name="useSqlStat">0property>
<property name="useGlobleTableCheck">0property>
<property name="sequnceHandlerType">2property>
<property name="subqueryRelationshipCheck">falseproperty>
<property name="handleDistributedTransactions">0property>
<property name="useOffHeapForMerge">1property>
<property name="memoryPageSize">64kproperty>
<property name="spillsFileBufferSize">1kproperty>
<property name="useStreamOutput">0property>
<property name="systemReserveMemorySize">384mproperty>
<property name="useZKSwitch">falseproperty>
<property name="strictTxIsolation">falseproperty>
<property name="useZKSwitch">trueproperty>
system>
<user name="root">
<property name="password">mysql1234property>
<property name="schemas">ITCASTproperty>
user>
<user name="user">
<property name="password">mysql1234property>
<property name="schemas">ITCASTproperty>
<property name="readOnly">trueproperty>
user>
mycat:server>
重要参数说明:
DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100">
<table name="user" dataNode="dn1">table>
schema>
<dataNode name="dn1" dataHost="bmphost" database="bmp"/>
<dataHost name="bmphost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()heartbeat>
<writeHost host="hostM1" url="175.178.183.32:3301" user="root" password="mysql1234">
<readHost host="hostS2" url="175.178.183.32:3302" user="root" password="mysql1234">readHost>
writeHost>
dataHost>
mycat:schema>
当该值设置为true时,如果我们执行语句"select from test01.user ;"语句时,MyCat则会把schema字符去掉,可以避免后端数据库执行时报错;
5、验证准备
5.1、找到容器流水号
DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="userrule">
<rule>
<columns>idcolumns>
<algorithm>func1algorithm>
rule>
tableRule>
<tableRule name="categoryrule">
<rule>
<columns>idcolumns>
<algorithm>jump-consistent-hashalgorithm>
rule>
tableRule>
<function name="murmur" class="io.mycat.route.function.PartitionByMurmurHash">
<property name="seed">0property>
<property name="count">2property>
<property name="virtualBucketTimes">160property>
function>
<function name="crc32slot" class="io.mycat.route.function.PartitionByCRC32PreSlot">
<property name="count">2property>
function>
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txtproperty>
function>
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txtproperty>
function>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">4property>
function>
<function name="func1" class="io.mycat.route.function.PartitionByLong">
<property name="partitionCount">8property>
<property name="partitionLength">128property>
function>
<function name="latestMonth"
class="io.mycat.route.function.LatestMonthPartion">
<property name="splitOneDay">24property>
function>
<function name="partbymonth" class="io.mycat.route.function.PartitionByMonth">
<property name="dateFormat">yyyy-MM-ddproperty>
<property name="sBeginDate">2019-01-01property>
function>
<function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
<property name="mapFile">partition-range-mod.txtproperty>
function>
<function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
<property name="totalBuckets">4property>
function>
mycat:rule>
5.2、进入容器内部文件系统
docker inspect 容器名或者容器ID
5.3、修改mycat容器的log4j2.xml文件
/var/lib/docker/overlay2/41d76209d603e2a5fd37bf0d9804e004f39a4c3f694299e01ba55687ebebc51f/merged/usr/local/mycat/conf
6、验证
6.1、新开一个窗口观察日志
6.1、在mycat的数据库 *** 作观察日志
docker exec -it Mmycat bash
cd /usr/local/mycat/logs
tail -f mycat.log
验证结果
show databases;
use ITCAST;
show tables;
select * from user;
评论列表(0条)