使用mycat 读写分离mysql
2016-07-08 09:15
344 查看
机器准备
1、mysql 主从配置
http://blog.csdn.net/convict_eva/article/details/51734853
主 192.168.192.128
从 192.168.192.129
2、mycat服务器 192.168.192.133
安装jdk
下载mycat(mycat 社区 http://www.mycat.org.cn/),并解压到/usr/local目录下
3、修改/usr/local/mycat/conf/schema.xml 配置
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!-- TESTDB 类似mysql中的数据库,全局唯一 ,
dataNode 指定 此schema 对应的数据库-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn_master">
<!-- auto sharding by id (long) -->
</schema>
<!-- 配置数据结点,对应真实的数据库
name 全局唯一
database
对应真实数据库中的dabase
dataHost
对应配置的dataHost结点名称 -->
<dataNode name="dn_master" dataHost="master" database="test_db"
/>
<!--
name
全局唯一
maxCon
minCon 对应初始化连接数
dbType
对应数据库类型,dbDriver 驱动
wirteType:
"0" 所有的写操作发送到配置的第一个writeHost,第一个挂了切换到第二个wirteHost,重新启动后以切换的为准。切换记录在配置文件
dnindex.properties
中,"1":所有有写操作随机发送到writeHost 中,1.5 不推荐
switchType:"-1"
表示不自动切换,"1"默认值,自动切换,"2" 基于MySQL 主人同步的状态决定是否切换(心跳语句为 show slave status)
MyCat
心跳机制通过检测show slave status 中的"seconds_behind_master","slave_io_running","slave_sql_runing" 三个字段来确定当前主从同步的状态以及seconds_behind_master 主从复制延时,当seconds_behind_master>slaveThreshold时,读写分离筛选器会过滤掉此slave机器,防止读到脏数据,当主节点宕机后,切换逻辑会检查slave上的seconds_behind_master
是否为0,为0时则表示主从同步,可以安全切换,否则不切换。
切换后的dn 配置在dnindex.properties 配置文件中,重启mycat 以此文件为准
balance
0 不开启读写分享,所有的读操作都发送到当前可用的writehost 上
1 全部readHost 与stand by writeHost 参与select 语句负载均衡。简单的说,当双主双从模式(m1->s1,m2-s2,并且 m1 m2 互为主备),正常情况下,m2 s1 s2 都参与select 语句的负载均衡
2 所有读操作都随机的在 writeHost ,readHost 上分发
3 所有读请求随机的分发到writerHost 对应的readHost 执行,write 不负担读压力。balance=3 只在1.4及其以后版本才有。
-->
<dataHost name="master" maxCon="10" minCon="2" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM1" url="192.168.192.128:3306"
user="root" password="Abc123!@#"></writeHost>
<writeHost host="hostS1" url="192.168.192.129:3306"
user="root" password="Abc123!@#"></writeHost>
</dataHost>
</mycat:schema>
启动mycat
# ./bin/mycat start
4、测试
主数据库数据:
mysql> select * from tb_a;
+------+
| a |
+------+
| 1 |
| 1 |
| 1 |
| 1 |
| 2 |
| 3 |
| 5 |
+------+
从数据库数据:
mysql> select * from tb_a;
+------+
| a |
+------+
| 1 |
| 1 |
| 1 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
通过客户端工具连接mycat,mycat默认端口为8066,和直接连接mysql是一样的。用户名和密码在conf/server.xml 中配置文件中找到。
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">false</property>
</user>
配置 schema.xml 中的schema 可以被那个用户访问。name:user Password:user
通过工具连接后,查询出的数据是从数据库的数据。当停止主库时可以自动切换(要满足切换的条件)到从库。
踩到的坑:
1、数据库的密码有 & 符号,启动时报xml 解析异常。
2、mycat jvm的配置放在wrapper.conf 文件中,默认的虚拟机内存大小为1G--4G,由于使用的是虚拟机所以启动前要修改下jvm内存设置
mycat 主从的另一种方式,当write 挂了读不可用。
<dataHost name="master" maxCon="10" minCon="2" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM1" url="192.168.192.128:3306" user="root" password="Abc123!@#">
<readHost host="hostS2" url="192.168.192.129:3306" user="root" password="Abc123!@#" />
</writeHost>
</dataHost>
1、mysql 主从配置
http://blog.csdn.net/convict_eva/article/details/51734853
主 192.168.192.128
从 192.168.192.129
2、mycat服务器 192.168.192.133
安装jdk
下载mycat(mycat 社区 http://www.mycat.org.cn/),并解压到/usr/local目录下
3、修改/usr/local/mycat/conf/schema.xml 配置
<mycat:schema xmlns:mycat="http://org.opencloudb/" >
<!-- TESTDB 类似mysql中的数据库,全局唯一 ,
dataNode 指定 此schema 对应的数据库-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn_master">
<!-- auto sharding by id (long) -->
</schema>
<!-- 配置数据结点,对应真实的数据库
name 全局唯一
database
对应真实数据库中的dabase
dataHost
对应配置的dataHost结点名称 -->
<dataNode name="dn_master" dataHost="master" database="test_db"
/>
<!--
name
全局唯一
maxCon
minCon 对应初始化连接数
dbType
对应数据库类型,dbDriver 驱动
wirteType:
"0" 所有的写操作发送到配置的第一个writeHost,第一个挂了切换到第二个wirteHost,重新启动后以切换的为准。切换记录在配置文件
dnindex.properties
中,"1":所有有写操作随机发送到writeHost 中,1.5 不推荐
switchType:"-1"
表示不自动切换,"1"默认值,自动切换,"2" 基于MySQL 主人同步的状态决定是否切换(心跳语句为 show slave status)
MyCat
心跳机制通过检测show slave status 中的"seconds_behind_master","slave_io_running","slave_sql_runing" 三个字段来确定当前主从同步的状态以及seconds_behind_master 主从复制延时,当seconds_behind_master>slaveThreshold时,读写分离筛选器会过滤掉此slave机器,防止读到脏数据,当主节点宕机后,切换逻辑会检查slave上的seconds_behind_master
是否为0,为0时则表示主从同步,可以安全切换,否则不切换。
切换后的dn 配置在dnindex.properties 配置文件中,重启mycat 以此文件为准
balance
0 不开启读写分享,所有的读操作都发送到当前可用的writehost 上
1 全部readHost 与stand by writeHost 参与select 语句负载均衡。简单的说,当双主双从模式(m1->s1,m2-s2,并且 m1 m2 互为主备),正常情况下,m2 s1 s2 都参与select 语句的负载均衡
2 所有读操作都随机的在 writeHost ,readHost 上分发
3 所有读请求随机的分发到writerHost 对应的readHost 执行,write 不负担读压力。balance=3 只在1.4及其以后版本才有。
-->
<dataHost name="master" maxCon="10" minCon="2" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM1" url="192.168.192.128:3306"
user="root" password="Abc123!@#"></writeHost>
<writeHost host="hostS1" url="192.168.192.129:3306"
user="root" password="Abc123!@#"></writeHost>
</dataHost>
</mycat:schema>
启动mycat
# ./bin/mycat start
4、测试
主数据库数据:
mysql> select * from tb_a;
+------+
| a |
+------+
| 1 |
| 1 |
| 1 |
| 1 |
| 2 |
| 3 |
| 5 |
+------+
从数据库数据:
mysql> select * from tb_a;
+------+
| a |
+------+
| 1 |
| 1 |
| 1 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
通过客户端工具连接mycat,mycat默认端口为8066,和直接连接mysql是一样的。用户名和密码在conf/server.xml 中配置文件中找到。
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">false</property>
</user>
配置 schema.xml 中的schema 可以被那个用户访问。name:user Password:user
通过工具连接后,查询出的数据是从数据库的数据。当停止主库时可以自动切换(要满足切换的条件)到从库。
踩到的坑:
1、数据库的密码有 & 符号,启动时报xml 解析异常。
2、mycat jvm的配置放在wrapper.conf 文件中,默认的虚拟机内存大小为1G--4G,由于使用的是虚拟机所以启动前要修改下jvm内存设置
mycat 主从的另一种方式,当write 挂了读不可用。
<dataHost name="master" maxCon="10" minCon="2" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM1" url="192.168.192.128:3306" user="root" password="Abc123!@#">
<readHost host="hostS2" url="192.168.192.129:3306" user="root" password="Abc123!@#" />
</writeHost>
</dataHost>
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复