MyCAT 核心作用
MyCAT 是一款基于 MySQL 协议的开源分布式数据库中间件,核心定位为 “数据库代理”,主要解决单库单表性能瓶颈、数据量过载、高并发访问等问题,对应用端透明(无需大幅改造应用即可接入),是分布式数据库架构的核心组件,核心作用如下:
1. 分库分表(数据分片)—— 核心核心能力
当单 MySQL 数据库数据量达到千万 / 亿级、或并发压力过高时,单库性能急剧下降。MyCAT 支持:
- 水平分片:按行拆分数据(如按用户 ID、时间范围、地区等维度),将海量数据分散到多个物理数据库节点;
- 垂直分片:按业务模块 / 列拆分(如订单表、用户表分至不同库);
- 自动处理分片路由、跨分片聚合查询(如跨节点 count/sum 计算),突破单库存储和性能上限。
2. 读写分离
针对 “读多写少” 的业务场同时可配置主从数据同步策略,保障数据一致性。景,MyCAT 可将写操作(insert/update/delete)路由到主库,读操作(select)分发到多个从库,实现读写请求分流,提升整体并发处理能力,
3. 负载均衡
对分片后的多数据库节点、读写分离的从库节点实现请求负载均衡,避免单个节点因请求过载宕机,提升数据库集群的可用性和稳定性。
4. 故障自动切换
内置数据库节点健康检测机制,当主库 / 从库节点故障时,MyCAT 可自动将请求路由到备用节点,实现故障 “无感切换”,减少业务中断时间,提升系统高可用。
5. 统一数据访问入口
对应用端屏蔽底层分布式数据库的复杂架构,应用只需连接 MyCAT 一个入口,即可访问分散在多个节点的分片数据,无需关注数据物理存储位置,降低应用开发和维护成本。
6. 权限与安全管控
集中管理数据库访问权限,细粒度控制不同应用对不同分片数据的读写权限,避免直接暴露底层数据库节点,提升数据安全;同时支持 SQL 拦截、优化,降低非法 / 低效 SQL 对集群的影响。
适用场景
广泛应用于电商、金融、政务、互联网等数据量大、高并发的业务系统,也可适配国产化数据库生态(如结合达梦、人大金仓等国产数据库实现分布式部署)。
用到了mycat中间件,gtid主从复制
读写分离步骤
【mycat】vim /etc/my.cnf关闭binlog日志
【mycat】解压jdk-8u压缩包到/usr/local目录下
【mycat】解压Mycatserver压缩包到/usr/local目录下
【mycat】/usr/local目录下使用vim编辑/etc/profile
【mycat】source重新加载/etc/profile
【mycat】检查Java版本
【mycat】到/usr/local/mycat木录下开启mycat
【写主机】进入本机mysql
【写主机】grant授权让mycat主机能登录写主机数据库
【写主机】刷新授权
【写主机】创建一个实体数据库
【读主机】进入本机MySQL
【读主机】grant授权让所有主机能登录读主机数据库
【读主机】刷新授权
【读主机】创建实体库
【mycat】回到mycat机器
【mycat】进入/usr/local/mycat/conf,找到.server.xml,schema.xml,备份
【mycat】vim编辑server.xml
【mycat】vim编辑schema.xml
【mycat】pkill -9杀死Java有关的进程
【mycat】重启mycat /usr/local/mycat/bin/mycat,查看8066端口是否运行
【mycat】登录mycat数据库,验证虚拟数据库是否存在
主从复制步骤(gtid方式)
【主】配置域名解析
【主】配置/etc/my.cnf
【主】创建目录:/var/log/mysqld,更改目录权限
【主】重启mysqld服务
【主】进入数据库,授权某个用户主从复制的权限
【主】刷新授权
【从】配置/etc/my.cnf
【从】重启mysqld服务
【从】进入数据库做change master主从复制权限
【从】开启slave
【从】查看slave状态有没有双yes
前提条件
centos7操作系统,三台部署MySQL5.7的机器,mycat机器,写机器,读机器
Mycat机器:
[root@mycat ~]# vim /etc/my.cnf #关闭binlog日志,log-bin=/var/log/mysql/mysql-bin注释掉 [root@mycat ~]# tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local #解压jdk文件 [root@mycat ~]# cd /usr/local/ [root@mycat local]# ls jdk1.8.0_211/bin/ |grep java [root@mycat local]# vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8.0_211/bin export PATH=$PATH:/usr/local/jdk1.8.0_211/bin [root@mycat local]# source /etc/profile #重新加载 /etc/profile 配置文件 [root@mycat local]java -version [root@mycat ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/ [root@mycat ~]# cd /usr/local/mycat [root@mycat mycat]# /usr/local/mycat/bin/mycat start写主机
[root@write ~]# mysql -pst #登录数据库 mysql> grant all on testdb.* to xie@'%' identified by 'xie@123'; #只能让mycat主机登录,%写成IP地址 mysql> flush privileges; mysql> create database testdb;读主机
登录本机数据库 mysql> grant all on testdb.* to du@'%' identified by 'Du@123'; mysql> flush privileges; mysql> create database testdb;mycat主机
[root@mycat mycat]# cd conf [root@mycat conf]# ls #查看是否有server.xml和schema.xml [root@mycat conf]# cp server.xml server.xml.bak [root@mycat conf]# cp schema.xml schema.xml.bak [root@mycat conf]# vim server.xml[root@mycat conf]# vim schema.xml[root@mycat conf]# pkill -9 java [root@mycat conf]# /usr/local/mycat/bin/mycat start [root@mycat conf]# ss -tanlp | grep 8066 #查看8066端口是否启用 [root@mycat conf]# mysql -h 192.168.200.30 -u root -p123456 -P 8066 #登录Mycat用户的数据库(虚拟数据库) 查看数据库,尝试使用数据库,查看的快了就是成功了,查看的延迟三十秒左右就是失败了此时,mycat主机创建一个表,写主机也会同步出一个表
接下来做复制
写主机
vim /etc/hosts #配置域名解析[root@read ~]# vim /etc/my.cnf #设置数据库的主从复制mkdir /var/log/mysqld #创建log-bin的目录 chown -R mysql.mysql /var/log/mysqld #更改目录属于mysql [root@read ~]# systemctl restart mysqld mysql -pstp mysql> grant replication slave on *.* to alan@"%" identified by 'alan'; #创建一个名为 alan 的数据库用户,并授予该用户进行主从复制(replication)的权限 mysql> flush privileges; #刷新权限读主机
[root@read ~]# vim /etc/my.cnf #做slave配置[root@read ~]# systemctl restart mysqld [root@read ~]# mysql -pst [root@read ~]\emysql> start slave; mysql> show slave status\G #显示出两个yes Slave_IO_Running: Yes Slave_SQL_Running: Yes最后,在Mycat机器上创建一个数据表,写主机和读主机都会同步出来,成功