搭建高性能数据库集群之二:MySQL读写分离(基于mycat-1.6.7.1)

一、MyCat概述

Mycat是数据库中间件。

使用场景:

高可用性与Mysql读写分离

  • 业务数据分级存储
  • 大表水平拆分,
  • 集群并行计算
  • 数据库连接池
  • 整合多个数据源整合

安装

下载地址:http://dl.mycat.org.cn

安装Mycat之前,需要安装Mysql、JDK,安装Mycat稳定版是1.6.7.1

下载好的安装包文件 (Mycat-xxx-linux.tar.gz),上传Linux服务器上,一般安装在/usr/local下,进行解压

tar -zxvf Mycat-xxx-linux.tar.gz

安装成功,进入mycat目录,能看到

  • bin:命令文件
  • catlet:空的,扩展
  • conf:配置文件(server.xml,schema.xml,rule.xml等)
  • lib:依赖的jar包

核心概念

分片
我们将存放同一个数据库中数据分散到多个数据库中,达到单台设备负载效果。当数据库量超过800万,需要做分片处理。

数据库切分:

  • 垂直拆分:如果因为表多导致数据多,使用垂直切分,根据业务切分成不同的库;
  • 横向拆分:如果因为单张表的数据量太大,使用水平切分。分库分表的顺序应该是先垂直分,后水平分。

垂直拆分:

  • 垂直分表:大表拆小表,一般是表中的字段较多,将不常用的,数据较大,长度较长字段的拆分到“扩展表。
  • 垂直分库:针对系统中的不同业务进行拆分,比如用户User一个库,商品Producet一个库,订单Order一个库。
    切分后,放在多个服务器上。在高并发场景下,垂直分库一定程度上能够突破IO、连接数及单机硬件资源的瓶颈。

水平拆分:

  • 水平分表:针对数据量大的单张表,按照某种规则(RANGE,HASH取模等),切分到多张表里面去。
    但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。不建议采用。
  • 水平分库分表:将单表的数据切分到多个服务器上,每个服务器具有相应的库与表,只是表中数据集合不同。 切分规则:1.
    从0到10000一个表,10001到20000一个表;2. HASH取模; 3. 地理区域。

逻辑库
Mycat是数据库中间件,可以被看做一个/多个数据库集群构成的逻辑库。然后下面的逻辑表,读写数据的表就是逻辑表。

ER表
表的记录与所有关联的父表记录存放同一个数据分片中,保证数据关联查询不会垮库操作。

全局表
类似于数据字典表,把这些冗余数据定义为全局表。

分片节点
数据切分,一个大表被分到不同的分片数据库上,每个表分片所在数据库就是分片节点。

分片主机
同一机器上存在多个分片数据库,这个分片节点所在的机器是节点主机。

常用命令

#启动、停止、查看状态
bin/mycat start
bin/mycat stop
bin/mycat status

#连接命令:连接端口号:8066
mysql -h (IP地址) -P 8066 -u root -p
连接管理命令:连接端口号:9066
mysql -h (IP地址) -P 9066 -u root -p

相关配置项及含义

配置server.xml
常用系统配置

  • charset 值 utf8 字符集
  • useSqlStat 值 0 1 开启实时统计 0 关闭
  • sqlExecuteTimeout 值 1000 SQL语句超时时间
  • processors 值1,2… 指定线程数量
  • txIsolation 值1,2,3,4 事务的隔离级别
  • serverPort值8066 使用端口号
  • mangerPort 值9066 管理端口号

user 标签定义登录Mycat用户和权限:

<user name="mycat用户名2">
    <property name="password">密码</property>
    <property name="schemas">逻辑库名</property>
    <property name="readOnly">true(是否只读)</property>
    <property name="benchmark">1000(连接数,0代表不限制)</property>
    <property name="usingDecrypt">1(是否加密,1加密)</property>
    <!--权限设置-->
    <privileges check="true">
        <schema name="逻辑库名" dml="0000">
            <table name="逻辑表" dml="0000"></table>
            <table name="逻辑表" dml="0000-代表增改查删的权限,1代表有,0没有"></table>
        </schema>
    </privileges>
