开发一个简单的mysql代理

创建一个最简单的mysql代理 先介绍一个开源第三方库 关于go module 环境: export GO111MODULE=on export GOPROXY=https://goproxy.io/ 在go module 环境下 go get -u github.com/siddontang/go-mysql 注意:这不是一个纯mysql驱动,而是包含了mysql协议解析、复制(mysql replication)和类似j... 阅读详情

首先说明一下,本文不是介绍大名鼎鼎的那个mysql proxy,我做的这个应该是mysql客户端的代理。

 首先说明一下背景,公司有一台数据库服务器,但是由于安全的需要,只对几个ip作了授权,其他的机器不能连接上。

如下图所示:

网络结构示意图 

 

 

现在有个工具开发需求,需要从每个人的工作pc上访问DB Server,由于不能直连,就在授权pc上做了一个mysql的代理。代理是一个小型的server,采用多进程的模式,用于接收工作pc上客户端的连接,并执行客户端的请求,然后发送结果给客户端。其实这和mysqlclient功能很像。

首先定义和网络交互的包

请求包:

typedef struct __RequestMsg
{
 int type;
 int dataLen;
 char data[1];
}RequestMsg;

其中type表示请求执行的类型,一般来说,数据库访问可以分为两个类型,一种是需要返回结果集的,如select,一种是不需要返回结果集,只需要指明操作是否成功的,如insert,delete,update等。type就是指明这种请求的类型。

dataLen用于指明data数据的长度。data数据中存储的内容,根据type不同有不同的含义。

响应包:

typedef struct __Row
{
 int fieldNum;
 char data[1];
}Row;

typedef struct __ResponseMsg
{
 int bSuccess;
 int errCode;
 int rowNum;
 int dataLen;
 char data[1];
}ResponseMsg;

 

相应包主要是为了返回select的内容而设计的。其中fieldNum指明了结果集中field的个数,bSuccess表示操作是否成功,errCode表示如果出错的错误码。rowNum表示结果集中的行数,dataLen表示结果集的缓冲区长度,data存放具体的结果数据。当然,如果执行的是insert等不需要返回结果的操作,data为空。

同事提供两个api:

typedef map<string,string> mapString;

int getAll(ResponseMsg* res,vector<mapString>& vecMapStr);

int fmtMsg(vector<string> fieldList,vector<vecString> valueList,char** resBuff,int& resLen);

fmtMsg的作用是格式话结果到一个内存缓冲区中,此缓冲区用于网络发送数据。用户服务端。

getAll用于从缓冲区中读出结果数据。用于客户端。

 

这样就完成了客户端和服务端的通信。

同样,服务端可以管理多个mysql数据库,做得再复杂一点还可以做负载均衡、读写分离之类的事情,当然,网络上现在有很多这样的工具

本来是一个很简单的小工具,但是我想也许有人用得着,源代码还没有整理,有点乱,等整理完了上传上来

python开发MYSQL代理服务器 💖💖感谢各位观看这篇文章,💖💖点赞💖💖、收藏💖💖、你的支持是我前进的动力!💖💖 💖💖感谢你的阅读💖,专栏文章💖持续更新!💖关注不迷路!!💖 阅读详情

相关推荐

YOLOV8多模态(可见光+红外光目标检测任务,基于Ultralytics官方代码实现)

torch 2.3.1 torchvision 0.18.1 Python 3.8.19 tensorrt 8.5.3.1DroneVehicle数据集下载地址DroneVehicle 数据集由无人机采集的 56,878 张图像组成,其中一半是 RGB 图像,其余是红外图像。我们为这 5 个类别制作了丰富的注释,其中包含定向边界框。其中,汽车在 RGB 图像中有 389,779 个注释,在

Mjy的博客 7585

mysql代理服务器_如何5分钟实现一个最简单的MySQL代理服务器?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼什么是MySQL代理?MySQL代理是介于client端和MySQL服务端中间层服务,如下图所示:为什么要使用代理?大部人都知道使用代理的好处,毕竟,随着互联网越来越普及,互联网系统越来越庞大、复杂,性能要求越来越高,为了让整个系统具有更好的扩展性、更高的性能、解藕等多种特性,在数据库层面引入代理层是目前互联网系统常见的架构设计方案。总的来说,在数据库层...

weixin_34540485的博客 762

C# 开发 ACS 运动控制系统:从入门到高阶应用实践

起始位置</param>/// <param name="endPos">结束位置</param>/// <param name="maxVelocity">最大速度</param>/// <param name="maxAcceleration">最大加速度</param>/// <param name="maxJerk">最大加加速度

