MyCat分库分表、读写分离

739 阅读2分钟

为什么需要使用mycat?

当随着系统数据量指数级增长后,数据库可能会出现宕机的情况。为了防止这种情况的发生,我们采用mysql的主从复制为基础,mycat实现分库分表保存数据,读写分离减轻主数据库的负载。

mysql主从复制

原理


一共由三个线程完成

  1. 主服务将数据的更新记录保存到二进制日志--主服务器进程
  2. 从服务将主服务的二进制日志复制到本地中继日志--从服务IO进程
  3. 从服务读取中继日志,更新本地数据--从服务SQL进程

配置主服务器

打开配置文件vi /etc/my.cnf

[mysqld]

 log-bin=mysql-bin #开启二进制日志 

 server-id=1 #设置server-id,必须唯一 复制

# 创建从服务用户 

create user 'user'@'10.168.1.249' identified by 'password'; 

 # 授权,只授予复制和客户端访问权限 

grant replication slave on *.* to 'user'@'10.168.1.249';#分配权限

# 查看主服务状态

show master status


配置从服务器

打开配置文件vi /etc/my.cnf

[mysqld]

server-id=2 #设置server-id,必须唯一 复制

#执行复制主服务器语句


#启动从服务器同步进程

start slave

#查看slave状态


当Slave_IO_Running与Slave_SQL_Running都为yes时,复制同步成功。

异常情况处理:

  1. Slave_IO_Running为NO表示无法正常连接主服务器,检查用户名及密码
  2. Slave_SQL_Running为NO一般由事务回滚造成,按以下步骤解决:
  • stop slave
  • set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
  • start slave

mycat配置

# Java Application 配置jdk

wrapper.java.command=/lib/jvm/bin/java 

wrapper.working.dir=.. 


server.xml 中定义用户以及系统相关变量,如端口等


以上定义一个用户,用户名为root,密码为qwer~!@#,可访问的schema为test_schema一个逻辑库。


schema.xml 中定义逻辑库,表、分片节点等内容


schema标签,划分不同的逻辑库

dataNode标签,用于绑定逻辑库某个具体的database

balance属性:

负载均衡类型,目前的取值有 4 种:

  1. balance=0,不开启读写分离机制,所有读操作都发送到当前可用的 write Host 上
  2. balance=1,所有读操作都随机发送到当前的writeHost对应的readHost和备用的writeHost
  3. balance=2,所有的读操作都随机发送到所有的writeHost,readHost上
  4. balance=3,所有的读操作都只发送到writeHost的readHost上

writeType属性:

  1. writeType=0,所有写操作发送到配置的第一个 write Host
  2. writeType=1,所有写操作都随机的发送到配置的 write Host

rule.xml 中定义分片规则

启动mycat

/usr/local/mycat/bin 

./mycat start

服务端口:8066

客户端端口:9066