主从复制参考上一个博客:https://blog.csdn.net/qq_41929605/article/details/94767746
在docker hub上拉取 longhronshens/mycat-docker 镜像
docker pull longhronshens/mycat-docker
docker image ls 查看拉取的镜像
docker tag longhronshens/mycat-docker:latest mycat 修改longhronshens/mycat-docker:latest标签为mycat
创建mycat的三个配置文件
rule.xml server.xml schema.xml
文件内容如下:
rule.xml |
---|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="role1">
<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>
</mycat:rule>
server.xml |
---|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">1m</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">true</property>
</system>
<!-- 这部分是我们通过客户端连接需要设置的帐号密码 -->
<user name="root">
<property name="password">root</property>
<property name="schemas">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
schema.xml |
---|
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 设置表的存储方式.schema name="TESTDB" 与 server.xml中的 TESTDB 设置一致 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="users" primaryKey="id" dataNode="node_db01" />
<table name="item" primaryKey="id" dataNode="node_db02,node_db03" rule="role1" />
</schema>
<!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->
<dataNode name="node_db01" dataHost="dataHost01" database="db1" />
<dataNode name="node_db02" dataHost="dataHost01" database="db2" />
<dataNode name="node_db03" dataHost="dataHost01" database="db3" />
<!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->
<dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="mysql_master" url="192.168.43.22:3306" user="root" password="root">
<readHost host="mysql_slave" url="192.168.43.22:3307" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
---------------------------------- |
---|
创建mycat容器使用-v把上面的三个配置文件映射到mycat的配置文件里
docker run --name mycat -v /home/vagrant/schema.xml:/usr/local/mycat/conf/schema.xml -v /home/vagrant/rule.xml:/usr/local/mycat/conf/rule.xml -v /home/vagrant/server.xml:/usr/local/mycat/conf/server.xml --privileged=true -p 8066:8066 -p 9066:9066 -e MYSQL_ROOT_PASSWORD=‘root’ -d mycat
远程连接:
查看一下逻辑库:
进入主节点容器登入mycat
-u:用户名
-p:密码
-P:端口(mycat服务默认的数据端口是8066,而9066端口则是mycat管理端口,用于管理mycat的整个集群状态。监听的端口可以在server.xml配置文件中修改)
-h:ip地址例
之前在server.xml配置文件里创建的一个名叫TESTDB的逻辑库
在schema.xml里配置两张表 users(用来测试读写分离),item(用来分库分表测试)
在主里面创建三个数据库(要和配置文件里面的库名和表名一致)
db1(测试读写分离)
db2(分库分表)
db3(分库分表)
看一下从服务已经同步
首先我们来测试读写分离:(主写,从读)
Test1:
在主里面插入数据,然后在从里面查看
进入主节点里的mysql 使用db1数据库,在users表里面插入一条数据
在主里面插入成功
进入从节点查看
okk!没什么问题!
Test2:在从节点里面插入一条数据在主里面会不会看到(因为从可以插入但只有读的权限所以在主里面不会看到的)
从里插入:
在主里查看:
让我们所料在主里面还是只有七条数据!!!(读写分离测试 OKK!)
分库分表测试:
要保持db2,db3表里面的item和逻辑表的item表结构一致
我们在rule.xml配置文件里我们是根据逻辑库的item的·id列的 基偶数进行分库操作
基数存在db2数据库里
偶数存在db3数据库里
测试完成!!!
okk!