mysql数据库-中间件MyCat

1. MyCat****简介

在整个 IT 系统架构中,数据库是非常重要,通常又是访问压力较大的一个服务,除了在程序开发的本身做优化,如: SQL 语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。
Mycat 是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理(类似于 Mysql Proxy ),用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。

2. Mycat****特点

官方网站 http://www.mycat.org.cn/
Mycat 不适合的应用场景

  • 设计使用 Mycat 时有非分片字段查询
  • 设计使用 Mycat 时有分页排序
  • 设计使用 Mycat 时如果要进行表 JOIN 操作,要确保表的关联字段具有相同的数据分布,否则请慎重使用 Mycat ,可以考虑放弃!
  • 设计使用 Mycat 时如果有分布式事务,得先看是否得保证事务得强一致性,否则请慎重使用 Mycat ,可以考虑放弃!

3. Mycat****实践

mycat 是基于 java 语言开发,先要安装 java 环境 不要安装过高版本的 java 版本,否则会发生报错

root @rocky9-18 \~ \] # yum install java-1.8.0-openjdk 软件获取 \[root @rocky9-18 \~ \] # wget **由于限制下载不了 我这里用之前已经下载好的包安装** \[root @rocky9-18 \~ \] # mkdir /data/softs -p \[root @rocky9-18 \~ \] # cd /data/softs/ \[root @rocky9-18 softs\] # ls # 解压 \[root @rocky9-18 \~ \] # mkdir /apps \[root @rocky9-18 \~ \] # tar xf /data/softs/Mycat-server-1.6.7.6-release-20220524173810-linux.tar.gz -C /apps/ 定制环境变量 # 写 path \[root@rocky9-18 \~\] # vim /etc/profile.d/mycat.sh 增加内容: PATH = /apps/mycat/bin: $PATH \[root@rocky9-18 \~\] # source /etc/profile.d/mycat.sh \[root @rocky9-18 \~ \] # mycat start #启动Mycat服务 \[root @rocky9-18 \~ \] # mycat status # 查看运行状态 Mycat-server is running (2497). \[root @rocky9-18 \~ \] # netstat -tnulp \| grep java ![](https://i-blog.csdnimg.cn/direct/08c3f5d9eb0e436c8291ec6561c179d1.png) \[root @rocky9-18 \~ \] # cat /apps/mycat/conf/**server.xml** # 查看默认用户名和密码端口等信息 ![](https://i-blog.csdnimg.cn/direct/a4767f347ca744369a628e994120db31.png) ![](https://i-blog.csdnimg.cn/direct/fb8e5833fd1441238fd881f82d360ec9.png) \[root @rocky9-18 \~ \] # **mysql -uroot -p123456 -h 127.0.0.1 -P8066** #连接mycat ## **4. 读写分离架构解读** 主机:10.0.0.18 角色:mycat 主机:10.0.0.12 角色:master 8.0.41版本 主机:10.0.0.15 角色:slave 8.0.41版本 ## **5. 配置****MySQL****主从环境** **详见本课题的主从复制 略** **6. 配置** **Mycat** **连接账号** 在 master 节点上创建账号并授权,该帐号会被同步到 slave 节点 mysql\> create user 'mycater' @ '10.0.0.%' IDENTIFIED BY '123456' ; mysql\> GRANT ALL ON db1.\* TO 'mycater' @ '10.0.0.%' ; mysql\> flush privileges; 修改 server.xml **配置 mycat 连接后端数据库的账号密码** 直接将下面内容,覆盖到指定文件即可 \[root @rocky9-18 mycat\] # vim /apps/mycat/conf/server.xml 1 3306 123456 db1 db1 注意: 该文件中,不允许出现 # 之类的注释信息 修改 schema.xml **实现读写分离策略** \[root @rocky9-18 mycat\] # vim /apps/mycat/conf/schema.xml select user(); 注意: 如果出现多个从节点,那么都以 readHost 的样式来进行配置 \[root @rocky9-18 \~ \] # mycat restart # 重启 mycat 服务 \[root @rocky9-18 \~ \] # mycat status #Mycat-server is running (3654). 表示运行成功 **验证读写分离** , 分别在 **master** **和** **slave** 节点上开启通用日志 \[root @rocky9-12 \~ \] # vim /etc/my.cnf.d/mysql-server.cnf #里面加上 **general_log** \[root @rocky9-12 \~ \] # systemctl restart mysqld.service 重启 mysql 服务 (slave配置一样 略) 查看通用日志 , master, slave 节点都有 , 文件名与机名同名 \[root @rocky9-12 \~ \] # tail -f /var/lib/mysql/rocky9-12.log \[root @rocky9-15 \~ \] # tail -f /var/lib/mysql/rocky9-15.log 注意:每 10 S 一次,这是配置在 schema.xml 中的 heartbeat ,用于心跳检测,判断后端 mysql 服务是否在线 可以发现 在mycat客户端上执行创建(写)的命令 就会在master节点日志上出现 可以发现 在mycat客户端上执行查看(读)的命令 就会在slave节点日志上出现 关闭 mycat 的服务 \[root @rocky9-18 \~ \] # mycat stop Stopping Mycat-server .. . Stopped Mycat-server.

相关推荐
码农小站1 小时前
ClickHouse 时间范围查询:精准筛选「本月数据」
数据库
paopaokaka_luck1 小时前
基于SpringBoot+Vue的非遗文化传承管理系统(websocket即时通讯、协同过滤算法、支付宝沙盒支付、可分享链接、功能量非常大)
java·数据库·vue.js·spring boot·后端·spring·小程序
小疯仔2 小时前
navicat导出数据库的表结构
数据库
TOSUN同星2 小时前
干货分享 | TSMaster DBC编辑器操作指南:功能详解+实战示例
数据库·oracle·编辑器·汽车·软件工程
huihui4503 小时前
一天一道Sql题(day01)
数据库
~尼卡~3 小时前
软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制
数据库·软件设计师-软考
八九燕来3 小时前
Django双下划线查询
数据库·django·sqlite
眠りたいです4 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
paopaokaka_luck4 小时前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
M1A14 小时前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql