环境

mycat : 192.168.126.128         root    root
mysql1: 192.168.126.129:3306 root lizhenghua
mysql2: 192.168.126.131:3306 root lizhenghua database: zwrdb
table1 : role
table2 : subject_t
table3 : suggest
table4 : cas_user

版本说明

mycat-server-1.6.6.1
mysql-5.7.22

mycat下载链接

mycat部署

1.包的部署

tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local

vim /etc/profile
#mycat
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin source /etc/profile

2.JDK的部署

#*************************************************************************
# > File Name: jdk.sh
# > Author: chenglee
# > Main : chengkenlee@sina.com
# > Blog : http://www.cnblogs.com/chenglee/
# > Created Time : 2019年03月07日 星期四 18时08分59秒
#*************************************************************************
#!/bin/bash
jdk_path="/usr/local"
jdk_targ=`basename *jdk-*` function Cheng_flash(){
i=0;
str=""
arr=("|" "/" "-" "\\")
while [ $i -le 100 ]
do
let index=i%4
let indexcolor=i%8
let color=30+indexcolor
printf "\e[0;$color;1m[%-100s][%d%%]%c\r" "$str" "$i" "${arr[$index]}"
sleep ${sleeptime2}
let i++
str+='='
done
printf "\n"
}
function Time_test(){
echo "please wait a moment ... "
starttime=`date +'%Y-%m-%d %H:%M:%S'`
tar tvvf ${jdk_targ} > /dev/null
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
sleeptime=$((end_seconds-start_seconds))
sleeptime2=`awk 'BEGIN{printf "%0.2f",'${sleeptime}'/100}'`
}
function tar_gz(){
Time_test
tar xvvf ${jdk_targ} -C ${jdk_path} > /dev/null | Cheng_flash
}
function profile(){
jdk_Path=`find ${jdk_path} -maxdepth 1 | grep jdk`
(
cat <<EOF
#java jdk
export JAVA_HOME=${jdk_Path}
export JRE_HOME=\${JAVA_HOME}/jre
export CLASSPATH=.:\${JAVA_HOME}/lib:\${JRE_HOME}/lib
export PATH=\${JAVA_HOME}/bin:\$PATH
EOF
) >> /etc/profile
}
function Source(){
source /etc/profile
} function main(){
tar_gz
profile
Source
}
main

注: 把此脚本扔在与JDK二进制包同一目录, 运行此脚本即可,这是我常用的shell

mysql方面

注:忽略mysql的部署步骤, 直接跳到启动mysql.

[root@localhost mysql]# ifconfig | grep inet | grep -v inet6 | head -n 1 | awk -F ' ' '{print$2}' ; ps aux | grep mysql
192.168.126.129
root 7139 0.0 0.1 113520 1752 pts/0 S 09:50 0:00 /bin/sh ./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
mysql 7307 0.1 14.6 1141352 194172 pts/0 Sl 09:50 0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/mysql.logs --pid-file=/usr/local/mysql/mysql.pid --socket=/data/mysql/mysql.sock [root@localhostmysql]# ifconfig | grep inet | grep -v inet6 | head -n 1 | awk -F ' ' '{print$2}' ; ps aux | grep mysql
192.168.126.131
root 7367 0.0 0.1 113312 1628 pts/0 S 09:50 0:00 /bin/sh ./bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
mysql 7531 0.0 13.5 1141332 192852 pts/0 Sl 09:50 0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/mysql.logs --pid-file=/usr/local/mysql/mysql.pid --socket=/data/mysql/mysql.sock

mycat配置

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> <!-- 本配置文件应对双机单库多表**水平分片**-->
<!-- 数据库配置 -->
<schema name="zwrdb" checkSQLschema="false" sqlMaxLimit="100">
<table name="role" dataNode="dn1" />
<table name="subject_t" dataNode="dn1" />
<table name="suggest" dataNode="dn1" />
<table name="cas_user" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2"
rule="mod-long" />
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="test1" database="zwrdb" />
<dataNode name="dn2" dataHost="test2" database="zwrdb" /> <!-- 分表分库 start-->
<!-- 物理数据库配置 test1模块-->
<dataHost name="test1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user();</heartbeat>
<writeHost host="hostM1" url="192.168.126.129:3306" user="root"
password="lizhenghua">
</writeHost>
</dataHost>
<!-- 物理数据库配置 test2模块-->
<dataHost name="test2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user();</heartbeat>
<writeHost host="hostS1" url="192.168.126.131:3306" user="root"
password="lizhenghua">
</writeHost>
</dataHost>
<!-- 分表分库 end-->
</mycat:schema>

