在我们的工作中可能会遇到数据库的io瓶颈。
这个时候我们应该怎么办呢?
解决办法有很多,我们可以想到的为:数据库集群,主从复制,读写分离,数据库负载均衡,数据库的分库,分表。接下来我们写一下,数据库的垂直分库。
其实我们实现垂直分库目的是为了,能够分摊主数据库的io压力,一般设置分出去的数据库为读,主服务器为写。主服务器和分服务器要实现主从复制的功能,这样就能实现读写分离,均衡数据库io,从而达到解决数据库瓶颈的目的。
怎么实现垂直分库呢?(之前我们得实现主从复制,我之前的文章中有提到,这里不做赘述)这里,我只做了一个数据库的垂直切分为两个,这样相对来说比较清晰,两个以上的类似。
我们使用mycat来实现我们想要的垂直分库功能。
具体步骤如下:
1、利用主从复制,在各个分服务器中同步我们的主数据库的数据。
(
利用主从关系,在主和从中都设立一个mysql数据库的账户
创建账户:create user im_mycat@'10.0.4.%' identified by '123456';
授权:grant select,update,delete,insert on *.* to im_mycat@'10.0.4.%';
)
2、启动mycat,修改schema.xml 和server.xml 的配置。
其中schema.xml配置如下:
select user()
select user()
server.xml 做如下配置:
0
1
0
0
0
8066
9066
300000
0.0.0.0
2048
8
2
false
0
0
1
64k
1k
0
384m
false
123456
imooc_db #其中imooc_db为逻辑数据库,也就是schema.xml中配置的
配置好后,从起mycat
mycat restart
利用mycat登录
mysql -uapp_imooc -p123456 -h10.0.4.180 -P8066
我们可看到我们配置好的,切分出去的那个库。
然后我们将从库中多余的表去掉,并把所有的主从复制断开。
通过连接mycat就能操作两个从表了,mycat作为中间件整合我们垂直分开的库。
这样我们就把数据库的io分摊到了两个数据库服务器中。
大概就是下面这幅图的意思。