</user>
# 注意
# 设置了密码加密,需要在/lib目录下执行
java -cp Mycat-server-xxx.release.jar io.maycatutil.DecryptUtil 0:root:密码
# 然后得到加密的密码,然后在配置文件密码改成加密后的密码

firewall标签定义防火墙:

<firewall>
    <!--白名单-->
    <whitehost>
        <host user="root" host="IP地址"></host>
    </<whitehost>
    <!--黑名单  这个用户有哪些SQl的权限-->
    <blacklist check="true">
        <property name="selelctAllow">true</property>
        <property name="deleteAllow">false</property>
    </<blacklist>
</firewall>

配置schema.xml
配置逻辑库、逻辑表、分片、分片节点。

  • schema 逻辑库,可以有多个
  • table 逻辑表,它属性:rult:分片规则名 type:类型(全局表、普通表)
  • dataNode定义数据节点,不能重复
  • dataHost 具体的数据库实例,节点主机
  • database 定义分片所属的数据库

dataHost 标签节点主机:

  • name 节点名称
  • maxCon 最大连接数
  • minCon 最小连接数
  • balance 负载均衡类型 0,1,2,3
  • writeType写操作分发方式 0:读写操作都是第一台writeHost 1:随机发送writeHost 上
  • switchType 数据库切换测试 -1.1,2,3

writeHost 、readHost标签读写主机:

  • host 实例主机标识
  • url 数据库连接地址
  • weight 权重
  • usingDecrypt 密码加密 0否1是
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="逻辑库名" checkSQLschema="false" sqlMaxLimit="100">
        <!-- name:这张表进行分库,使用数据节点 -->
        <table name="逻辑表" dataNode="数据节点d1,数据节点d2,数据节点d3" rule="分片规则"></table>
    </schema>
    
    <!-- dataNode:数据结点 dataHost:主机名 database:分库的名字的数据库名字 -->
    <dataNode name="数据节点d1" dataHost="host1" database="数据库1" />
    <dataNode name="数据节点d2" dataHost="host2" database="数据库1" />
    <dataNode name="数据节点d3" dataHost="host3" database="数据库1" />
    
    <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"       dbDriver="native" switchType="1" slaveThreshold="100" >
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="地址1:3306" user="root" password="123123"></writeHost>         </dataHost>
    ...
</mycat:schema>

配置rule.xml
定义拆分表的规则

tableRule 标签:

  • name 分片名称
  • rule 分片具体算法
  • columns 分片列名
  • algoorithm 算法方法名

function 标签:

  • name 算法名称
  • class 具体类
<tableRule name="mod_rule">
  <rule>
     <columns>customer_id</columns>
     <algorithm>mod-long</algorithm>
  </rule>
   ...
</tableRule>
<!--函数算法,这个算法是根据选中的字段进行取模的规则进行拆分-->
<function name="mod-long" class="io.mycat.route.function.PartitionByMod" >
  <property name="count">2</property>
</function>

配置sequence.xml
原有的主键自增不满足集群中主键唯一约束,mycat提供全局序列,保证全局唯一。

  • 本地文件方式
  • 数据库方式
  • 本地时间戳
  • 其他方式
  • 自增长主键

分片
**架构演变:**单机数据库-由于越来越多的请求,我们将数据库进行读写分离,主机负责写,从机负责读,从库可以水平扩展,所以更多的读请求不成问题。当数据量增大后,写请求越来越多,就需要用到分库分表,对写操作进行切分。

**单库太大:**单个数据库处理能力有限;解决方法:切分成更多更小的库

**单表太大:**CRUD都成问题;索引膨胀,查询超时;解决方法:切分成多个数据集更小的表。

分库分表的方式方法:

分为 垂直切分 和 水平切分,如果因为表多导致数据多,使用垂直切分,根据业务切分成不同的库;如果因为单张表的数据量太大,使用水平切分。分库分表的顺序应该是先垂直分,后水平分。

