什么是读写分离mysql
在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让二者分工明确达到提升数据库总体读写性能。固然,主数据库另一个功能就是负责将事务性查询致使的数据变动同步到从库中,也就是写操做。sql
读写分离的好处数据库
1:分摊服务器压力,提升机器的系统处理效率express
2:增长冗余,提升服务可用性,当一台数据库服务器宕机后能够调整另一台从库以最快速度恢复服务apache
这里就推荐使用MyCat中间件来读写分离服务器
是一个开源的分布式数据库系统,可是由于数据库通常都有本身的数据库引擎,而Mycat并无属于本身的独有数据库引擎,全部严格意义上说并不能算是一个完整的数据库系统,只能说是一个在应用和数据库之间起桥梁做用的中间件。架构
在Mycat中间件出现以前,MySQL主从复制集群,若是要实现读写分离,通常是在程序段实现,这样就带来了一个问题,即数据段和程序的耦合度过高,若是数据库的地址发生了改变,那么个人程序也要进行相应的修改,若是数据库不当心挂掉了,则同时也意味着程序的不可用,而对于不少应用来讲,并不能接受;
app
引入Mycat中间件能很好地对程序和数据库进行解耦,这样,程序只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务的,大量的通用数据聚合、事务、数据源切换等工做都由中间件来处理;less
Mycat中间件的原理是对数据进行分片处理,从原有的一个库,被切分为多个分片数据库,全部的分片数据库集群构成完成的数据库存储,有点相似磁盘阵列中的RAID0.分布式
Mycat实现思路
经过外网地址链接上Mycat,而后根据读写转发给主从,
MyCat下载地址
连接:https://pan.baidu.com/s/1ggE8A6f 密码:ejr3
我使用的MyCat是Windows版本的
1:建立表结构
CREATE DATABASE IF NOT EXISTS `weibo_simple`; use weibo_simple; go -- ------------------------------------ -- Table structure for `t_users` 用户表 -- ------------------------------------ DROP TABLE IF EXISTS `t_users`; CREATE TABLE `t_users` ( `user_id` varchar(64) NOT NULL COMMENT '注册用户ID', `user_email` varchar(64) NOT NULL COMMENT '注册用户邮箱', `user_password` varchar(64) NOT NULL COMMENT '注册用户密码', `user_nikename` varchar(64) NOT NULL COMMENT '注册用户昵称', `user_creatime` datetime NOT NULL COMMENT '注册时间', `user_status` tinyint(1) NOT NULL COMMENT '验证状态 1:已验证 0:未验证', `user_deleteflag` tinyint(1) NOT NULL COMMENT '删除标记 1:已删除 0:未删除', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ------------------------------------- -- Table structure for `t_message`微博表 -- ------------------------------------- DROP TABLE IF EXISTS `t_message`; CREATE TABLE `t_message` ( `messages_id` varchar(64) NOT NULL COMMENT '微博ID', `user_id` varchar(64) NOT NULL COMMENT '发表用户', `messages_info` varchar(255) DEFAULT NULL COMMENT '微博内容', `messages_time` datetime DEFAULT NULL COMMENT '发布时间', `messages_commentnum` int(12) DEFAULT NULL COMMENT '评论次数', `message_deleteflag` tinyint(1) NOT NULL COMMENT '删除标记 1:已删除 0:未删除', `message_viewnum` int(12) DEFAULT NULL COMMENT '被浏览量', PRIMARY KEY (`messages_id`), KEY `user_id` (`user_id`), CONSTRAINT `t_message_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_users` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2:解压Mycat,进入conf文件,配置server.xml
<!-- 添加user有读写权限 --> <user name="mycat"> <property name="password">mycat</property> <property name="schemas">mycat</property> </user> <!-- 添加user只有读的权限 --> <user name="mycat_red"> <property name="password">mycat_red</property> <property name="schemas">mycat</property> <property name="readOnly">true</property> </user>
3:配置schema.xml 为防止细节致使的错误,大家直接替换schema.xml就能够了
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <!-- 与server.xml中user的schemas名一致 --> <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100"> <table name="t_users" primaryKey="user_id" dataNode="dn1" rule="rule1"/> <table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" /> </schema> <!-- database="weibo_simple" 这个是配置数据库的 --> <dataNode name="dn1" dataHost="jdbchost" database="weibo_simple" /> <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- 配置主机信息 --> <writeHost host="hostMaster" url="192.168.121.131:3306" user="root" password="root"> </writeHost> <!-- 配置从机信息 --> <writeHost host="hostSlave" url="192.168.121.133:3306" user="root" password="root"/> </dataHost> </mycat:schema>
4:配置rule.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://org.opencloudb/"> <tableRule name="rule1"> <rule> <columns>user_id</columns> <algorithm>func1</algorithm> </rule> </tableRule> <function name="func1" class="org.opencloudb.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long.txt</property> </function> </mycat:rule>
5:配置log4j.xml 为了更好地定位错误
<root> <level value="debug" /> <appender-ref ref="FILE" /> <!--<appender-ref ref="FILE" />--> </root>
这样就成功啦!!!
这是配置成功的
运行
1:进入bin文件打开startup_nowrap.bat
下面是MYSQL链接的
这样就能够了