分库分表
mycat是一个虚拟的数据库服务器,本身自己连接的是逻辑数据库,并不充当存储数据的业务,
数据真实存储在物理数据库上面。
读写分离
原理
让主数据库实现增删改业务,让从数据库实现查询的业务
数据一致性可以通过mysql的主从复制机制来保证数据的同步。
实现方式
读写分离需要主从复制,使用mysql自带的主从复制功能即可。
开发步骤:
-
配置server.xml文件 需要配置,保留以前即可,如果有多个逻辑数据库,只需要在schemas里面添加即可。中间用逗号隔开。
-
配置schema.xml文件
<schema name = "ZKL_TABLE" checkSQLschema="false" sqlMaxLimit = "100"> <table name = "user" dataNode = "dn01" /> <table name = "student" dataNode = "dn02" /> <table name = "dept" dataNode = "dn01,dn02" primaryKey = "d_id" autoIncrement = "true" rule = "mod-long"/> </schema> <!--如果server.xml文件中的schemas属性有多个数据库,那么在schemax.xml文件中配置多个schema schema的配置尽量放在一起。 --> <dataNode name = "dn01" dataHost = "master" database = "ZKL_TABLE"/> <dataNode name = "dn02" dataHost = "slave01" database = "ZKL_TABLE"/> <!-- balance 平衡机制 balance = "0" 不开启读写分离 balance = "1" 开启读写分裂 --> <dataHost name = "master" maxCon = "1000" minCon = "10" balance = "1" writeType = "0" dbType = "mysql" dbDriver = "native"> <!--心跳检查机制--> <heartbeat>select user();</heartbeat> <writeHost host = "master" url = "192.168.68.129:3306" user = "root" password = "MyNewPass4!"> <readHost host = "slave01" url="192.168.68.130:3306" user = "root" password = "MyNewPass4!"> </readHost> </writeHost> </dataHost> <dataHost name = "slave01" maxCon = "1000" minCon = "10" balance = "1" writeType = "0" dbType = "mysql" dbDriver = "native"> <heartbeat>select user();</heartbeat> <writeHost host = "master" url = "192.168.68.129:3306" user = "root" password = "MyNewPass4!"> <readHost host = "slave01" url="192.168.68.130:3306" user = "root" password = "MyNewPass4!"> </readHost> </writeHost> </dataHost>
-
配置rule.xml文件也不需要发生改变。使用以前的即可。
-
重启mycat服务
重启
./mycat restart
停止
./mycat stop
查看状态
./mycat status
启动
./mycat start
-
测试时,数据没有同步,手动开启mysql的主从复制功能。
查看从服务器中的IO线程 SQL线程 是否都为yes