垂直拆分
演示:当一个数据库数据量很大,对这些表进行分片处理,把一个数据库拆分多个数据库,分为用户库、订单库、信息表…

步骤1:
准备3个数据库实例,分别创建属于自己的库(用户库、订单库…)
配置server.xml (配置用户、字符集、逻辑库名)

<user name="mycat用户名">
	<property name="password">密码</property>
	<property name="schemas">逻辑库名</property>
</user>

步骤2:

配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="逻辑库名" checkSQLschema="false" sqlMaxLimit="100">
		<table name="用户表1" dataNode="d1" primaryKey="主键ID"></table>
		<table name="用户表2" dataNode="d1" primaryKey="主键ID"></table>
		<table name="用户表3" dataNode="d1" primaryKey="主键ID"></table>
		<table name="字典表1" dataNode="dn1,dn2" type="global" ></table>
		
		<table name="订单表1" dataNode="d2" primaryKey="主键ID"></table>
		<table name="订单表2" dataNode="d2" primaryKey="主键ID"></table>
		<table name="订单表3" dataNode="d2" primaryKey="主键ID"></table>
	</schema>
	
	<dataNode name="d1" dataHost="host1" database="用户库" />
	<dataNode name="d2" dataHost="host2" database="订单表" />
	
	<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"       dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
	   	<writeHost host="hostM1" url="地址1:3306" user="root" password="123123"></writeHost>         </dataHost>
	<dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"       dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
	   	<writeHost host="hostM1" url="地址2:3306" user="root" password="123123"></writeHost>         </dataHost>
</mycat:schema>

步骤3:

在不同的数据库创建数据,如果有字典表,把字典表分别在不同的数据库进行创建,避免垮库查询

备份命令:mysqldump -uroot -pitcast 库名 表名 > 文件名

把备份出的字典表数据,分别在其他数据库里创建,并配置schema.xml,增加全局表(global)

字典表和关联子表配置

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	<table name="customer" dataNode="dn2" ></table>
	<table name="orders" dataNode="dn1,dn2" rule="mod_rule">
		<!-- childTable:关联子表 primaryKey:子表主键 joinKey:关联字段 parentKey:父表的关联字段-->
		<childTable name="orders_detail" primaryKey="id" joinKey="order_id" parentKey="id" />
	</table>
	
	<!--例如字典表,需要在host1 host2 主键都创建,type:定义global 全局表 -->
	<table name="dict_order_type" dataNode="dn1,dn2" type="global" ></table>
</schema>
<dataNode name="dn1" dataHost="host1" database="数据库1" />
<dataNode name="dn2" dataHost="host2" database="数据库2" />

启动Mycat,配置完成。

水平拆分
将同一个表中数据按某种规则拆分到多台数据库主机上。

演示:当一个张表数据量很大,对这些表进行分片处理,拆分3台数据库主机上。

步骤1:

准备3个数据库实例,分别创建属于自己的库(用户库)

配置server.xml (配置用户、字符集、逻辑库名)

步骤2:

配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="逻辑库名" checkSQLschema="false" sqlMaxLimit="100">
		<table name="用户表1" dataNode="d1,d2,d3" primaryKey="主键ID" rule="mod_rule(取模分片)">	
		</table>
	</schema>
	
	<dataNode name="d1" dataHost="host1" database="用户库" />
	<dataNode name="d2" dataHost="host2" database="用户库" />
	<dataNode name="d3" dataHost="host3" database="用户库" />
	
	<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"       dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
	   	<writeHost host="hostM1" url="地址1:3306" user="root" password="123123"></writeHost>         </dataHost>
	<dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"       dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
	   	<writeHost host="hostM1" url="地址2:3306" user="root" password="123123"></writeHost>         </dataHost>
	<dataHost name="host3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql"       dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
	   	<writeHost host="hostM1" url="地址3:3306" user="root" password="123123"></writeHost>         </dataHost>
</mycat:schema>

步骤3:
配置rule.xml

