标签:基于 mit lag 提升 conf lob beat 个数 host
关于MySQL的读写分离的实现,有两种方式。
1.第一种方式即我们手动在代码层实现逻辑,来解析读请求或者写请求,分别分发到不同的数据库中,实现读写分离;
2.第二种方式就是基于MyCat中间件来实现读写分离的效果;
关于这两种方式的优劣。
代码层实现读写分离,主要的优点就是灵活,可以自己根据不同的需求对读写分离的规则进行定制化开发,但其缺点也十分明显,就是当我们动态增减主从库数量的时候,都需要对代码进行一个或多或少的修改。并且当主库宕机了,如果我们没有实现相应的容灾逻辑,那么整个数据库集群将丧失对外的写功能。
使用MyCat中间件实现读写分离,优点十分明显,我们只需要进行配置就可以享受读写分离带来的效率的提升,不用写一行代码,并且当主库宕机时,我们还可以通过配置的方式进行主从库的自动切换,这样即使主库宕机我们的整个集群也不会丧失写的功能。其缺点可能就是我们得多付出一台服务器作为虚拟节点了吧,毕竟服务器也是需要成本的。
两种方式如何抉择:如果你目前的项目比较小,或者干脆是一个毕业设计、课程设计之类的,不会有动态增减数据库的需求,那么自己动手实现一个数据库的读写分离会比较适合你,毕竟答辩的时候,可以一行一行代码跟你的导师和同学解(zhuang)释(bi)。如果项目比较大了,数据库节点有可能进行增减,并且需要主从切换之类的功能,那么就使用第二种方式吧。这种配置化的实现可以降低第二天洗头时候下水管堵塞的几率。
#创建数据库 CREATE DATABASE weibo_simple
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;
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;
<!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <!-- 添加user --> <user name="mycat_master"> <property name="password">mycat_master</property> <property name="schemas">mycat</property> </user> <!-- 添加user --> <user name="mycat_slave"> <property name="password">mycat_slave</property> <property name="schemas">mycat</property> <property name="readOnly">true</property> </user> </mycat:server>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <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> <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.33.135:3306" user="root" password="root"> </writeHost> <writeHost host="hostSlave" url="192.168.33.136:3306" user="root" password="root"/> </dataHost> </mycat:schema>
<!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>
<root> <level value="debug" /> <appender-ref ref="FILE" /> <!--<appender-ref ref="FILE" />--> </root>
1.在使用mycat连接SQLyog时,SQLyog版本不能太低,版本不能太低,不能太低,需要高版本!!!
标签:基于 mit lag 提升 conf lob beat 个数 host
原文地址:https://www.cnblogs.com/lowerma/p/12349476.html