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

修改前的配置文件:

   
 这是mycat里面的用户名(修改用户信息配置,和mysql的root用户区别开)
 将username改为mycat
 <user name="root">
     <property name="password">123456</property>
     这是mycat 对应于Java程序的唯一的逻辑库
     mycat的逻辑库其实对应的是多个真实的数据库
     <property name="schemas">TESTDB</property>
     <property name="readOnly">true</property>
 </user>

 

 2.12.修改配置文件schema.xml

命令步骤

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

5-wq: w保存 q 退出

 

 

 

 

 2.1.3验证数据库的访问情况

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

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

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

 

2.2启动

linux下面6个特殊的目录:

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

其余目录不行

bin
user/bin
usr/local/bin
sbin
user/sbin
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.小弟从机 访问 大哥主机
2.大哥主机 将内存中的所有文件写入到 rdb 持久化文件中
3.大哥主机将rdb文件传递给 小弟从机
4.小弟从机 将大哥主机的rdb文件替换自己的rdb文件
5.再把rdb文件读回到自己本身

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

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

redis和mysql的相同不同点;

同:

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

不同:

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

思考存在的问题:

mysql:在Binarylog 和 Relaylog 2个地方都会发生IO,
        多次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

下载地址:


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,密码为初始密码

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

修改密码

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

添加远程访问权限 

mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;

重启mysql生效

service mysql stop;
service mysql start;
或
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.主机配置

# 主服务器唯一 ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
# 设置需要复制的数据库
binlog-do-db=test
# 设置 logbin 格式
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高可用方案 

uname -r :查看linux的内核版本
mkdir -p : 创建多级目录
set nu :显示行号
shift g:跳到最后一行
1 shift g:回到第一行
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 标准的数据库。

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值