<tableRule name=“mod_rule“>
   <rule>
   	    <columns>customer_id</columns>
   	    <algorithm>mod-long</algorithm>
   </rule>
   ...
</tableRule>

<!--函数算法,这个算法是根据选中的字段进行取模的规则进行拆分-->
<function name=“mod-long” class=“io.mycat.route.function.PartitionByMod” >
    <property name="count">3</property>
</function>

步骤4:

启动Mycat,在Mycat下创建表结构,然后其他数据库也就创建表结构数据。

进行测试,我们创建一些数据,然后根据分片规则,在对应的数据库创建对应的数据。

分片规则:

  • mod-long 取模分片
  • auto-sharding-long 范围分片

配置 autopartition-long.txt文件 # M=10000 k=1000 0-500M=0 500M-1000M=1 1000M-1500M=2

  • sharding-by-intfile 枚举分片 本规则适合省份、状态拆分数据
<tableRule name=“sharding-by-intfile“>
 <rule>
  <columns>status</columns> 
  <algorithm>hash-int</algorithm>
 </rule> 
</tableRule> 
<function name=“hash-int” class=“io.mycat.route.function.ParitionByFileMap” >
 <property name="mapFile">partition-hash-int.txt</property>
 <property name="type">0</property> 
 <property name="defaultNode">0 (默认的节点)</property>
</function> 
# partition-hash-int.txt 1=0 2=1 3=2 # 根据状态status字段进行拆分,值1为第一个数据库,值2为第二个数据库,值3为第三个数据库
  • auto-sharding-rang-mod 范围分片(先进行范围分片,计算分组,再进行组内求模)
<tableRule name=“auto-sharding-rang-mod“>
 <rule>
  <columns>id</columns> 
  <algorithm>rang-mod</algorithm> 
 </rule> 
</tableRule> 
<function name=“rang-mod”  class=“io.mycat.route.function.PartitionByRangeMod” >
 <property name="mapFile">autopartition-range-mod.txt</property> 
 <property name="defaultNode">0 (默认的节点)</property> 
</function> 
# autopartition-range-mod.txt 0-500M=1 500M1-200M=2 # M=10000 2是2个节点
  • sharding-by-long-hash 固定分片hash算法
  • sharding-by-prefixpattern 字符串hash求模范围算法
  • sharding-by-murmur 一致性hash算法
# 有效解决分布式数据的拓容问题,均匀的分散到数据库节点上 
<tableRule name=“sharding-by-murmur“>
 <rule>
  <columns>id</columns> 
  <algorithm>murmur</algorithm> 
 </rule> 
</tableRule> 
<function name=“murmur” class=“io.mycat.route.function.PartitionByMurmurHash” >
 <property name="seed">0</property> 
 <property name="count">3(要分片的数据库节点)</property> 
 <property name="virtualBucketTimes">160</property> 
</function>
  • sharding-by-date 日期分片算法
  • sharding-by-month 自然月分片算法

全局序列:
一旦分库,在不同机器上部署mysql,新增数据,表的主键可能出现相等状况,为了避免这个设置全局序列。

  • 本地文件:不推荐,一旦mycat挂了,本地文件也访问不到。
  • 数据库方式:利用数据库一个表来进行计数累加。mycat会预加载一部分号段到mycat的内存中,这样大部分读写序列都是在内存中完成的。如果内存中的号段用完了 mycat会再向数据库要一次。
  • 时间戳方式:默认的,但是时间戳格式长,性能不好。
  • 自主生成:根据业务逻辑组合,需要改Java代码。

设置数据库方式:

# 1.创建表
CREATE TABLE MYCAT_SEQUENCE (
	NAME VARCHAR(50) NOT NULL,
	current_value INT NOT NULL,
    increment INT NOT NULL DEFAULT 100, 
    PRIMARY KEY(NAME)
) ENGINE=INNODB;

# 2.创建3个函数
DELIMITER $$
CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS VARCHAR(64)
	DETERMINISTIC  
	BEGIN
	DECLARE retval VARCHAR(64);
	SET retval="-999999999,null";
	SELECT CONCAT(CAST(current_value AS CHAR),",",CAST(increment AS CHAR)) INTO retval FROM
	MYCAT_SEQUENCE WHERE NAME = seq_name;
	RETURN retval;