注:

数据库模块配置说明: 库设置为zwrdb, 在这个库里面的表就是前面三个表都写入了dn1这块片节点, 而cas_user分到了dn1和dn2两个片节点, 分片规则是mod-long

分片配置说明:就是dn1和dn2, 它们分别指定的各自的dataHost与共同的database

物理数据库配置说明:根据两个不通的dataHost指定两台mysql的登录方式

rule.xml

注:修改有关mod-long分片规则属性, 它默认是3块分片, 而我这里只设置了2个dataNode

<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="root" defaultAccount="true">
<property name="password">root</property>
<property name="schemas">zwrdb</property>
<property name="readOnly">false</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>

注:这里我把mycat的连接账号和密码都是root

启动

mycat start

日志

wrapper.log

STATUS | wrapper  | 2019/04/04 09:56:49 | --> Wrapper Started as Daemon
STATUS | wrapper | 2019/04/04 09:56:49 | Launching a JVM...
INFO | jvm 1 | 2019/04/04 09:56:50 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
INFO | jvm 1 | 2019/04/04 09:56:52 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2019/04/04 09:56:52 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2019/04/04 09:56:52 |
INFO | jvm 1 | 2019/04/04 09:56:55 | MyCAT Server startup successfully. see logs in logs/mycat.log

启动成功,分片分表日志写进mycat.log

端口说明

[root@localhost logs]# netstat -tlnp | grep java
tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 7466/java
tcp6 0 0 :::9066 :::* LISTEN 7466/java
tcp6 0 0 :::37972 :::* LISTEN 7466/java
tcp6 0 0 :::1984 :::* LISTEN 7466/java
tcp6 0 0 :::8066 :::* LISTEN 7466/java
tcp6 0 0 :::46694 :::* LISTEN 7466/java

注:8066为mycat数据连接端口, 9066为mycat管理端口

连接说明

mysql -u root -proot -h 192.168.126.128 -P 8066

展示

mysql> show databases;
+----------+
| DATABASE |
+----------+
| zwrdb |
+----------+
1 row in set (0.00 sec) mysql> use zwrdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+-----------------+
| Tables in zwrdb |
+-----------------+
| role |
| subject_t |
| suggest |
| cas_user |
+-----------------+
4 rows in set (0.01 sec) mysql>

管理命令说明

mysql -u root -proot -h 192.168.126.128 -P 9066

 1.节点查询

mysql> show @@dataNode where schema=zwrdb;
+------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| NAME | DATHOST | INDEX | TYPE | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
+------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| dn1 | test1/zwrdb| 0 | mysql | 0 | 10 | 1000 | 380 | 0 | 0 | 0 | -1 |
| dn2 | test2/zwrdb| 0 | mysql | 0 | 10 | 1000 | 380 | 0 | 0 | 0 | -1 |
+------+-------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
2 rows in set (0.10 sec)

注:DATAHOST:表示对应的datahost属性的值,即数据主机,ACTIVE:表示活跃的连接数量,IDLE:表示空闲的连接数量。SIZE:表示对应的总连接数量

2.心跳

mysql> show @@heartbeat;
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME | TYPE | HOST | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME | STOP |
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 192.168.126.129 | 3306 | 1 | 0 | idle | 30000 | 33,5,5 | 2019-04-04 11:00:35 | false |
| hostS1 | mysql | 192.168.126.131 | 3306 | 1 | 0 | idle | 30000 | 31,4,4 | 2019-04-04 11:00:35 | false |
+--------+-------+-----------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
2 rows in set (0.01 sec)

注:RS_CODE状态如下:
  OK_STATUS=1代表正常状态。
  ERROR_STATUS =-1 代表连接错误
  TIMEOUT_STATUS=-2代表连接超时
  INIT_STATUS=0代表初始化状态
