mycat练习笔记
学习要趁早,装逼莫等老。
刚刚开始接触到mycat, 当然要学习一下了。拿它来设置 mysql 的读写分离,分库分表,以及集群等。
官网: http://www.mycat.io/ 有详情介绍,有Github, 有权威指南pdf
我用的 release 1.6.7.1 下载:http://dl.mycat.io/
我的练习环境: 3台 centos, 1个6.5, 1个6.10, 1个7.5 ( 其实都差不多,没有影响。)
# hosts
192.168.112.5 node-5 # mysql-5.7.23 master
192.168.112.9 hadoopalone # mycat-1.6.7.1
192.168.112.7 cent7 # mysql-5.7.25 slave
安装2台mysql 5.7 参照: https://www.cnblogs.com/frx9527/p/mysql57.html
安装 mycat
下载JDK,解压,设置JAVA_HOME环境变量,并测试java -version 成功
开始 Mycat
cd /opt
wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
tar zxf Mycat-server-1.6.7.1-release--linux.tar.gz vim /etc/profile
# 添加一个变量MYCAT_HOME
export MYCAT_HOME=/opt/mycat
export PATH=$MYCAT_HOME/bin:$PATH
添加用户,用于独立运行mycat
useradd mycat
passwd mycat
chown mycat:mycat /opt/mycat
读写分离
先来个简单的, 读写分离,需要先开启mysql本身的binlog主从复制,库是 koa_demo , 参照:https://www.cnblogs.com/frx9527/p/bin-log.html
配置mycat/conf/ 下的 schema.xml 和 server.xml 注意保存为UTF8格式。详细教程可参考官网的Mycat权威指南
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 读写分离 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" ><!--没有逻辑表--></schema>
<dataNode name="dn1" dataHost="node1" database="koa_demo" /> <!-- koa_demo 真实数据库 --> <!-- balance=1 在一主多从时有用,一主一从则无法体现 -->
<dataHost name="node1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="node-5" url="node-5:3306" user="root" password="123456">
<readHost host="cent7" url="cent7:3306" user="root" password="123456" />
</writeHost>
<writeHost host="cent7" url="cent7:3306" user="root" password="123456" />
</dataHost> </mycat:schema>
上面的wirteHost是写主机,readHost是读主机,switchType 为1 时,上个wirteHost不能访问则自动切换到下个writeHost,-1不切换。
假设上面的node-5 (master)当机,那么mycat 还是可以读到readHost即 cent7的数据。但是不能写入。而如果允许切换,则cent7可读可写,因为此时cent7成了writeHost
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
<property name="useHandshakeV10">1</property>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
<property name="processorBufferPoolType">0</property>
<!-- 也可将端口改为3306,但要注意端口冲突 -->
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
<property name="idleTimeout">300000</property>
<property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property>
<property name="processors">32</property>
<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">64k</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">384m</property> <!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">false</property>
<property name="strictTxIsolation">false</property>
<property name="useZKSwitch">true</property>
</system> <!-- mycat 用户/密码/逻辑库,不是真实的数据库 -->
<user name="admin" defaultAccount="true">
<property name="password">admin</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>
重启 mycat stop; mycat start
可以用 netstat -nltp 命令检查是否开启了server中设置的 8066端口. 如果成功,可以用Navicat等客户端连接mycat测试。
也可以配置 mycat/conf/log4j2.xml文件,将 <loggers>中 <asyncRoot level="debug" includeLocation="true"> 改到debug级别,
则可以在日志mycat.log中看到更详细的记录。如insert语句将进入 writeHost, select语句将执行在 readHost.等。
日志级别: all < trace < debug < info < warn < error < fatal < off 越往右级别越高,记录的信息越少。更改级别后需要重启mycat服务.
也可以使用 python 测试脚本, 前提是需要先安装好 MySQLdb 组件
运行如果出错:找不到 lib64/libmysqlclient_r.so.16的话,则 ln -s /usr/lib64/mysql/libmysqlclient_r.so.16 /usr/lib64/libmysqlclient_r.so.16
可能需要的文件:lib64/libmysqlclient_r.so.16 点此下载
#! /usr/bin/env python
#encoding=utf-8 import MySQLdb as ms, random try:
conn = ms.connect(host='192.168.112.9',port=8066,user='admin',passwd='admin',db='TESTDB',charset='utf8')
cursor = conn.cursor()
except ms.Error, e:
print ("Error1 %d: %s \n" %(e.args[0],e.args[1])) try:
for i in range(20,30):
insql='''
insert into test(id, expires, data) values('%s', '%s', '%s')
''' % (i, random.randint(10, 99), random.randint(100, 999))
print(insql)
cursor.execute(insql)
cursor.execute('commit') for i in range(11,20):
sqlstr='''
select * from test where id = %s; ''' %(i)
cursor.execute(sqlstr)
res = cursor.fetchall()
print(res) except ms.Error, e:
print ("Error2 %d: %s \n" %(e.args[0],e.args[1]))
finally:
cursor.close()
conn.close()
管理 mycat
---- 使用server.xml中配置的用户名密码端口连接mycat---- mysql -uadmin -padmin -h127.0.0.1 -P9066 show @@help; -- 帮助
reload @@config; -- 重载配置
show @@datanode; -- 查看节点
show @@datasource; -- 查看真实数据源
show @@backend; -- 查看连接情况
有一个文章是不同的声音。看了觉得有道理。
MyCat从入门到放弃,文中列举了几种具体应用时的缺点。 https://blog.csdn.net/u013898617/article/details/80402956 https://blog.csdn.net/u013235478/article/details/53178657
mycat练习笔记的更多相关文章
- MyCat 学习笔记 第十篇.数据分片 之 ER分片
1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...
- MyCat 学习笔记 第九篇.数据分片 之 数值分布
1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考 <MyCat 学习笔记>第六篇. ...
- MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片
1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在M ...
- MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片
1 应用场景 Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里. 另一个是数据常量形式的 ...
- MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程
1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150: 330 ...
- MyCat 学习笔记 第十二篇.数据分片 之 分片事务处理
1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150: 330 ...
- MyCat 学习笔记 第十一篇.数据分片 之 分片数据查询 ( select * from table_name limit 100000,100 )
1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150: 330 ...
- MyCat 学习笔记 第六篇.数据分片 之 按月数据分片
1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...
- mycat学习笔记
MyCAT简易入门_数据库技术_Linux公社-Linux系统门户网站http://www.linuxidc.com/Linux/2016-01/127382.htm mycat读写分离配置 - PE ...
随机推荐
- 射频(SX1278)
射频是什么? 官方说法:RF,Radio Frequency. (不懂的人,看了还是不懂,不过对于物联网行业的开发工程师.产品经理和项目经理,还是有需要对射频有个基础了解的.) 燚智能解读: 两个人, ...
- 开发者的自测利器-Hprof命令(寻找cpu热点)
测试代码: public class HProfTest { public void slowMethod() { try { Thread.sleep(1000); } catch (Excepti ...
- echarts常用方法,饼图切换圆环中文字(三)
在echarts的饼图应用时,遇到过一个需求就是鼠标移到半环上可以切换环中的文字,同时支持legend点击事件.误区是,鼠标移动到环上重新渲染option,以切换内部的文字.重新渲染option的做法 ...
- 【数论】卢卡斯定理模板 洛谷P3807
[数论]卢卡斯定理模板 洛谷P3807 >>>>题目 [题目] https://www.luogu.org/problemnew/show/P3807 [输入格式] 第一行一个 ...
- matlab 三维激光雷达点云的地面与障碍物检测
基于激光雷达的地面与障碍物检测 这个例子告诉我们如何去检测地平面并且找到三维LIDAR数据中与车相近的障碍物. 这个过程能够方便我们对汽车导航的可行驶区域规划. 注:每一帧的雷达属于都被存储为三维的雷 ...
- Mac OS X 绑定80端口,不装nginx的小技巧
Mac OS X 因为要绑定80端口需要ROOT权限, 但是如果用root权限启动eclipse或tomcat又会造成, 启动创建的各类文件是root的,普通用户无法删除. 为此, 我们可以通过pfc ...
- zzw原创_ipv6下环境配置防火墙及FTP处理一例
缘由:公司这段时间要将原IPV4地址切换到IPV6,在环境配置的过程中,碰到一坑,平时不太注意的问题,在IPV6下却放大了 实现目标:在IPV6下,机器A可以FTP到机器B,可以传输.下载文件 A机器 ...
- 深度学习硬件:CPU、GPU、FPGA、ASIC
人工智能包括三个要素:算法,计算和数据.人工智能算法目前最主流的是深度学习.计算所对应的硬件平台有:CPU.GPU.FPGA.ASIC.由于移动互联网的到来,用户每天产生大量的数据被入口应用收集:搜索 ...
- Java多线程之synchronized及其优化
Synchronized和同步阻塞synchronized是jvm提供的同步和锁机制,与之对应的是jdk层面的J.U.C提供的基于AbstractQueuedSynchronizer的并发组件.syn ...
- elixir东游记:实现一个简单的中文语句解析
备份:https://zhuanlan.zhihu.com/p/46030123 代码地址:github:pyzh/gdpl-ex.poc-1 原语句是:List1为'12332234':记a为Lis ...