mycat 单库多表实现水平分片
环境
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部署
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 单库多表实现水平分片的更多相关文章
- mycat 单库分表
上次把mycat的读写分离搞定了,这次试下单库分表,顾名思义就是在一个库里把一个表拆分为多个 需要配置的配置文件为 schema.xml 配置内容如下 <!DOCTYPE mycat:schem ...
- mycat 单库分表实践
参考 https://blog.csdn.net/sq2006hjp/article/details/78732227 Mycat采用的水平拆分,不管是分库还是分表,都是水平拆分的.分库是指,把一个大 ...
- SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现单库分表【全网最新】
一.前言 小编最近一直在研究关于分库分表的东西,前几天docker安装了mycat实现了分库分表,但是都在说mycat的bug很多.很多人还是倾向于shardingsphere,其实他是一个全家桶,有 ...
- DataStructure-链表实现指数非递减一元多项式的求和
// 2-链表实现多项式的求和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> #inclu ...
- SpringSecurity结合数据库表实现权限认证
SpringSecurity结合数据表实现权限认证: 下面的案例是在SpringBoot框架实现的: 步骤一:准备数据库表 以下是五张表的脚本 ### 用户表 create table Sys_Use ...
- 干货 | RDS For SQL Server单库上云
数据库作为核心数据的重要存储,很多时候都会面临数据迁移的需求,例如:业务从本地迁移上云.数据中心故障需要切换至灾备中心.混合云或多云部署下的数据同步.流量突增导致数据库性能瓶颈需要拆分-- 本文将会一 ...
- hibernate之关于使用连接表实现多对一关联映射
[Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...
- 通过Xtrabackup实现MySQL实例的全库备份与按需单库恢复
在实际的生产环境中,为了管理方便,我们一般是通过 Xtrabackup实现实例的全库备份,即将实例上的所有数据库备份. 但是,考虑到快速恢复 我们常常面临的需求是快速还原单个数据库.针对初学者来说,网 ...
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...
随机推荐
- USACO1.4 1.5 搜索剪枝与数字 洛谷OJ P1214 P1215 P1217 P1218
USACO1.4 题解 Arithmetic Progressions 题意 让你求长为n的由小于2*m*m的双平方数组成的等差数列有几个 双平方数:形如 B=P*P+Q*Q,p,q>0的数 题 ...
- python常用模块——collections
好久没学习了,简单了解下 Ⅰ.namedtuple 1.1 简单回顾一下tuple tuple是一个不可变的可迭代对象 ①可迭代 In [1]: test_tuple = (1,2,3,4,5) In ...
- X86-32位架构的CPU是不是内存只能到4G
不是的,可以通过分页机制扩展实现超过4G内存的支持. 什么是分页机制扩展? PAE. 什么是PAE? PAE如何实现的?
- MarkDown语言
参考: 参考:https://typora.io/ 参考:https://caret.io/ Markdown是一种轻量级标记语言,创始人为約翰·格魯伯(英语:John Gruber). 它允许人们“ ...
- sql进阶
--1.变量的声明和赋值 declare @Start DateTime, @End DateTime set @Start = '1999-9-9' set @End = '2000-1-1' ...
- esp32固件烧录
正常使用IO0置空即可.烧录时需要en引脚接高电平,IO0接地,使用乐鑫的烧录工具烧录即可.注意如果启用wifi,供电一定要不小于500ma,普通的usb转ttl模块无法满足wifi启动的,被坑的好惨 ...
- CSS盒子模型 box-sizing 用法
盒子模型 box-sizing 属性 语法:box-sizing :content-box || border-box || inherit 属性值: content-box 为(w3c标准盒子模型 ...
- 千万不要随意在网上下载ojdbcjar包来使用,ORA-01461错误解决
我在登录项目时,点击某一按钮提示ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值,但是项目在我的同事那里可以完好运行.最后百度 发现问题所在: 数据库与客户端的JDBC驱动不匹配. ...
- 汇编-10.0-CALL和RET指令
call和ret指令都是转移指令,他们都是修改IP,或同时修改CS和IP.它们常被共同用来实现子程序设计. 1.ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移: retf指令 ...
- canvas画圆角矩形的方法
思路:arcTo(x1, y1, x2, y2, r) 参考:https://blog.csdn.net/shi851051279/article/details/80436851 http://ww ...