目录
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">123456property>
- 这是mycat 对应于Java程序的唯一的逻辑库
- mycat的逻辑库其实对应的是多个真实的数据库
- <property name="schemas">TESTDBproperty>
- <property name="readOnly">trueproperty>
- 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: 查看端口号的占用情况
开源分布式数据库中间件方案-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 标准的数据库。
刚开始学习了一下,后面没学了,后面项目中有用到再学一下,补充一下文档吧。