学习要趁早,装逼莫等老。

刚刚开始接触到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练习笔记的更多相关文章

  1. MyCat 学习笔记 第十篇.数据分片 之 ER分片

    1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...

  2. MyCat 学习笔记 第九篇.数据分片 之 数值分布

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考  <MyCat 学习笔记>第六篇. ...

  3. MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在M ...

  4. MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片

    1 应用场景 Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里. 另一个是数据常量形式的 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. MyCat 学习笔记 第六篇.数据分片 之 按月数据分片

    1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...

  9. mycat学习笔记

    MyCAT简易入门_数据库技术_Linux公社-Linux系统门户网站http://www.linuxidc.com/Linux/2016-01/127382.htm mycat读写分离配置 - PE ...

随机推荐

  1. Linux服务器,服务管理--systemctl命令详解,设置开机自启动

    Linux服务器,服务管理--systemctl命令详解,设置开机自启动 syetemclt就是service和chkconfig这两个命令的整合,在CentOS 7就开始被使用了. 摘要: syst ...

  2. 异常:Error resolving template "xxx", template might not exist or might not be accessible...解决办法

    在开发环境下正常,但使用jar运行时,报错Error resolving template template might not exist or might not be accessible,意思 ...

  3. sql server 将两列数据合并到一列 拼接

    create table a( s nvarchar null, ss nvarchar null, f decimal(18,1) null, ff decimal(18,1) null,)INSE ...

  4. laravel框架安装Curl扩展

    然后进入根目录执行命令     composer update 完毕.

  5. 『高性能模型』HetConv: HeterogeneousKernel-BasedConvolutionsforDeepCNNs

    论文地址:HetConv 一.现有网络加速技术 1.卷积加速技术 作者对已有的新型卷积划分如下:标准卷积.Depthwise 卷积.Pointwise 卷积.群卷积(相关介绍见『高性能模型』深度可分离 ...

  6. oracle创建删除表空间

    create [undo|temporary] tablespace orcp datafile|tempfile 'E:\orcle\oracleBaseDir\oradata\orcp\orcp. ...

  7. PAT 1116 Come on! Let's C

    1116 Come on! Let's C (20 分)   "Let's C" is a popular and fun programming contest hosted b ...

  8. 【分享】谈CSS3中display属性的flex布局

    最近在学习微信小程序(重新学习微信小程序),在设计首页布局的时候,新认识了一种布局方式display:flex .guide-top{ height: 36%; display: flex; /*fl ...

  9. IO多路复用版FTP

    需求: 实现文件上传及下载功能 支持多连接并发传文件 使用select or selectors 流程图 import socket import pickle import sys import t ...

  10. mysql查询表字段名称,字段类型

    select column_name,column_comment,data_type from information_schema.columns where table_name='查询表名称' ...