一、主从复制搭建(新环境5.6.33)
1、设置复制Master配置信息

[mysqld]
#repl master库
server-id=6
log-bin=E:\MySQL\4306\logbin\mysql-bin
max_binlog_size=100M
binlog-format=MIXED

2、启动Master实例
3、Master实例上创建一个用于复制的帐户

mysql> use `mysql`;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'repl';

4、获取Master状态信息

#在session1锁表
mysql> FLUSH TABLES WITH READ LOCK;
#在session2查看状态
mysql > SHOW MASTER STATUS;

5、在Master上释放读锁

mysql> UNLOCK TABLES;

6、在Slave上编辑配置信息

[mysqld]
#repl slave库
server-id=7
relay_log=E:\MySQL\4307\logbin\mysql-relay-bin

7、启动Slave实例
8、在Slave上设置Master配置

mysql> change master to
master_host='127.0.0.1',
master_port=4306,
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000001',
master_log_pos=331;

二、Mycat搭建
Mycat、Mycat-eye依赖jdk1.7+环境
1、JDK下载安装(jdk-7u80-windows-i586.exe),并配置环境变量

新创建环境变量(变量名+变量值)
JAVA_HOME
D:\Java\jdk1.7.0_80
Classpath
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
MYCAT_HOME
D:\MySQLSoftware\mycat
PATH添加值
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%MYCAT_HOME%\bin

设置环境变量后cmd运行

java -version

2、Mycat解压(Mycat-server-1.6-RELEASE-20161028204710-win.tar.gz),运行startup_nowrap.bat

rem startup_nowrap.bat
REM check JAVA_HOME & java
set "JAVA_CMD=%JAVA_HOME%\bin\java"
if "%JAVA_HOME%" == "" goto noJavaHome
if exist "%JAVA_HOME%\bin\java.exe" goto mainEntry
:noJavaHome
echo ---------------------------------------------------
echo WARN: JAVA_HOME environment variable is not set.
echo ---------------------------------------------------
set "JAVA_CMD=java"
:mainEntry
REM set HOME_DIR
set "CURR_DIR=%cd%"
cd ..
set "MYCAT_HOME=%cd%"
cd %CURR_DIR%
"%JAVA_CMD%" -server -Xms512M -Xmx1024M -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=%MYCAT_HOME% -cp "..\conf;..\lib\*" io.mycat.MycatStartup
pause

如果执行报java命令错误,可修改批处理中的变量为实例对象;内存不充足时可适当调整Xms、Xmx的大小。这种方式一般是在程序运行有问题时选用。
前面已经将Mycat添加到环境变量(不然要切换到对应目录),可以在cmd下直接执行mycat

装载、启动服务

#装载成服务
mycat install
#启动服务
mycat start

首次启动

STATUS | wrapper  | // :: | Starting the Mycat-server service...
STATUS | wrapper | // :: | --> Wrapper Started as Service
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: missing `server' JVM at `D:\Java\jre7\bin\server\jvm.dll'.
INFO | jvm | // :: | Please install or use the JRE or JDK that contains these missing components.
ERROR | wrapper | // :: | JVM exited while loading the application.
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: missing `server' JVM at `D:\Java\jre7\bin\server\jvm.dll'.
INFO | jvm | // :: | Please install or use the JRE or JDK that contains these missing components.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: missing `server' JVM at `D:\Java\jre7\bin\server\jvm.dll'.
INFO | jvm | // :: | Please install or use the JRE or JDK that contains these missing components.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: missing `server' JVM at `D:\Java\jre7\bin\server\jvm.dll'.
INFO | jvm | // :: | Please install or use the JRE or JDK that contains these missing components.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: missing `server' JVM at `D:\Java\jre7\bin\server\jvm.dll'.
INFO | jvm | // :: | Please install or use the JRE or JDK that contains these missing components.
ERROR | wrapper | // :: | JVM exited while loading the application.
FATAL | wrapper | // :: | There were failed launches in a row, each lasting less than seconds. Giving up.
FATAL | wrapper | // :: | There may be a configuration problem: please check the logs.
STATUS | wrapper | // :: | <-- Wrapper Stopped
ERROR | wrapper | // :: | The Mycat-server service was launched, but failed to start.

将mycat\conf\wrapper.conf中的wrapper.java.command=java
修改为wrapper.java.command=D:\Java\jdk1.7.0_80\bin\java.exe
再次启动

