上篇文章详细介绍了MySQL中间件MyCat的搭建及读写分离操做。在实际场景中,面对大容量的数据,在数据库层面中一般的解决方案有两种,第一种是读写分离,第二种就是数据库的分库和分表了,本篇文章将基于MyCat中间件,详细介绍一下经过MyCat综合实现分库、分表及读写分离操做!
上两篇文章中已经介绍了Mycat的基本使用,但MyCat的核心工做原理有必要此处再强调一下,利于理解后面其余内容,以下:node
一、数据库软件mysql
MySQL5.6.39
二、MyCat中间件sql
Mycat-server-1.6
三、服务器环境数据库
CenterOS6.9虚拟机五台
四、服务器划分vim
一、安装MySQL数据库,并配置主从复制,安装及配置主从同步请参考以前的文章,有详细讲解,此处再也不赘述缓存
二、配置mysql-proxy,进入到MyCat的安装目录,而后修改server.xml服务器
#备份原文件 [root@mysql-proxy ~]# cd /usr/local/mycat/conf/ [root@mysql-proxy conf]# cp server.xml server.xml.bak
添加以下两个用户,一个为只读用户,一个为读写用户:并发
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://io.mycat/"> <user name="root"> <property name="password">123456</property> <property name="schemas">test_db</property> <!-- <privileges check="false"> <schema name="test_db" dml="0110"> <table name="student" dml="0000"></table> <table name="t_user" dml="1111"></table> </schema> </privileges> --> </user> <user name="user"> <property name="password">user</property> <property name="schemas">test_db</property> <property name="readOnly">false</property> </user> </mycat:server>
三、配置schema.xml配置文件app
#备份原文件 [root@mysql-proxy conf]# cp schema.xml schema.xml.bak [root@mysql-proxy conf]# vim schema.xml
写入以下内容:url
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="test_db" checkSQLschema="false" sqlMaxLimit="100"> <table name="t_user" primaryKey="id" dataNode="wb_node01,wb_node02" rule="sharding-by-mod" /> </schema> <dataNode name="wb_node01" dataHost="wb_host01" database="test_db" /> <dataNode name="wb_node02" dataHost="wb_host02" database="test_db" /> <dataHost name="wb_host01" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <heartbeat>show slave status</heartbeat> <writeHost host="mysql-server01" url="192.168.0.4:3306" user="root" password="root"> <readHost host="mysql-server02" url="192.168.0.5:3306" user="root" password="root" /> </writeHost> <writeHost host="mysql-server02" url="192.168.0.5:3306" user="root" password="root" /> </dataHost> <dataHost name="wb_host02" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <heartbeat>show slave status</heartbeat> <writeHost host="mysql-server03" url="192.168.0.7:3306" user="root" password="root"> <readHost host="mysql-server04" url="192.168.0.8:3306" user="root" password="root" /> </writeHost> <writeHost host="mysql-server04" url="192.168.0.8:3306" user="root" password="root" /> </dataHost> </mycat:schema>
部份内容解释:
四、修改rule.xml,配置分表策略
[root@mysql-proxy conf]# cp rule.xml rule.xml.bak [root@mysql-proxy conf]# vim rule.xml
配置分表策略,以下是按照主键ID取模进行分表:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://io.mycat/"> <tableRule name="sharding-by-mod"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!-- 表示数据节点的数量 --> <property name="count">2</property> </function> </mycat:rule>
五、启动mycat服务,并插入两条数据
[root@mysql-proxy conf]# cd /usr/local/mycat/bin/ [root@mysql-proxy bin]# ./mycat start
使用user用户链接mycat,而后插入两条数据,以下:
#链接mycat服务 [root@mysql-proxy bin]# mysql -uuser -puser -P8066 -h127.0.0.1 #查看数据库 mysql> show databases; +----------+ | DATABASE | +----------+ | test_db | +----------+ #在t_user表中插入两条记录 mysql> use test_db; mysql> insert into t_user(id,name,age,address) values(1,"wangbin",24,"Shan'Xi"); mysql> insert into t_user(id,name,age,address) values(2,"binwang",21,"Bei'Jing");
注意:上述插入数据时须要本身提供id,可使用序列的方式或者ID生成器本身生成,此处暂时不介绍,若是不提供ID,会插入失败。
六、分别登录mysql-server01和mysql-server03查看插入的数据
登录mysql-server01,查看以下:
[root@mysql-server01 ~]# mysql -uroot -proot -P3306 -h127.0.0.1 test_db #查数据 root@127.0.0.1 test_db> select * from t_user; +----+----------+------+---------+ | id | name | age | address | +----+----------+------+---------+ | 2 | binwang | 21 | BeiJing | +----+----------+------+---------+ 1 row in set (0.00 sec)
登录mysql-server03,查看以下:
[root@mysql-server03 ~]# mysql -uroot -proot -h127.0.0.1 -P3306 test_db #查数据 root@127.0.0.1 test_db> select * from t_user; +----+----------+------+---------+ | id | name | age | address | +----+----------+------+---------+ | 1 | wangbin | 24 | Shan'Xi | +----+----------+------+---------+ 1 row in set (0.00 sec)
从上述结果看到,id=1的数据和id=2的数据分别被分到mysql-server01组合mysql-server03组中。至此,基于MyCat的分库分表已经配置完成,读写分离能够经过监控MyCat的实时日志验证,日志位置为:/usr/local/mycat/logs/wrapper.log,能够自行查看,以前文章介绍过,此处再也不赘述。
七、查看节点当前状态
[root@mysql-proxy bin]# mysql -uuser -puser -P9066 -h127.0.0.1 mysql> show @@datanode; +-----------+-------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+ | NAME | DATHOST | INDEX | TYPE | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME | +-----------+-------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+ | wb_node01 | wb_host01/test_db | 0 | mysql | 0 | 10 | 1000 | 140 | 0 | 0 | 0 | -1 | | wb_node02 | wb_host02/test_db | 0 | mysql | 0 | 10 | 1000 | 139 | 0 | 0 | 0 | -1 | +-----------+-------------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
能够看到,节点目前都处于存活状态。
以上内容介绍了使用ID取模的方式借助MyCat中间件实现数据库的分库分表及读写分离过程。文章中概念内容介绍的比较少,由于在MyCat的官网上有更详细的概念描述。若有不明白,可下方评论。欢迎转发!
后续文章将更新在我的小站上,欢迎查看。