1.简介
mycat是一个开源的数据库中间件,其前身是阿里巴巴的cobar,主要能够实现的功能有读写分离,数据分片(垂直分库,垂直分表,水平分库,水平分表)及多数据源整合。其基本原理主要是拦截要执行的sql语句,该sql的表信息主要是逻辑表信息,依据规则进行分片分析,读写分析,缓存分析等等指定具体的物理表,然后将sql改写分别发送到不同的数据库上执行,然后获取到结果进行归并,接着就是返回结果(sharding-jdbc原理与其大致相同,思考:mycat是否有绑定功能)。
2.主要配置文件
server.xml: mycat的系统信息等。
//应用程序中配置的用户名、密码及数据库名称
mycatUserPassword
testdb //指定的schema
schema.xml: 定义逻辑表,表分片节点信息等。
//schema name 对应server中配置的schema name dataNode 对应下面dataNode的name
//database为物理数据库 dataHost和下面dataHost节点name保持一致
select user()
//写主机的地址 用户名 及密码
//读主机的地址 用户名 及密码
//dataHost中 balance的值设置不同的值,读写负载也不同
//balance:0 读操作都在写库中
//balance:1 当有多主多从的时候,主之间互为主从,mater1->slave1 master2->slave2 master1和master2互为主备,select会在slave1 master2 slave2随机调用
//balance:2 所有读操作将会在所有数据库中随机执行
//balance:3 所有读操作将会在所有读数据库中执行
//一般使用1或者3,1单主单从 3 多主多从
rule.xml: 定义数据分片信息等。
启动在mycat bin目录下执行:
./mycat console(控制台启动)
./mycat start (后台启动)
登录
维护窗口:
mysql -umycat -p123456 -P 9066 -h 192.168.101.101
使用窗口:
mysql -umycat -p123456 -P 8066 -h 192.168.101.101
3.mycat实现主从复制
mysql主从数据库之间同步是基于mysql自己实现的,教程
//dataHost中 balance的值设置不同的值,读写负载也不同
//balance:0 读操作都在写库中
//balance:1 当有多主多从的时候,主之间互为主从,mater1->slave1 master2->slave2 master1和master2互为主备,select会在slave1 master2 slave2随机调用
//balance:2 所有读操作将会在所有数据库中随机执行
//balance:3 所有读操作将会在所有读数据库中执行
//一般使用1或者3,1单主单从 3 多主多从
4.mycat实现多主多从
单主单从中,如果主挂了,对应业务影响就比较大了,可以采用多主要多从,一个主有多个主的从库,当一个主库挂掉,主的从库就升级为主库继续提供服务,当主库在挂掉后再重新服务就变成了运行中主的从库,当主库挂掉后就可能再次升级为主库。当balance设置为3时候,主的从库就可以作为读取数据的从库。
修改上述单主单从配置
解除主从关系:
在从库上执行:
stop slave;
reset master;
修改单主单从中主的/etc/my.cnf
#在主数据库作为从数据库的时候,也要进行读取中继日志进行写操作
log-slave-updates
#自增字段每次自增增长量
auto-increment-increment=2 范围:1---65535
#自增字段起始值
auto-increment-offset=1 范围:1---65535
设置第二台主的/etc/my.cnf
server-id=3 #serverid 不要重复
其他同第一台主的配置
auto-increment-increment=2 #设置同第一台主的配置
auto-increment-offset=2 #这个要设置为2了
第二台从的配置同第一台从的配置
需要修改sever-id=4
重启服务即可
在主数据库创建从库访问的用户,执行show master status;获取日志名及偏移值。
GRANT REPLICATION SLAVE ON *.* TO 'slaveDB'@'%' IDENTIFIED BY '123456'
执行主从同步命令
CHANGE MASTER to MASTER_HOST='主的ip地址',
MASTER_USER='主给从访问的用户名',
MASTER_PASSWORD='主给从访问的密码',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=134;
#通过在主数据库上show master status;查询到的值
启动slave:start slave;
执行完后,在从的数据库上执行:
show slave status; 查看io及sql状态,如果有错误可以看到错误信息。
上述是设置主与从之间的配置
主与主之间还要进行设置主备:
命令同主从之间的设置,执行命令
CHANGE MASTER to MASTER_HOST='另一台主的ip地址',
MASTER_USER='主给从访问的用户名',
MASTER_PASSWORD='主给从访问的密码',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=134;
执行后在主上执行:start slave;
通过在主数据库上show slave status;查看io及sql执行状态。
另外一台主作为这台主的从设置同上述执行命令。
到此,数据库之间的双主双从设置完毕了。
下面配置mycat了:
修改schema.xml
//schema name 对应server中配置的schema name dataNode 对应下面dataNode的name
//database为物理数据库 dataHost和下面dataHost节点name保持一致
select user()
//第一个写主机的地址 用户名 及密码
//第一个读主机的地址 用户名 及密码
//第二个写主机的地址 用户名 及密码
//第二个读主机的地址 用户名 及密码
//balance设置为1
//dataHost中 balance的值设置不同的值,读写负载也不同
//balance:0 读操作都在写库中
//balance:1 当有多主多从的时候,主之间互为主从,mater1->slave1 master2->slave2 master1和master2互为主备,select会在slave1 master2 slave2随机调用
//balance:2 所有读操作将会在所有数据库中随机执行
//balance:3 所有读操作将会在所有读数据库中执行
//一般使用1或者3,1单主单从 3 多主多从
//writeType 为0表示写操作将会在第一个writeHost中进行,如果第一个writeHost挂掉了,将会在第二个writeHost中进行
为1表示随机在两个writeHost中进行,不要使用要被弃用了
//switchType 1表示自动切换 推荐使用
-1表示不自动切换
2基于mysql主从同步状态切换
在/usr/local/mycat/bin目录下:重启mycat服务 ./mycat console
5.mycat实现垂直分库
修改schema.xml文件
//testdb schema默认dataNode 为dn1 默认访问主库maindb
//设置customer dataNode 为dn2 dn2中指定的数据库为customerdb
//database为物理数据库 dataHost和下面dataHost节点name保持一致
//垂直分库
select user() //只有主库,balance设置为0
select user() //只有主库,balance设置为0
6.水平分表
。。。