END $$
DELIMITER;

DELIMITER $$
CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),VALUE INTEGER) RETURNS VARCHAR(64)
	DETERMINISTIC
	BEGIN
	UPDATE MYCAT_SEQUENCE
	SET current_value = VALUE
	WHERE NAME = seq_name;
	RETURN mycat_seq_currval(seq_name);
END $$
DELIMITER;

DELIMITER $$
CREATE FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) RETURNS VARCHAR(64) 
	DETERMINISTIC
	BEGIN
	UPDATE MYCAT_SEQUENCE
	SET current_value = current_value + increment WHERE NAME = seq_name;
	RETURN mycat_seq_currval(seq_name);
END $$
DELIMITER;

# 3 插入序列的表,初始化MYCAT_SEQUENCE数据
字段1:全局序列名字,字段2:多少号开始,字段3:一次性给多少
SELECT * FROM MYCAT_SEQUENCE
INSERT INTO MYCAT_SEQUENCE(NAME,current_value,increment) VALUES ('ORDERS', 400000,100);

# 4 更改mycat配置:
修改这个文件:sequence_db_conf.properties
把要改的表,如order表改成 = dn1 结点

# 5 更改server.xml文件:
把下面的类型改成1 的类型是数据库方式,更改完进行重启
...
<property name="sequnceHandlerType">1</property>

# 6 执行新增操作 增加要用的序列
insert into `orders`(id,amount,customer_id,order_type) values(
    next value for MYCATSEQ_ORDERS
    ,1000,101,102);

性能监控
Mycat-web

帮助我们统计任务和配置管理任务。可以统计SQL并分析慢SQL和高频SQL,为优化SQL提供依据。

安装 Mycat-web
步骤1:

安装Mycat-web之前,需要安装JDK,zookeeper,官方地址:http://zookeeper.apache.org

安装zookeeper:下载好的安装包文件 (zookeepe-xxx.tar.gz),上传Linux服务器上,一般安装在/usr/local下,进行解压

tar -zxvf zookeeper-xxx.tar.gz

解压完,在当前目录(/usr/loca/zookeeper)创建data目录,切换到conf目录下,修改配置文件 zoo_sample.cfg 重命名为 zoo.cfg,修改完进行编辑这个文件

dataDir=/usr/loca/zookeeper/data

启动zookeeper

bin/zkServer.sh start

步骤2:

安装Mycat-web ,下载地址:http://dl.mycat.org.cn

选择mycat-web目录下文件进行下载,下载好的安装包文件,上传Linux服务器上,一般安装在/usr/local下,进行解压

tar -zxvf Mycat-web-xxx-linux.tar.gz

解压完,在当前目录(/usr/loca/mycat-web),如果多个,启动程序:

sh start.sh

启动程序,访问http://ip地址:8082/mycat,通过这个网址进行监控Mycat。

步骤3:

配置Mycat,打开网址,菜单栏 - mycat服务管理 - 新增 (新增要监控的Mycat)注意:管理端口9066 服务端口8066
在这里插入图片描述

二、配置读写分离

1、一主一从配置读写分离

首先配置数据库的主从复制,详见:https://blog.csdn.net/hualinger/article/details/131292136

步骤1 更改server.xml文件:

设置mycat的用户名和密码,schemas部分设置mycat的逻辑库名。

...
<user name="mycat用户名">
	<property name="password">密码</property>
	<property name="schemas">TESTDB</property>
</user>