品质生活,极致编程。 2849

使用Python开发SQLite代理服务器

使用Python开发SQLite代理服务器

董付国的Python专栏 892

5分钟搞定Unity+Visual Studio开发环境配置(含C#游戏开发工作负载)

本文提供了一份详细的Unity与Visual Studio开发环境配置指南,帮助开发者在5分钟内完成C#游戏开发工作负载的设置。从Unity Hub安装到Visual Studio关键组件选择,再到常见问题排查,全面覆盖环境搭建的各个环节,显著提升游戏开发效率。

weixin_29014237的博客 249

SCRFD算法解读及环境安装实践

SCRFD检测算法及环境安装

lishanlu136的博客 1009

MySQL 代理层:ProxySQL

ProxySQL 默认的配置文件位于/etc/proxysql.cnf,第一次启动 ProxySQL 会初始化配置数据库,往后的所有配置都可以在 ProxySQL 数据库中修复,直接修改配置文件则不会生效,除非重新初始化。主机之间的复制关系是通过 hostgroup_id 来绑定的,关系定义使用的是 mysql_replication_hostgroups 表。

分享既学习 4071

STM32CubeIDE离线安装芯片PACK包全攻略(附离线包下载与导入步骤)

本文详细介绍了在STM32CubeIDE中离线安装芯片PACK包的完整流程,包括官方和第三方资源获取方法、本地安装步骤及常见问题解决方案。特别针对网络隔离环境下的嵌入式开发需求,提供了实用的版本管理和自动化部署技巧,帮助开发者高效完成芯片固件支持包的离线配置。

weixin_30825581的博客 303

【MySql】ProxySQL指南

ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能。还有一些同类产品比如 DBproxy、MyCAT、OneProxy 等。但经过反复对比和测试之后,还是觉得ProxySQL是一款性能不谙,靠谱稳定的MySQL 中间件产品.它有官方版和 percona 版两种.percona版是在官方版的基础上修改的,添加了几个比较实用的工

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 5116

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

AI提示词注入绕过工具:一键绕过Codex/Claude安全限制,CTF夺旗与渗透测试必备神器

【摘要】codex-session-patcher是一款专为CTF选手设计的AI会话修复工具,能智能处理AI的拒绝回复问题。核心功能包括:两级拒绝检测策略、AI智能改写回复、批量清理会话记录、推理内容擦除与备份还原,并支持Codex/ClaudeCode/OpenCode三大平台。工具提供CLI和WebUI两种操作方式,支持CTF提示词注入和工作空间管理,可显著降低AI拒绝率。最新版本优化了CTF模板加载机制,修复了路径漂移等问题。典型工作流包含安装CTF配置、专用环境启动、会话清理和恢复对话等步骤,帮助安

Chengbei11的博客 3118

nginx配置mysql连接代理

在编译之前建议将原先的nginx先保存一份,因为重新编译安装的nginx会覆盖原来的nginx。在linux系统上配置nginx代理需要检查nginx是否有stream模块。我的configure arguments:显示已经装有相应模块。远程通过访问16666端口成功连接到数据库。在源代码下面有一个configure文件。

jasend的博客 1980

Arduino IDE 开发ESP32-S3编译报错 Sketch too big?一步步解决!

解决方法很简单,只需要一步步来修改 Arduino IDE 的配置即可。确保你已经打开 Arduino IDE 并加载了你的 ESP32 代码。如果你也遇到了这个问题,按这个方法试试,应该就能顺利搞定!,如果你需要 OTA,就不能选这个方案,需要换成。,但我回头一想,我这块 ESP32-S3 可是。,按理说存储空间应该足够啊,那这到底是咋回事?,默认方案就装不下了,这时就需要选择更大的。按钮,这次应该不会报错了!,然后在下拉菜单中找到。,可以支持更大的固件。如果你的固件体积超过。,就能正常编译上传。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2140

preparestatement方法用多次_如何用java 5分钟实现一个最简单的mysql代理服务器?

用java8基于vert.x3 快速实现一个最简单的mysql代理服务器,只需要5分钟时间。什么是mysql 代理?mysql代理是介于client端和mysql服务端中间层服务,如下图所示:这里写图片描述为什么要使用代理?大部人都知道使用代理的好处,毕竟,随着互联网越来越普及,互联网系统越来越庞大、复杂,性能要求越来越高,为了让整个系统具有更好的扩展性、更高的性能、解藕等多种特性,在数据库层面引...

weixin_39638304的博客 352

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Node.js 简单的MySQL proxy

Node.js 简单实现MySQL Proxy标签(空格分隔): Node.js Proxy MySQL公司日常开发区分生产环境和测试环境,本地开发只能连接测试环境,无法连接生产环境,但是有些问题只有在生产环境才能重新,故写了一个简单的mysql proxy,在能够访问生产db的机器上安装后,本地通过代理连接远程生产。 功能:代理mysql访问(其实不单单实现mysql代理,可以是代理任何t

workwithwebis3w的专栏 1289

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

纯Python开发的多级分销和点卡系统

纯Python开发的多级分销和点卡系统 去发现同类优质开源项目:https://gitcode.com/ 此压缩文件包含了一个由纯Python开发的多级分销和点卡系统,具备三级代理权限。该系统使用了流行的技术栈,包括Flask框架、MySQL数据库、SQLAlchemy ORM工具以及Redis缓存,实现了高效、稳定的功能运作。 功能特点 多级分销机制:系统支持三级代理分销机制,助力您的业务快速...

gitblog_06709的博客 794

vertx实现简单的反向代理

一提到反向代理,我们首先想到的或许是nginx,但某些场景,我们不能随意的去搭建一个NG。如果我们此时只有一个JavaWeb项目可用,或许最好的办法,就是在已有项目中集成一个反向代理服务。 所以我们就需要用Java手写一个简单的反向代理。 语言:Java 技术框架:Vert.x 代理:TCP反向代理 例子描述 本机暴露8088端口,外部客户端访问该端口的连接,都映射到xxx.xxx.xxx.x...

MrXionGe的博客 2768

小白学 Python 爬虫(31):自己构建一个简单的代理池

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...

极客挖掘机 3008

java mysql 访问代理_如何用java 5分钟实现一个最简单的mysql代理服务器?

用java8基于vert.x3 快速实现一个最简单的mysql代理服务器,只需要5分钟时间。什么是mysql 代理?mysql代理是介于client端和mysql服务端中间层服务,如下图所示:为什么要使用代理?大部人都知道使用代理的好处,毕竟,随着互联网越来越普及,互联网系统越来越庞大、复杂,性能要求越来越高,为了让整个系统具有更好的扩展性、更高的性能、解藕等多种特性,在数据库层面引入代理层是目前...

weixin_30424427的博客 521

如何用java 5分钟实现一个最简单的mysql代理服务器?

​ 大部人都知道使用代理的好处,毕竟,随着互联网越来越普及,互联网系统越来越庞大、复杂,性能要求越来越高,为了让整个系统具有更好的扩展性、更高的性能、解藕等多种特性,在数据库层面引入代理层是目前互联网系统常见的架构设计方案。另外,实现一个代理服务器远没有如此简单,根据需求的不同,复杂度也不同,这里仅仅是展示实现代理的核心代码,实现了最基本的代理功能,当然了,一切复杂的需求都可以基于上面的代码进行改造扩展.不出意外,一切运行正常,恭喜你,你已经实现了一个最简单的mysql代理服务器。......

liuhm的博客 1714

mysql代理服务区_如何5分钟实现一个最简单的MySQL代理服务器?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼什么是MySQL代理?MySQL代理是介于client端和MySQL服务端中间层服务,如下图所示:为什么要使用代理?大部人都知道使用代理的好处,毕竟,随着互联网越来越普及,互联网系统越来越庞大、复杂,性能要求越来越高,为了让整个系统具有更好的扩展性、更高的性能、解藕等多种特性,在数据库层面引入代理层是目前互联网系统常见的架构设计方案。总的来说,在数据库层...

weixin_36057373的博客 232

代理服务器 mysql_如何5分钟实现一个最简单的MySQL代理服务器?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼什么是MySQL代理?MySQL代理是介于client端和MySQL服务端中间层服务,如下图所示:为什么要使用代理?大部人都知道使用代理的好处,毕竟,随着互联网越来越普及,互联网系统越来越庞大、复杂,性能要求越来越高,为了让整个系统具有更好的扩展性、更高的性能、解藕等多种特性,在数据库层面引入代理层是目前互联网系统常见的架构设计方案。总的来说,在数据库层...

weixin_35756892的博客 479

Python爬虫:使用MySQL维护IP代理池

本篇我们就使用pymysql来操作MySQL数据库,维护我们上篇博客所搭建的IP代理池。

夏小悠的博客 4210

代理模式-MySql代理

为其他对象提供一种代理以控制对这个对象的访问。

程序员小潘 1952
上一篇: 躲猫猫网络调查团:没有惊喜
下一篇: php使用simplexml读取xml
zhsp1029
博客等级 码龄21年 115粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值