若节点发生故障,则会连续进行默认的5个周期检测,心跳连接失败后就会变成-1,节点故障确认,然后可能发生切换。

3.版本

mysql> show @@version;
+---------------------------------------------+
| VERSION |
+---------------------------------------------+
| 5.6.29-mycat-1.6.6.1-release-20181031195535 |
+---------------------------------------------+
1 row in set (0.01 sec)

4.当前连接状态

mysql> show @@connection;
+------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
| PROCESSOR | ID | HOST | PORT | LOCAL_PORT | USER | SCHEMA | CHARSET | NET_IN | NET_OUT | ALIVE_TIME(S) | RECV_BUFFER | SEND_QUEUE | txlevel | autocommit |
+------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
| Processor0 | 1 | 127.0.0.1 | 9066 | 46274 | root | NULL | utf8:33 | 321 | 2635 | 422 | 4096 | 0 | | |
+------------+------+-----------+------+------------+------+--------+---------+--------+---------+---------------+-------------+------------+---------+------------+
1 row in set (0.00 sec)

5.后端连接状态

mysql> show @@backend;
+------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
| processor | id | mysqlId | host | port | l_port | net_in | net_out | life | closed | borrowed | SEND_QUEUE | schema | charset | txlevel | autocommit |
+------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
| Processor0 | 1 | 2 | 192.168.126.129 | 3306 | 58962 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 2 | 4 | 192.168.126.129 | 3306 | 58968 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 3 | 8 | 192.168.126.129 | 3306 | 58970 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 4 | 5 | 192.168.126.129 | 3306 | 58964 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 5 | 3 | 192.168.126.129 | 3306 | 58966 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 6 | 9 | 192.168.126.129 | 3306 | 58972 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 7 | 6 | 192.168.126.129 | 3306 | 58976 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 8 | 10 | 192.168.126.129 | 3306 | 58980 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 9 | 7 | 192.168.126.129 | 3306 | 58978 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 10 | 11 | 192.168.126.129 | 3306 | 58974 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 11 | 2 | 192.168.126.131 | 3306 | 52040 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 12 | 5 | 192.168.126.131 | 3306 | 52046 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 13 | 9 | 192.168.126.131 | 3306 | 52054 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 14 | 8 | 192.168.126.131 | 3306 | 52052 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 15 | 4 | 192.168.126.131 | 3306 | 52044 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 16 | 10 | 192.168.126.131 | 3306 | 52056 | 3369 | 847 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 17 | 11 | 192.168.126.131 | 3306 | 52048 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 18 | 3 | 192.168.126.131 | 3306 | 52042 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 19 | 6 | 192.168.126.131 | 3306 | 52038 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
| Processor0 | 20 | 7 | 192.168.126.131 | 3306 | 52050 | 3449 | 866 | 4158 | false | false | 0 | zwrdb | latin1:5 | 3 | true |
+------------+------+---------+-----------------+------+--------+--------+---------+------+--------+----------+------------+--------+----------+---------+------------+
20 rows in set (0.00 sec)

6.缓存信息

mysql> show @@cache;
+-------------------------------------+-------+------+--------+------+------+-------------+----------+
| CACHE | MAX | CUR | ACCESS | HIT | PUT | LAST_ACCESS | LAST_PUT |
+-------------------------------------+-------+------+--------+------+------+-------------+----------+
| ER_SQL2PARENTID | 1000 | 0 | 0 | 0 | 0 | 0 | 0 |
| SQLRouteCache | 10000 | 0 | 0 | 0 | 0 | 0 | 0 |
| TableID2DataNodeCache.TESTDB_ORDERS | 50000 | 0 | 0 | 0 | 0 | 0 | 0 |
+-------------------------------------+-------+------+--------+------+------+-------------+----------+
3 rows in set (0.02 sec)

注:SQLRouteCache: SQL语句路由缓存,TableID2DateNodeCache:缓存表主键与分片对应关系,ER_SQL2PARENTID:缓存ER分片中子表与父表对应关系。

7.数据源状态

mysql> show @@datasource;
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
| dn1 | hostM1 | mysql | 192.168.126.129 | 3306 | W | 0 | 10 | 1000 | 443 | 0 | 0 |
| dn2 | hostS1 | mysql | 192.168.126.131 | 3306 | W | 0 | 10 | 1000 | 443 | 0 | 0 |
+----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)

  

