安装JDK
yum -y install java-1.8*
java
https://github.com/MyCATApache/Mycat-download 具体下载哪一个版本以发布为准,个人是1.4.node
下载的文件直接解压便可。mysql
个人服务器是 rehat 6.5linux
//解压git
tar -xvf Mycat-server-1.4-release-20151019230038-linux.tar.gzgithub
cd /usr/mycat/binsql
./mycat start 启动数据库
./mycat stop 中止vim
./mycat console 前台运行服务器
./mycat install 添加到系统自动启动(暂未实现)
./mycat remove 取消随系统自动启动(暂未实现)
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态
直接运行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与测试mysql彻底一致,mysql怎么链接,mycat就怎么链接。
推荐先采用命令行测试:
mysql -uroot -proot -P8066 -h127.0.0.1
若是采用工具链接,1.4,1.3目前部分工具没法链接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具链接。
=================================================================================
=========================配置============================
找到这一段 </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的配置文件中的库名统一便可
<?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!!!!!!!!!!!!!!!!!!!!!!