mycat 部署测试

今天抽空来整个测试环境,搭建mycat对mysql进行分库分表。做个记录方便以后查看。

环境部署

首先是下载mycat  http://www.mycat.io/  我下的是1.6.6-release

然后java jdk  我下的1.8 

docker 的安装,pull  mysql的镜像 (mysql:last版本是8 也可以pull5.6|5.7)

docker run -p 3307:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

容器启动后 进入容器再次设置root密码(不然连接会报错 2059 -authentication plugin 'caching_sha2_password'……)

docker exec -it mysql bash

mysql -uroot -p123456

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

我又找2台linux 重复mysql 容器创建步骤

192.168.1.19 是master 运行mycat 也是分库hostM1

192.168.1.242 192.168.1.243 是分库物理host

将 mycat 传到master的linux上去 解压

tar -zxvf xxxx.tar

mv /usr/local/Mycat

将jdk 解压

mv /usr/local/java
vi /etc/profile

添加以下环境变量

export MYCAT_HOME=/usr/local/Mycat
export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

立即生效

source /etc/profile

然后就是mycat 的3个配置文件了

1 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="defaultSqlParser">druidparser</property> 
                <property name="mutiNodeLimitType">1</property> 
                <property name="serverPort">8066</property> 
                <property name="managerPort">9066</property>  
        </system> 
        <!-- 任意设置登陆 mycat 的用户名,密码,数据库  --> 
		<user name="root" defaultAccount="true">
                <property name="password">123456</property> 
                <property name="schemas">TESTDB</property> 
        </user>  
</mycat:server> 

2 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"> 
        <property name="count">3</property>
    </function>

</mycat:rule>

3 schema.xml (这里是3台物理机)

<?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="user" primaryKey="id"  dataNode="dn1,dn2,dn3" rule="role1" />
        <table name="product" primaryKey="id" dataNode="dn1,dn2,dn3" rule="role1" />    
 
    </schema> 
 
    <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost --> 
    <dataNode name="dn1" dataHost="dataHost1" database="db1" /> 
    <dataNode name="dn2" dataHost="dataHost2" database="db2" /> 
    <dataNode name="dn3" dataHost="dataHost3" database="db3" /> 
 
    <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 --> 
    <dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> 
            <heartbeat>select user();</heartbeat>  
			<writeHost host="hostM1" url="192.168.1.19:3307" user="root" password="123456"> 
			<readHost host="hostS1" url="192.168.1.19:3308" user="root" password="123456" />
			</writeHost> 
    </dataHost> 
	 <dataHost name="dataHost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> 
            <heartbeat>select user();</heartbeat> 
            <writeHost host="hostM2" url="192.168.1.242:3307" user="root" password="123456"/> 
    </dataHost> 
	 <dataHost name="dataHost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native"> 
            <heartbeat>select user();</heartbeat> 
            <writeHost host="hostM3" url="192.168.1.243:3307" user="root" password="123456"/> 
    </dataHost> 
</mycat:schema>

然后3个xml放到/usr/local/Mycat/conf 下

启动mycat

cd /usr/local/Mycat
./mycat console
#也可以
./mycat start
tail -f -n 10  /usr/local/Mycat/logs/mycat.log

出现 MyCAT Server startup successfully. see logs in logs/mycat.log 则开启成功了!

这里踩过个坑!开启mycat ,报如下错误 (原因是其他host没有建数据库db2 db3)

0cdab3207e8b140f5cc757a7ac5aeb908bd.jpg

成功之后 用Navicat 连接 192.168.1.19:8066  root 123456

5f2d90e5694d2f94cfa7720fc75320ab10d.jpg

然后创建表

CREATE TABLE `user` (  
  `ID` int(11) NOT NULL,  
  `NAME` varchar(100) default NULL,  
  `SEX` int(11) NOT NULL,  
  PRIMARY KEY  (`ID`)  
)  


插入数据看看

-- 这个会报错 1064 - partition table, insert must provide ColumnList
INSERT INTO `user` VALUES ('1', 'mycat', '1');  
INSERT INTO `ussr` VALUES ('2', 'mydog', '2');  

-- 解决方法
insert into user(id,name,sex) values(1,'a1',2);
insert into user(id,name,sex) values(2,'a2',1);
insert into user(id,name,sex) values(3,'a3',1);
insert into user(id,name,sex) values(4,'a4',2);
insert into user(id,name,sex) values(5,'a5',1);
insert into user(id,name,sex) values(6,'a6',1);

再去3个库看看数据分布情况  

06caa96140be0640c68e1c8b096b3789fde.jpgb6ee7099cdb2c3e2db430a1a3405013e09a.jpge2af5fd764876a0a0ffbc62c936b97fb03f.jpg

以上简单的mycat搭建配置就成功了 这只是最简单的测试,离上线产品还老远了!

后续再研究下 主从复制 读写分离 和 其他的分表规则,之后再结合程序实现全局唯一ID生成 实现高可用等等……

转载于:https://my.oschina.net/pentakill/blog/3000261

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值