【原创】MySQL Proxy - 脚本

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
       你可以通过使用嵌入式 Lua 脚本语言对 MySQL Proxy 的行为进行控制,以使得其能够对发送给 MySQL 服务器的 query 和 response 进行操纵。  


下图展现了 MySQL Proxy 中使用的类的总览。  

 


       在 MySQL Proxy 和服务器之间的主要交互功能是通过 Lua 脚本定义的一个或者多个函数。根据客户端与一个或者多个 backend MySQL servers 之间通信序列中不同的事件和操作,定义如下一些关键函数:  


connect_server(): 该函数在每次有来自客户端到 MySQL Proxy 的连接发生时被调用。你可以在做负载均衡(load-balancing)功能时使用该函数以拦截原始连接,然后再通过策略决定客户端将要连接的服务器。如果你没有定义一个确定方案,默认情况下,一个简单的轮询(round-robin)类型的分发方式将被采用。  


read_handshake(): 该函数在初始握手信息被服务器返回时被调用。你可以捕获返回的握手信息,然后在授权交换(authorization exchange)发生前提供额外的检查。  


read_auth(): 该函数在授权包(用户名,密码,默认数据库)被客户端提交给服务器用于鉴权时被调用。  


read_auth_result(): 该函数在收到服务器返回的将要发送给客户端表明是否授权成功的授权包时被调用。  


read_query(): 该函数在每次客户端向服务器发送 query 时被调用。可以使用该函数对原始的 query 进行编辑和操纵,包括在原始 query 的前面和后面添加新的 query 。同样可以使用该函数直接返回信息给客户端而不经过(bypassing)服务器,该功能在打算过滤掉不期望的 query 的时候或者 query 的数量超过了已有限制的情况下很有用。  


read_query_result(): 该函数在每次有结果从服务器返回的时候被调用,前提是你手动注入了 query 到 query 队列中。如果你没有显示地在 read_query() 中注入 query ,则该函数不会被触发。可以使用该函数对结果集进行编辑,或者移除、过滤结果集的内容,只要该内容是由于你在 read_query() 中注入的额外的 query 产生的结果。  


下表中列出了 MySQL proxy 和服务器的通信函数,提供的信息,以及当函数被触发时的信息流方向。  


Function              Supplied Information        Direction  
connect_server()          None                       Client to Server  
read_handshake()        None                      Server to Client  
read_auth()                  None                       Client to Server  
read_auth_result()        None                      Server to Client  
read_query()                 Query                     Client to Server  
read_query_result()      Query result           Server to Client  


       默认情况下,所有的函数都会返回结果以表明当前数据是否要传递给客户端或者服务器(取决于被传输的信息的方向)。返回值可以通过显示地返回一个常量的方式进行覆盖,以表明应该发送某个特定的应答。例如,一种可能的情况是,在 read_query() 中手动创建结果集,然后直接返回给客户端,中间不再涉及发送原始 query 到服务器的动作。  


       除了上述这些函数,还有一些内置结构 通过提供针对元素的简化了的接口,例如 query 的列表和结果集的分组,提供了对 MySQL Proxy 如何转发 query 以及返回结果集的控制。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
关系型数据库 MySQL Shell
如何用shell脚本获取mysql的binlog日志
如何用shell脚本获取mysql的binlog日志
62 1
|
4月前
|
安全 关系型数据库 MySQL
Linux 实用小脚本系列(2)----mysql安全初始化脚本的免交互执行--mysql_secure_installation
Linux 实用小脚本系列(2)----mysql安全初始化脚本的免交互执行--mysql_secure_installation
47 0
|
1月前
|
关系型数据库 MySQL
一键下载MySQL安装包-batch脚本
一键下载MySQL安装包-batch脚本
29 2
|
3月前
|
关系型数据库 MySQL Shell
linux shell脚本实现自动备份Mysql数据库脚本
linux shell脚本实现自动备份Mysql数据库脚本
182 3
|
4月前
|
SQL 关系型数据库 MySQL
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
97 0
|
4月前
|
关系型数据库 MySQL Shell
MySQL【实践 01】Linux 环境 MySQL 数据库备份 shell 脚本(脚本源码及说明+定时任务配置+数据库恢复测试)粘贴可以
MySQL【实践 01】Linux 环境 MySQL 数据库备份 shell 脚本(脚本源码及说明+定时任务配置+数据库恢复测试)粘贴可以
50 0
|
4月前
|
关系型数据库 MySQL Linux
【有关mysql定时备份脚本文件】
【有关mysql定时备份脚本文件】
32 0
|
4月前
|
关系型数据库 MySQL Shell
百度搜索:蓝易云【Shell脚本实现Mysql持续kill功能】
将以上代码保存为一个名为 `kill_mysql.sh`的文件,并确保该文件具有执行权限(可以使用 `chmod +x kill_mysql.sh`命令赋予执行权限)。然后在终端中运行该脚本即可实现MySQL的持续kill功能。
49 0
|
4月前
|
关系型数据库 MySQL Linux
Centos下脚本安装MySQL(tar.gz)
Centos下脚本安装MySQL(tar.gz)
88 2
|
5月前
|
SQL 缓存 关系型数据库
MYSQL增量备份和全量备份脚本
MYSQL增量备份和全量备份脚本