文档章节

SQL中间件MYCAT 安装->配置

陈映亮
 陈映亮
发布于 2016/07/04 13:32
字数 1849
阅读 276
收藏 1

 

Mycat安装与使用  以下安装信息来自官网 http://www.mycat.org.cn/

 

 

安装JDK

yum -y install java-1.8*
 

下载:

https://github.com/MyCATApache/Mycat-download 具体下载哪个版本以发布为准,我的是1.4.

安装:

下载的文件直接解压即可。

运行:

linux:

我的服务器是 rehat 6.5

//解压

tar -xvf Mycat-server-1.4-release-20151019230038-linux.tar.gz

cd /usr/mycat/bin

./mycat start 启动

./mycat stop 停止

./mycat console 前台运行

./mycat install 添加到系统自动启动(暂未实现)

./mycat remove 取消随系统自动启动(暂未实现)

./mycat restart 重启服务

./mycat pause 暂停

./mycat status 查看启动状态

win:

直接运行startup_nowrap.bat,如果出现闪退,在cmd 命令行运行,查看出错原因。

内存配置:

 

配置文件,修改前先备份

配置文件,修改前先备份

配置文件,修改前先备份

启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如下行的内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据自己的jvm参数调整。

Java Additional Parameters

wrapper.java.additional.1=

wrapper.java.additional.1=-DMYCAT_HOME=.

wrapper.java.additional.2=-server

wrapper.java.additional.3=-XX:MaxPermSize=64M

wrapper.java.additional.4=-XX:+AggressiveOpts

wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m

wrapper.java.additional.6=-Dcom.sun.management.jmxremote

wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984

wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false

wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false

wrapper.java.additional.10=-Xmx100m

wrapper.java.additional.11=-Xms100m

wrapper.java.additional.12=-XX:+UseParNewGC

wrapper.java.additional.13=-XX:+UseConcMarkSweepGC

wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection

wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0

wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70

以下配置作废:

wrapper.java.initmemory=3

wrapper.java.maxmemory=64

Mycat连接测试:

测试mycat与测试mysql完全一致,mysql怎么连接,mycat就怎么连接。

推荐先采用命令行测试:

mysql -uroot -proot -P8066 -h127.0.0.1

如果采用工具连接,1.4,1.3目前部分工具无法连接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具连接。

=================================================================================

=========================配置============================

读写分享配置:

一,先配置server.xml

找到这一段

</system>
        <user name="test">
                <property name="password">test</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>

这里配置了两个可以来连接的用户
用户1  test   密码test   给予了此用户TESTDB数据库的权限
用户2  user   密码user   给予了此用户TESTDB数据库的只读权限
注意这里的testdb 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可

二,接下来配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="travelrecord" dataNode="dn1" rule="auto-sharding-long" />

                <!-- global table is auto cloned to all defined data nodes ,so can join 
                        with any table whose sharding node is in the same data node -->
                <table name="company" primaryKey="ID" type="global" dataNode="dn1" />
                <table name="goods" primaryKey="ID" type="global" dataNode="dn1" />
                <!-- random sharding using mod sharind rule -->
                <table name="hotnews" primaryKey="ID" dataNode="dn1"
                        rule="mod-long" />
                <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global" 
                        needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3" 
                        rule="mod-long" /> -->
                <table name="employee" primaryKey="ID" dataNode="dn1"
                        rule="sharding-by-intfile" />
                <table name="customer" primaryKey="ID" dataNode="dn1"
                        rule="sharding-by-intfile">
                        <childTable name="orders" primaryKey="ID" joinKey="customer_id"
                                parentKey="id">
                                <childTable name="order_items" joinKey="order_id"
                                        parentKey="id" />
                        </childTable>
                        <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
                                parentKey="id" />
                </table>
                <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate" 
                        /> -->
        </schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" 
                /> -->
        <dataNode name="dn1" dataHost="localhost1" database="testdb" />
        <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
         <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" /> 
        <dataNode       name="jdbc_dn2" dataHost="jdbchost" database="db2" /> 
        <dataNode name="jdbc_dn3"       dataHost="jdbchost" database="db3" /> -->
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="172.16.12.167:3306" user="admin"
                        password="admin888">
                        <!-- can have multi read hosts -->

                </writeHost>
                <writeHost host="hostS1" url="172.16.12.169:3306" user="admin"
                        password="admin888" />
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>

