• 06-分布式中间件-Mycat-ShardingJDBC


    1.Mycat

    目录

    • 一 入门
    • 1.1什么是Mycat,为什么用Mycat
    • 1.2干什么的(读写分离,数据分片,多数据源整合)
    • 二 安装 启动
    • 2.1安装
    • 2.2启动
    • 2.3登录
    • 三 搭建读写分离
    • 3.1一主一从
    • 3.2双主双从
    • 四 垂直拆分
    • 4.1如何划分表
    • 4.2配置分库
    • 五 水平拆分
    • 5.1配置分表
    • 六 网友总结笔记地址:
      https://blog.csdn.net/qq_41143671/article/details/112960048

      一 入门

      1.1什么是Mycat,为什么用Mycat

      mycat是数据库中间件

      2.为什么要用Mycat?

      类似nignx,java应用只需要连接Mycat,多数据库的配置等都交给Mycat处理

      还可以搞3(多)个数据库,2个读,1个写。

    •  

       1.2干什么的

      1.2.1Mycat的读写分离的架构:

    Mycat的

    一主一从 到 双主双从

    为了保证数据库的挂了时候还有备份数据,这就是Mycat的高可用

     1.2.2数据库的分布式:一般垂直拆分(分库)水平拆分(分表)结合使用:

    分库:db1,db2,db3就是分库,3个库存不同的表

    分表:当一个表的数据是千万级别的然后这个表就需要分表了

     单张表的查询瓶颈:70w

    1.2.3mycat的多数据源的整合:

    1.可以整合数据库集群

    2.可以整合mysql,Oracle db2 等关系型数据库

    3.非关系型数据库

     1.3mycat的原理

    mycat拦截用户发来的sql

    解析SQL

    分片分析

    路由分析

    读写分离分析

    缓存分析

    最后再将此SQL发送到真实的数据库,处理返回结果,返回给用户。

     第二章 安装 启动

    在linux环境下安装

    安装方式:

    1. rpm安装

    .rpm安装包,按顺序安装

    2.yum方式

    需要联网

    3.解压后就可以使用

    4.解压后编译安装

    2.1安装

    linux

    opt/:主要放安装包 的目录

    /usr/local: 软件安装的目录

    cd: 进入指定目录

    cd ../ :到上一级目录

    rz : 上传文件(从window上传文件到服务器)

    tar -zxvf: 解压压缩包

    解释:

    linux命令的 - 后面有多个字母代表有多个参数

    z: 压缩文件是.tar.gz结尾的,所以用tar命令 -z进行筛选

    x: 进行解压操作

    v: 显示信息

    f: 指定是哪个需要解压的文件

    cp 文件名 路径: 拷贝文件,将某个文件拷贝到指定目录下

    cp -r:递归拷贝文件夹和其里面的文件

    mycat的目录:

    bin: 存放可执行的文件,启动等小关的命令都在bin里面

    logs: 存放日志的

    conf: 存放配置信息的

    (1)schema.xml: 定义逻辑库、表、分片节点等内容

     

    (2)rule.xml: 定义分片规则(水平拆分的规则都在里面定义)

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

    安装完之后需要修改mycat的配置文件:

    2.11.修改配置文件server.xml

    1. 1-vim server.xml: 进入到server.xml文件
    2. 2-i:光标停在user name 的地方按 i即可以进入编辑模式,将root 改为 mycat
    3. 3-esc:切换到一般模式下
    4. 4-shift + ::切换到 : 模式下
    5. 5-wq: w保存 q 退出

    修改前的配置文件:

    1. 这是mycat里面的用户名(修改用户信息配置,和mysql的root用户区别开)
    2. 将username改为mycat
    3. <user name="root">
    4. <property name="password">123456property>
    5. 这是mycat 对应于Java程序的唯一的逻辑库
    6. mycat的逻辑库其实对应的是多个真实的数据库
    7. <property name="schemas">TESTDBproperty>
    8. <property name="readOnly">trueproperty>
    9. user>

     

     2.12.修改配置文件schema.xml

    命令步骤

    1. 1-vim schema.xml: 进入到schema.xml文件
    2. 里面的schema是逻辑库,其余的table是真实的物理表
    3. 2-:set nu:显示行号
    4. 删除多行测试库,留下我们本地存在的表就行
    5. 3-d 27 d: 移动到schema的下面一行,将其间的26行记录删除
    6. 4-shift + :schema是逻辑库,给它添加上数据节点 dataNode="dn1" 如下:
    7. <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"
    8. dataNode="dn1">
    9. schema>
    10. 5-dd:将注释掉的和多余的数据节点删除掉 dd 删除一行
    11. 5-wq: w保存 q 退出

     

     

     

     

     2.1.3验证数据库的访问情况

    mycat后面连接的多个数据库,都是远程访问的方式,访问数据库的

    所以mycat的配置文件修改完之后,需要验证一下远程数据库是否能访问到

    1. mysql -uroot -p123123 :本地访问方式
    2. mysql -uroot -p123123 -h 192.168.140.127 -P 3306 :远程访问方式
    3. mysql -uroot -p123123 -h 192.168.140.128 -P 3306 :远程访问方式

     

    2.2启动

    linux下面6个特殊的目录:

    linux下面的命令在6个目录下面都可以随意执行,不需要加./

    其余目录不行

    1. bin
    2. user/bin
    3. usr/local/bin
    4. sbin
    5. user/sbin
    6. usr/local/bin

    etc:linux下面放配置文件的目录

    1.控制台启动:去 mycat/bin 目录下执行 ./mycat console

    2.后台启动:去 mycat/bin 目录下执行 ./mycat start

    为了第一时间看到启动日志,方便定位问题,我们采用第1种控制台方式启动

    2.3

    1.登录后台管理窗口(9066)

     1.登录数据窗口(8066)

     第3章 搭建读写分离

     3.1一主一从

    redis的主从复制(全量复制):

    1. 1.小弟从机 访问 大哥主机
    2. 2.大哥主机 将内存中的所有文件写入到 rdb 持久化文件中
    3. 3.大哥主机将rdb文件传递给 小弟从机
    4. 4.小弟从机 将大哥主机的rdb文件替换自己的rdb文件
    5. 5.再把rdb文件读回到自己本身

     mysql的主从复制(增量复制):

    1. 1.mysql的主机会将自己的数据写到日志文件,Binarylog
    2. 2.从机不能直接访问主机,是去读取主机的Binarylog日志
    3. 3.读到Binarylog日志后,不是直接执行里面的sql,而是将其写到Relaylog 中继日志里面
    4. 4.最后再将Relaylog 的sql到从机的数据库中去执行

    redis和mysql的相同不同点;

    同:

    2者都是主机只有一台,从机可以有多台

    不同:

    1. redis:是从头开始复制
    2. mysql:是从接入点开始复制,主机发生的事情,从机不关心,
    3. 从机只是从接入点Binarylog日志文件里面读取 sql

    思考存在的问题:

    1. mysql:在Binarylog 和 Relaylog 2个地方都会发生IO,
    2. 多次io会导致主从复制会存在延时性问题

     3.1.1安装mysql:

    地址:

    https://blog.csdn.net/lch520baby/article/details/89081306?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162236755816780269889862%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162236755816780269889862&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-6-89081306.pc_search_result_before_js&utm_term=%E5%9C%A8Linux%E4%B8%8B%E5%AE%89%E8%A3%85MySQL&spm=1018.2226.3001.4187

    1.mysql官网下载 mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

    下载地址:

    1. 2.1下载的mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz上传到linux服务器的/opt/mysql目录下面

    2.1下载的mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz上传到linux服务器的/opt/mysql目录下面

    2.2解压压缩包:tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

    2.3重命名 

    mv mysql-5.7.25-linux-glibc2.12-x86_64 mysql-5.7.25

    3.1/usr/local目录下面 新建 mysql文件夹

    3.2将 mysql-5.7.25移动到 /usr/local/目录下面

    MV mysql-5.7.25 /usr/local/touch

    使用rmdir删除目录

    使用rm命令删除目录

    rm命令通常用于删除Linux中的文件。可以添加参数用来删除目录。例如,递归地删除目录,使用递归选项-r或-R,如果目录是受写保护的,则会提示是否继续删除目录和目录中的文件作为一个整体。-f 强制删除而不被提示。

    [root@localhost test]# rm -rf MyDocuments

    看日志,查看初始密码:

    A temporary password is generated for root@localhost: rI,sfGr=I89q

    登录mysql,密码为初始密码

    1. cd /opt/mysql/mysql-5.7.25
    2. ./bin/mysql -u root -p rI,sfGr=I89q

    修改密码

    1. mysql> set password=password('123456');
    2. mysql> grant all privileges on *.* to root@'%' identified by '123456';
    3. mysql> flush privileges;

    添加远程访问权限 

    1. mysql> use mysql;
    2. mysql> update user set host='%' where user = 'root';
    3. mysql> flush privileges;

    重启mysql生效

    1. service mysql stop;
    2. service mysql start;
    3. service mysql restart;

    1、查看是在否运行

    systemctl status mysqld.service

    2、启动该 mysql 服务

     systemctl start mysqld.service 

    3.停止mysql命令:

    systemctl stop mysqld

    linux下怎么查看mysql密码是什么,linux下mysql忘记密码怎么办

    教程:

    https://blog.csdn.net/weixin_42175035/article/details/116692434?ops_request_misc=&request_id=&biz_id=102&utm_term=linux%E6%9F%A5%E7%9C%8Bmysql%E7%9A%84%E5%AF%86%E7%A0%81&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-.pc_search_result_before_js&spm=1018.2226.3001.4187

    3.1.2 主从的搭建:

    1.主机配置

    1. # 主服务器唯一 ID
    2. server-id=1
    3. # 启用二进制日志
    4. log-bin=mysql-bin
    5. # 设置不要复制的数据库
    6. binlog-ignore-db=mysql
    7. binlog-ignore-db=infomation_schema
    8. # 设置需要复制的数据库
    9. binlog-do-db=test
    10. # 设置 logbin 格式
    11. binlog_format=STATEMENT

    2.配置binlog中继日志

    3.给从机分配用户,只给从机读取binlog日志的权限

    4.确认主机的防火墙关闭

    5.配置好需要同步的表,和不需要同步的表

     3.2 双主双从

    3.2.1 双主双从的搭建

    show slave status\G:用列的方式展示从机

    3.2.2 双主双从的读写分离

    第四章 垂直拆分-分库

    4.1如何划分表

    4.2实现分库

    yy:复制一行

    第五章 水平拆分-分表

    5.1实现分表

    注意:

    使用Mycat分表的时候,插入数据,必须要写明分片的字段,这样mycat才能够识别到

    在mycat中查询数据的时候:select * from order;

    返回结果是:

    3,4,5

    1,2,6

    因为mycat识别到order是分表的,于是将sql: select * from order 发送给2个表,2个表的查询结果再返回给mycat,mycat再汇总数据,返回给你。

    如果想要排序:select * from order order by 字段 ,就可以排序

    5.2Mycat的分片join

    5.3常用分片规则

    5.3.1.具体字段取模

    5.3.2.分片枚举

    5.3.3.范围约定

    根据字段值的范围,分到指定的表

    5.3.4按日期(天)划分

    5.4全局序列

    5.4.1本地文件

    5.4.2数据库方式

    5.4.3时间戳方式

     

    第六章 基于HA机制的Mycat高可用

    6.1高可用方案 

    1. uname -r :查看linux的内核版本
    2. mkdir -p : 创建多级目录
    3. set nu :显示行号
    4. shift g:跳到最后一行
    5. 1 shift g:回到第一行
    6. set nonu:去掉行号

    linux查看主机的网卡:

    netstat -ant | grep 8082: 查看端口号的占用情况

    2. Sharding-JDBC

    开源分布式数据库中间件方案-Apache ShardingSphere

    Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和Sidecar(规划中)

    ShardingSphere-JDBC 是 Apache ShardingSphere 的第一个产品,也是 Apache ShardingSphere 的前身。定位为轻量级

    Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依

    1.适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。

    2.支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。

    3.支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。

     刚开始学习了一下,后面没学了,后面项目中有用到再学一下,补充一下文档吧。

     

  • 相关阅读:
    使用基于Web的交互式开发工具Zeppelin
    【openGauss/MogDB的TPCH测试】
    手把手教你搭建python+selenium自动化环境
    百数不断创新,打造自由的低代码办公工具
    2024最新版本FL Studio21水果编曲软件破解版激活许可证
    基于sklearn的集成学习实战
    unbuntu下安装gfortran
    如何使用Stable Diffusion生成艺术二维码?
    OpenCV视频防抖技术解析
    开仓风险计算器.xlsx(可计算:名义价值、最大资金亏损、开仓所需保证金、开仓资金杠杆、最小逐仓保证金、U本位需开张数、币本位需开张数)
  • 原文地址:https://blog.csdn.net/liumangtutu2919/article/details/126941847