步骤2 更改schema.xml 文件:

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

	<schema name="逻辑库名" checkSQLschema="false" sqlMaxLimit="100">
		<table name="表1" dataNode="dn1" primaryKey="主键ID"></table>
	</schema>
	
	<dataNode name="dn1" dataHost="host1" database="数据库名" />
	
	<!-- dataHost:主机名 balance: 负载均衡类型 0 不开启 1 双主双从 2 随机分发 3 主写从读  -->
	<dataHost name="host1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
		
		<!-- 配置写主机 host:写主机名字,url:主机的地址 user:主机的用户名 password:主机密码 -->
	   	<writeHost host="hostm1" url="192.168.67.1:3306" user="root" password="123123">
	   		<!-- 配置从机 读库(从库)的配置 -->
	    	<readHost host="hosts1" url="192.168.67.131:3306" user="root" password="123123">
	    	</readHost>
	    </writeHost>                                                                               
	</dataHost>
</mycat:schema>

步骤3 配置Mycat日志:

在/usr/local/mycat/conf配置,修改log4j2.xml

<asyncRoot level="debug" includeLocation="true">...<asyncRoot>
日志修改为debug模式

步骤4 启动Mycat

# 方式1 - 控制台启动 :去mycat/bin 目录下 执行 mycat console
[root@... bin]# ./mycat console

# 方式2 - 后台启动 :去mycat/bin 目录下 mycat start
[root@... bin]# ./mycat start

如果启动失败,报错域名解析失败

解决:修改 /etc/hosts ,在 127.0.0.1 后面增加你的机器名,修改后,重启服务 service network restart

启动成功,登录MyCat:

# 后台管理的窗口:
mysql -uroot -p 密码 -h 192.168.67.131 -P 9066
# 数据窗口窗口:
mysql -uroot -p 密码 -h 地址 -P 8066
# 登录后,查询库
show databases;

配置完成,进行演示,
在/usr/local/mycat/log查看日志信息,方便看走的哪个数据库

tail -f mycat.log  # 查看日志

2、双主双从配置读写分离

首先配置数据库的主从复制,4个数据库,2主机,2从机。详见:https://blog.csdn.net/hualinger/article/details/131292136

步骤1 配置读写分离

通过Mycat配置读写分离,更改server.xml文件:

设置mycat的用户名和密码,schemas部分设置mycat的逻辑库名。

步骤2 更改schema.xml 文件:

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

	<schema name="逻辑库名" checkSQLschema="false" sqlMaxLimit="100">
		<table name="表1" dataNode="dn1" primaryKey="主键ID"></table>
	</schema>
	
	<dataNode name="dn1" dataHost="host1" database="数据库名" />
	
	<!-- dataHost:主机名 balance: 负载均衡类型 0 不开启 1 双主双从 2 随机分发 3 主写从读  -->
	<!-- writeType 0写操作在第一主机,如果挂掉,会连接第二主机 1随机发送主机上 -->
	<!-- writeType -1不自动切换 1自动切换 2基于心跳状态决定-->
	<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100" >
		<heartbeat>select user()</heartbeat>
		
		<!-- 配置写主机 host:写主机名字,url:主机的地址 user:主机的用户名 password:主机密码 -->
	   	<writeHost host="hostm1" url="主机1:3306" user="root" password="123123">
	    	<readHost host="hosts1" url="从机1:3306" user="root" password="123123">
	    	</readHost>
	    </writeHost> 
        
        <writeHost host="hostm2" url="主机2:3306" user="root" password="123123">
	    	<readHost host="hosts2" url="从机2:3306" user="root" password="123123">
	    	</readHost>
	    </writeHost> 
	</dataHost>
</mycat:schema>

步骤4 配置Mycat日志:
在/usr/local/mycat/conf配置,修改log4j2.xml

...
<asyncRoot level="debug" includeLocation="true">...<asyncRoot>
日志修改为debug模式

步骤5 启动Mycat

# 方式1 - 控制台启动 :去mycat/bin 目录下 执行 mycat console
[root@... bin]# ./mycat console

# 方式2 - 后台启动 :去mycat/bin 目录下 mycat start
[root@... bin]# ./mycat start

启动成功,登录MyCat,配置完成,进行演示。
检查Mycat的主从复制是否正常,主机1创建数据,从机1。主机2 都有复制成功。

猜你喜欢

转载自blog.csdn.net/hualinger/article/details/131518730