</mycat:schema>

(三)配置文件解释

一,  <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

这里testdb就是我们对外声称的我们有数据库的名称  必须和server.xml中的用户指定的数据库名称一致

添加一个dataNode="dn1" 是指定了我们这个库只在dn1上.没有进行分库

 

二, <dataNode name="dn1" dataHost="localhost1" database="db1" />

这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .

根据你自己的数据库名进行修改.

 

三,<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

 

这里只需要配置三个地方    balance="1"与writeType="0" ,switchType=”1”

a. balance 属性负载均衡类型,目前的取值有 4 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
3. balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

b. writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。

c. switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL 主从同步的状态决定是否切换

四,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">

<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />

</writeHost>

这里是配置的我们的两台读写服务器IP地址访问端口和 访问用户的用户名和密码

===============================================================================

命令检测是否成功: mysql -utest -ptest -h172.16.12.54 -P8066

 

===============================================================================

 

排错相关思路:

1,各个版本的配置文件可能会有所不同,请检查版本的XML头等相关的小细节

2,多个table里面的dataNode要与下面的dataNode相参应

3,仔细检查端口

4,检查是否指定<dataNode name="dn1" dataHost="localhost1" database="testdb" />此处的database为实际的MYSQL库

5,网上博客的schema.xml可能只是贴出部分,请仔细和原DEMO进行比对

7,记得给你的防火墙开端口默认的mycat端口是8066,9066是管理端口

 

8,如果你在连接数据库的时候日志文件中一直报错错

错误:

Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

这个时候估计是你的数据库的账号和密码错误了.所以IP被锁

.首先需要去数据库执行flush hosts;命令清除 被锁死的IP

 

9,错误mycat.log中:  Unknown charsetIndex:224

  说明是字符集问题引起的数据库不能连接成功

  #vim index_to_charset.properties

编辑配置文件中  设置224的字符集

比如我的数据库中 224=utf8mb4

设置完成后再重启服务就可以了!

 

 10,host文件未修改报错unknown error!!!!

STATUS | wrapper  | 2015/11/24 16:05:32 | Launching a JVM...
INFO   | jvm 5    | 2015/11/24 16:05:32 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=300M; support was removed in 8.0
ERROR  | wrapper  | 2015/11/24 16:05:37 | JVM exited while loading the application.
INFO   | jvm 5    | 2015/11/24 16:05:37 | Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: DB-01: DB-01: unknown error

修改/etc/hosts就行,network不用动要解析hostM1 和hostS1 这两个到对应的ip!!!!!!!!!!!!!!!!!!!!!!

 

 

© 著作权归作者所有

陈映亮
粉丝 10
博文 130
码字总数 38454
作品 0
深圳
程序员
私信 提问
Mycat - 实现数据库的读写分离与高可用

mysql主从实现 Mycat不负责任何的数据同步问题,mysql的主从复制还得从mysql层面来实现;如果没有实现mysql的主从复制,后文就都成 如果想学习Java工程化、高性能及分布式、深入浅出。微服务...

编程SHA
02/20
114
0
mycat实现mysql分库分表

1. mycat介绍 MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,...

红隐
2018/05/06
0
0
数据库中间件01-认识mycat

简述 Mycat是国产的一套免费开源的分布式数据库中间件。想必做开发或者运维的朋友对中间件这个词应该是比较熟悉了,我们见到过java中间件,消息中间件等等,这里又来了一个数据库中间件。那么...

细节探索者
2018/05/11
66
0
mycat学习02--摸打滚爬之mycat主从复制于读写分离(线上经验)

上一篇文章讲到了mycat的安装和配置,相信验证过的朋友已经知道了,上一篇的做法已经实现了主从复制与读写分离的效果,这里给大家详细说以下读写分离部分: 我的架构还是双主双从架构:(试验...

拎壶冲冲冲
2018/07/09
0
0
JAVAEE——宜立方商城13:Mycat数据库分片、主从复制、读写分离、100%Linux中成功安装Mysql的方法

1 海量数据的存储问题 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个...

kent鹏
2018/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
170
4
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部