STATUS | wrapper  | // :: | Starting the Mycat-server service...
STATUS | wrapper | // :: | --> Wrapper Started as Service
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: Could not create the Java Virtual Machine.
INFO | jvm | // :: | Error: A fatal exception has occurred. Program will exit.
INFO | jvm | // :: | Invalid maximum heap size: -Xmx4G
INFO | jvm | // :: | The specified size exceeds the maximum representable size.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: Could not create the Java Virtual Machine.
INFO | jvm | // :: | Error: A fatal exception has occurred. Program will exit.
INFO | jvm | // :: | Invalid maximum heap size: -Xmx4G
INFO | jvm | // :: | The specified size exceeds the maximum representable size.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: Could not create the Java Virtual Machine.
INFO | jvm | // :: | Error: A fatal exception has occurred. Program will exit.
INFO | jvm | // :: | Invalid maximum heap size: -Xmx4G
INFO | jvm | // :: | The specified size exceeds the maximum representable size.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: Could not create the Java Virtual Machine.
INFO | jvm | // :: | Error: A fatal exception has occurred. Program will exit.
INFO | jvm | // :: | Invalid maximum heap size: -Xmx4G
INFO | jvm | // :: | The specified size exceeds the maximum representable size.
ERROR | wrapper | // :: | JVM exited while loading the application.
STATUS | wrapper | // :: | Launching a JVM...
INFO | jvm | // :: | Error: Could not create the Java Virtual Machine.
INFO | jvm | // :: | Error: A fatal exception has occurred. Program will exit.
INFO | jvm | // :: | Invalid maximum heap size: -Xmx4G
INFO | jvm | // :: | The specified size exceeds the maximum representable size.
ERROR | wrapper | // :: | JVM exited while loading the application.
INFO | wrapper | // :: | Waiting to start...
FATAL | wrapper | // :: | There were failed launches in a row, each lasting less than seconds. Giving up.
FATAL | wrapper | // :: | There may be a configuration problem: please check the logs.
STATUS | wrapper | // :: | <-- Wrapper Stopped
ERROR | wrapper | // :: | The Mycat-server service was launched, but failed to start.

Invalid maximum heap size: -Xmx4G,将-Xmx4G数值适当调低些,再次启动成功。
mycat console界面类似mycat\bin\startup_nowrap.bat,不过后者不会创建JVM。
适当修改schema.xml、server.xml、rule.xml,然后就可以启动Mycat啦。下面的schema.xml(注意server.xml中的</user>栏中的schemas属性要保持一致)是针对MySQL主从复制,开启Mycat的读写分离功能。4306写入,4307读取

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="sakila" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
/> -->
</schema>
<dataNode name="dn1" dataHost="localhost1" database="sakila" />
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:4306" user="root"
password="mysql4306">
<!-- can have multi read hosts -->
<!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />-->
</writeHost>
<writeHost host="hostS1" url="localhost:4307" user="root"
password="mysql4307" />
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>

4306结点宕机后不会切换(switchType="-1")到4307结点,但4307能继续提供读取功能。如果4307结点宕机,读写将全部在4306结点。
下面这个schema.xml使用Mycat进行分片

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<!-- auto sharding by id (long) -->
<table name="travelrecord" dataNode="dn$1-3" 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,dn2,dn3" />
<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<!-- random sharding using mod sharind rule -->
<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
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,dn2"
rule="sharding-by-intfile" />
<table name="customer" primaryKey="ID" dataNode="dn1,dn2"
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>
<schema name="sakila" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn4">
<!-- <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="dn$1-3" dataHost="localhost1" database="mycatdb$1-3" />
<dataNode name="dn4" dataHost="localhost1" database="sakila" />
<!--<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="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:4306" user="root"
password="mysql4306">
<!-- can have multi read hosts -->
<!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />-->
</writeHost>
<writeHost host="hostS1" url="localhost:4307" user="root"
password="mysql4307" />
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
<!--
<dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
<heartbeat> </heartbeat>
<writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng" password="jifeng"></writeHost>
</dataHost> <dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
<writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base" password="123456" > </writeHost> </dataHost> <dataHost name="jdbchost" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost> <dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
<heartbeat> </heartbeat>
<writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng" password="jifeng"></writeHost> </dataHost> --> <!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
</dataHost> -->
</mycat:schema>