mycat 单库多表实现水平分片的更多相关文章

  1. mycat 单库分表

    上次把mycat的读写分离搞定了,这次试下单库分表,顾名思义就是在一个库里把一个表拆分为多个 需要配置的配置文件为 schema.xml 配置内容如下 <!DOCTYPE mycat:schem ...

  2. mycat 单库分表实践

    参考 https://blog.csdn.net/sq2006hjp/article/details/78732227 Mycat采用的水平拆分,不管是分库还是分表,都是水平拆分的.分库是指,把一个大 ...

  3. SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现单库分表【全网最新】

    一.前言 小编最近一直在研究关于分库分表的东西,前几天docker安装了mycat实现了分库分表,但是都在说mycat的bug很多.很多人还是倾向于shardingsphere,其实他是一个全家桶,有 ...

  4. DataStructure-链表实现指数非递减一元多项式的求和

    // 2-链表实现多项式的求和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> #inclu ...

  5. SpringSecurity结合数据库表实现权限认证

    SpringSecurity结合数据表实现权限认证: 下面的案例是在SpringBoot框架实现的: 步骤一:准备数据库表 以下是五张表的脚本 ### 用户表 create table Sys_Use ...

  6. 干货 | RDS For SQL Server单库上云

    数据库作为核心数据的重要存储,很多时候都会面临数据迁移的需求,例如:业务从本地迁移上云.数据中心故障需要切换至灾备中心.混合云或多云部署下的数据同步.流量突增导致数据库性能瓶颈需要拆分-- 本文将会一 ...

  7. hibernate之关于使用连接表实现多对一关联映射

    [Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...

  8. 通过Xtrabackup实现MySQL实例的全库备份与按需单库恢复

    在实际的生产环境中,为了管理方便,我们一般是通过 Xtrabackup实现实例的全库备份,即将实例上的所有数据库备份. 但是,考虑到快速恢复 我们常常面临的需求是快速还原单个数据库.针对初学者来说,网 ...

  9. 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)

    行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...

随机推荐

  1. corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的

    在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题,今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket ...

  2. 微信小程序 组件 Demo

    文字跑马灯效果:       http://www.wxapp-union.com/portal.php?mod=view&aid=1038 触摸水波涟漪效果:   http://www.wx ...

  3. mysql千万级数据量查询出所有重复的记录

    查询重复的字段需要创建索引,多个条件则创建组合索引,各个条件的索引都存在则不必须创建组合索引 有些情况直接使用GROUP BY HAVING则能直接解决:但是有些情况下查询缓慢,则需要使用下面其他的方 ...

  4. easyui技术积累

    1.easyui-textbox与easyui-combobox的onChange事件 //在页面载入后执行下面函数$('#xxx_id').textbox({ onChange: function( ...

  5. ubuntu下安装PyCharm的两种方式

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  6. ldap/sldap

    给新建的账户赋权限也是通过修改配置文件/etc/openldap/slapd.conf来实现,具体的增加的内容如下: 如上面示例中就定义了两个用户,一个是只读用户cn=bbs,dc=361way,dc ...

  7. flutter 学习零碎知识点01

    1.Expanded组件 占满可用空间 -----可以到达类似flex布局中  第一列占用大量空间,所以它必须包装在Expanded widget中. 写死的高度改成Expanded自动撑满屏幕如果还 ...

  8. ESlint

    转自blog: https://blog.csdn.net/dubinglin/article/details/78539223 https://www.jianshu.com/p/bfc7e7329 ...

  9. 短信利用weixin://connectToFreeWifi/?apKey=协议跳转到微信打开落地页h5

    微信门店wifi接口,任意站跳转,跳转二维码长按识别加粉,接口支持动态传参数,支持微信支付等特殊接口对接. 代码如下使用 <head> <meta charset="utf ...

  10. 使用MyEclipse新建maven项目时报An internal error occurred during: "Retrieving archetypes:". GC overhead limit

    前几天在上手maven时,遇到了一个十分头疼的问题,我的myeclipse配置的是自己安装的插件 ,总是报 " An internal error occurred during: &quo ...