# mycat-encrypt-server
**Repository Path**: xiaoyis/mycat-encrypt-server
## Basic Information
- **Project Name**: mycat-encrypt-server
- **Description**: 基于 mycat 改造的数据库代理透明加密中间件,支持所有 mycat 已有的功能,在原来的代码基础上做了优化,修复了 mycat 存在的一些bug,支持 mysql8;添加了透明加解密功能模块,可对数据库进行列级别的加密存储,对应用无感知,无需修改业务代码。
- **Primary Language**: Java
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 27
- **Created**: 2025-01-13
- **Last Updated**: 2025-01-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 介绍
本中间件在 mycat 源码基础上进行了优化和改造,支持数据库列级别的透明加解密,兼容 mysql8。
支持 mysql 原生协议,支持在配置文件中以 jdbc 驱动的方式连接其他类型数据库,但并不推荐,mycat 是 mysql 最佳伴侣,其他数据库可能存在诸多不稳定因素。
本中间件的用法跟 mycat 基本一致,在原来的基础上添加了配置文件 encrypt.xml 用于加密的相关配置,server.xml 里增加了几个加密的属性。
这里着重介绍一下具体用法和加密部分的配置,其他部分的配置可参考 mycat,另外,分库分表不在万不得已不要轻易使用,mycat 的分库分表是一个伪分布式数据库,日后如果要扩充节点调整规则会十分麻烦,其实大部分公司也只用了它的读写分离功能。
关注公众号 **螺旋编程极客** ,可进群一起探讨,共同学习进步,同时可领取海量学习资源。

## 安装
下载 release 压缩包,直接解压即可。
[v1.6.7.8-release下载](https://gitee.com/zrxjava/mycat-encrypt-server/releases/v1.6.7.8-release)
## 运行
### linux
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态
### win
直接运行startup_nowrap.bat,如果出现闪退,在cmd 命令行运行,查看出错原因。
## 内存配置
打开 conf/wrapper.conf 文件,可以调整 jvm 的相关参数。
## 连接测试
测试 mycat 与测试 mysql 完全一致,mysql 怎么连接,mycat 就怎么连接。
mycat 的默认服务端口为 8066: mysql -u 用户名 -P 8066 -p 密码,程序或 navicat 等工具连接使用此端口
mycat 的默认管理端口为 9066: mysql -u 用户名 -P 9066 -p 密码,配合 [mycat-encrypt-web](https://gitee.com/zrxjava/mycat-encrypt-web) 用于监控管理,常用指令如 show @@sql,show @@sql.slow,show @@sql.high 等
mycat 完全支持 mysql5.7,目前市面上的主流 mysql 版本仍然是 5.7,包括分布式数据库 TiDB 也是对 mysql5.7 进行适配。
如果要使用 mysql8.0,需要把用户的密码认证插件设置为 mysql_native_password,
对已经创建过的用户执行命令:
```mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
```
修改 my.cnf 配置文件,之后创建的用户将默认使用 mysql_native_password:
```mysql
[mysqld]
default_authentication_plugin=mysql_native_password
```
## 配置说明
--bin 启动目录
--conf 配置目录存放配置文件:
--server.xml:是Mycat服务器参数调整和用户授权的配置文件。
--schema.xml:是逻辑库定义和表以及分片定义的配置文件。
--encrypt.xml 是加密指定库,表,字段的配置文件(新添加的模块)。
--rule.xml: 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT。
--log4j.xml: 日志存放在logs/log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要可以调整输出级别为debug debug级别下,会输出更多的信息,方便排查问题。
--autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相关的id分片规则配置文件
--lib MyCAT自身的jar包或依赖的jar包的存放目录。
--logs MyCAT日志的存放目录。日志存放在logs/log中,每天一个文件
## 逻辑库配置
### 编辑schema.xml
schema 是实际逻辑库的配置,可配置多个
dataNode 是逻辑库对应的分片
dataHost 是实际的物理库配置地址,可以配置多主主从等其他配置,多个 dataHost 代表分片对应的物理库地址,下面的 writeHost、readHost 代表该分片是否配置多写,主从,读写分离等高级特性。
**balance 属性**
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双
主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
均衡。
3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
**writeType 属性**
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,
重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
**switchType 属性**
-1 表示不自动切换
1 默认值,自动切换
2 基于 MySQL 主从同步的状态决定是否切换
心跳语句为 show slave status
3 基于 MySQL galary cluster 的切换机制(适合集群)
心跳语句为 show status like ‘wsrep%’
```xml
select user()
```
### 配置server.xml
添加mycat逻辑库:test(多个用逗号隔开)
use 可配置多个,实现多租户。
```xml
123456
test
```
新增加密相关属性:
```xml
1
1
1
12345678ABCDEFGH
```
## 加密配置
### 编辑 encrypt.xml
```xml
```
### 自定义加密算法
如果要自定义加密算法,下载源码包 [mycat-encrypt-customize](https://gitee.com/zrxjava/mycat-encrypt-customize) 自行实现 encode 和 decode 方法,打包替换 lib 下的 encrypt-core-2.0.jar 即可
### 手动解密
如果要恢复已经加密的数据,可以下载解密工具包,使用方法跟 mycat 一致,配置好 decrypt.xml 即可自动解密,解密完毕后程序会自动退出。
[下载解密工具](https://gitee.com/zrxjava/mycat-decrypt/releases/v1.6.7.6-release)
关注公众号 **螺旋编程极客** ,可进群一起探讨,共同学习进步,同时可领取海量学习资源。