三、Mycat-Web
1、Zookeeper配置
Mycat-eye需要Zookeeper作为配置中心
1.1、解压zookeeper-3.4.8.tar.gz
1.2、zookeeper-3.4.8\conf目录下把zoo_sample.cfg修改为zoo.cfg
1.3、启动zookeeper

Windowns版本:zookeeper-3.4.\bin\zkServer.bat

2、Mycat-eye部署
2.1、解压Mycat-web-1.0-SNAPSHOT-20160617163048-win.zip
2.2、先启动Zookeeper
2.3、启动Mycat-eye

Windowns版本:mycat-web\start.bat

2.4、访问Mycat-eye
http://localhost:8082/mycat/
mycat.properties配置:mycat-web\mycat-web\WEB-INF\classes\mycat.properties

Mycat+MySQL 主从复制的更多相关文章

  1. Mycat+Mysql主从复制实现双机热备

    Mycat+Mysql主从复制实现双机热备 一.mysql主从配置原理 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据 ...

  2. Mycat+MySql 主从复制-读写分离 看这一篇就够了

    ​ 通过mycat和mysql的主从复制配合搭建数据库的读写分离,可以实现mysql的高可用性,下面我们来搭建mysql的读写分离. 1.一主一从 1.在node01上修改/etc/my.cnf的文件 ...

  3. 高可用架构篇--MyCat在MySQL主从复制基础上实现读写分离

    实战操作可参考:http://www.roncoo.com/course/view/3117ffd4c74b4a51a998f9276740dcfb 一.环境 操作系统:CentOS-6.6-x86_ ...

  4. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  5. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  6. Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程

    下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...

  7. 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  8. 数据库集群 MySQL主从复制

    MySQL主从复制 本节内容我们联系使用MySQL的主从复制功能配置Master和Slave节点,验证数据MySQL的数据同步功能. 因为要使用多个MySQL数据库,所以不建议在电脑上安装多个MySQ ...

  9. Mysql主从复制_模式之日志点复制

    MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志. 每个从服务器从主服务器接收主服务器已经记 ...

随机推荐

  1. NYOJ 119 士兵杀敌(三)【ST算法】 分类: Brush Mode 2014-11-13 20:56 101人阅读 评论(0) 收藏

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 解题思路: RMQ算法. 不会的可以去看看我总结的RMQ算法. http://blo ...

  2. 1.关于Python的发展历史你知道吗?

    1989,为了度过圣诞假期,Guido开始编写Python语言编译器.Python这个名字来自Guido的喜爱的电视连续剧<蒙蒂蟒蛇的飞行马戏团>.他希望新的语言Python能够满足他在C ...

  3. UMP系统功能 资源隔离

  4. 笔记:使用Python解析JSON

    使用Python解析JSON json是一种轻量级的数据交换格式,易于阅读和编写. json函数具体作用描述 函数 具体描述作用 json.dumps 将python对象编码为JSON字符串 json ...

  5. CodeForces 258D Little Elephant and Broken Sorting(期望)

    CF258D Little Elephant and Broken Sorting 题意 题意翻译 有一个\(1\sim n\)的排列,会进行\(m\)次操作,操作为交换\(a,b\).每次操作都有\ ...

  6. 【珍惜时间】iReport

    项目很点意思,感觉很高超的样子 先放下项目的github地址:https://github.com/tctangyanan/iReport 感谢各位伟大的程序员无私的分享自己的技术 老规矩,我们会运行 ...

  7. JavaScript数组的2种定义方式

    JavaScript中没有数组类型,JavaScript中数组是以内置对象的形式存在的. 数组是存储多个值的集合(仓库). JS中定义数组的2种方式: 1.使用new Array()构造函数定义数组 ...

  8. [symonfy] An error occurred when executing the "'cache:clear --no-warmup'"

    Symfony Version: 3.4.* 当运行 composer update 会出现 [RuntimeException] An error occurred when executing t ...

  9. thinkphp Mongo模型

    Mongo模型是专门为Mongo数据库驱动而支持的Model扩展,如果需要操作Mongo数据库的话,自定义的模型类必须继承Think\Model\MongoModel. Mongo模型为操作Mongo ...

  10. Python操作MySQL以及数据库索引

    目录 python操作MySQL 安装 使用 SQL注入问题 MySQL的索引 为什么使用索引 索引的种类 主键索引 唯一索引 普通索引 索引优缺点 不会命中索引的情况 explain 索引覆盖 My ...