SlideShare a Scribd company logo
1 of 15
Download to read offline
MySQL-Proxy

--使用和源码分析




            www.hoterran.info
use

  ● 依赖
       ○ libevent
       ○ glib
       ○ lua,必须支持dlopen
  ● 重要参数
       ○ --plugins=<name>
       ○ --event-threads
       ○ --proxy-backend-addresses
       ○ --proxy-read-only-backend-addresses
       ○ --proxy-lua-script
  ● 例子
       ○ 启动
bin/mysql-proxy 
--proxy-read-only-backend-addresses=10.250.7.14:3306 
--proxy-backend-addresses=10.250.7.15:3306 
--proxy-lua-script=tutorial-basic.lua
       ○ 连接
mysql -h 127.0.0.1 -ptest -P4040 -u test
plugin

● 支持多种plugins,内置有proxy(必须加载),admin等模块.
   ○ 模块是so共享库,以dl_open形式打开
      ■ $INSTALL/lib/mysql-proxy/plugins/libproxy.so
      ■ $INSTALL/lib/mysql-proxy/plugins/libadmin.so
● 模块必须遵循的规范
   ○ 必须有plugin_init函数,填充chassis_plugin中init,
     apply_config函数
arch

 1. 根据events-threads启动多线程.
 2. 加载proxy模块,调用plugin_init函数(admin模块类似)
 3. 调用proxy模块的apply_config启动监听(4040端口)
 4. 主线程与子线程通过一个pipe交互,主线程开始监听
 5. 子线程盯着pipe fd看主线程是否发送数据.
 6. 主线程发现有新连接,主线程把任务(fd,event)写入一个队
    列.
 7. 往pipe写一个字符,子线程(惊群)从pipe fd的epoll_wait返
    回.
 8. 子线程从队列里抢夺该任务.
 9. 抢到任务的子线程把pipe fd的数据读掉,对这个fd开始
    epoll_wait.
10. 仅有该子线程与这个fd保持交互.
arch

1. 子线程在与client,mysql交互的过程中会调用proxy模块的几个函数
   (proxy_connect_server等6个函数).
2. 如果存在lua脚本还会有调用proxy_lua_connect_server
3. proxy_lua_connect_server会创建一个lua_State,并把mysql server的信息
   写入一张叫proxy的lua表里,并载入lua脚本(cachedscripts)到一个
   REGISTRYINDEX里,方便后面的连接使用.
4. 同时写入还有mysql的一些宏方便lua进行解析packet
5. proxy_lua_connect_server还会判断lua脚本是否有connect_server函数,由
   它来选择需要连接mysql服务器.
6. 接下来就是状态机....
proxy plugin

● 状态机函数(plugin.c 里proxy_*)
●
proxy plugin

● lua_scripts的作用
    ○ 对client与MySQL的交互设置hook,可以添加额外的很多功
      能,这也是MySQL-Proxy最吸引的功能
● Proxy 与lua的交互
       ■ 修改lua-scripts会影响到下一次的连接
       ■ client第一次连接才会载入
       ■ 如果没有lua-scripts则跳过
proxy plugin

● proxy table
●
proxy plugin

● connect_server
   ○ 各种模式的负载均衡
   ○ 读写控制
   ○ 白名单,黑名单
   ○ 必须设置proxy.connection.backends_ndx保证c代码可以
     连接数据库.
proxy plugin

● read_handshake
    ○
● read_auth
    ○ 用户映射
       ■ 把proxy用户转换成mysql的用户
       ■ 处理密码和重包协议
          ■ 需要$INSTALL/lib/mysql-proxy/lua/mysql.so
● read_auth_result
    ○ 记录连接
    ○ 连接池
proxy plugin

● read_query
    ○ 对某类sql的汇总统计
    ○ 记录sql语句的类型和明文的sql语句
    ○ 否定部分特殊的sql(sql注入,避免select *)
    ○ 可以添加额外的sql(queries)
    ○ 可以自己定制proxy.response,添加一些额外的命令参数,例
      如show mysql-proxy等命令.
proxy plugin

● read_query_result
    ○ 记录结果集
    ○ 避免过大的结果集
    ○ 移走不想展示的结果集
    ○ Qos控制结果集返回的时间
    ○ 定制proxy.response包,模拟MySQL的返回结果
    ○ 从injection获取sql执行时间和返回结果集的时间
admin plugin

  ● 启动
bin/mysql-proxy --plugins=admin --plugins=proxy 
--admin-password=test 
--admin-username=test 
--admin-lua-script=admin.lua 
--proxy-backend-addresses=10.250.7.15:3306 
--proxy-backend-addresses=10.250.7.14:3306 
--proxy-lua-script=tutorial-basic.lua
   ● client
       ○ mysql -h 127.0.0.1 -utest -ptest -P4040
   ● admin
       ○ mysql -h 127.0.0.1 -utest -ptest -P4041
mysql> select * from backends;
+-------------+------------------+---------+------+------+-------------------+
| backend_ndx | address                | state | type | uuid | connected_clients |
+-------------+------------------+---------+------+------+-------------------+
|        1 | 10.250.7.15:3306 | up           | rw | NULL |                  1|
|        2 | 10.250.7.14:3306 | unknown | rw | NULL |                          0|
+-------------+------------------+---------+------+------+-------------------+
dir

 ● 目录说明,$INSTALL为MySQL-Proxy安装后的目录,$SOURCE为源代码
   目录
 ● MySQL-Proxy主体的目录
     ○ $SOURCE/src
     ○ $INSTALL/bin,$INSTALL/lib
 ● admin,proxy模块的目录
     ○ $SOURCE/plugins
     ○ $INSTALL/lib/mysql-proxy/plugins
 ● lua-scripts,包括负载均衡,用户映射,解析sql等
     ○ $SOURCE/lib/(example), $SOURCE/lib/proxy(lib)
     ○ $INSTALL/lib/mysql-proxy/lua/proxy/(lib)
 ● lua-scripts调用c的模块(密码,包重新组装,词法解析)
     ○ $SOURCE/lib
     ○ $INSTALL/lib/mysql-proxy/lua/
代码之旅

从src/mysql-cli.c开始

More Related Content

What's hot

NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用dong yuwei
 
Upstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginxUpstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginxmonad bobo
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版pigso
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
My fox 扩容与数据迁移
My fox 扩容与数据迁移My fox 扩容与数据迁移
My fox 扩容与数据迁移aleafs
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveOpenCity Community
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案LaravelConfTaiwan
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现ideawu
 
前端各階段工作
前端各階段工作前端各階段工作
前端各階段工作Chi-wen Sun
 
Nginx共享内存
Nginx共享内存Nginx共享内存
Nginx共享内存Lucien Li
 
twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARPtwMVC
 
Linux Network Monitoring
Linux Network MonitoringLinux Network Monitoring
Linux Network MonitoringKenny (netman)
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展Chi-wen Sun
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化freeplant
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 

What's hot (20)

NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用
 
Upstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginxUpstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginx
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
My fox 扩容与数据迁移
My fox 扩容与数据迁移My fox 扩容与数据迁移
My fox 扩容与数据迁移
 
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewaveTrack2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
 
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
 
前端各階段工作
前端各階段工作前端各階段工作
前端各階段工作
 
Nginx共享内存
Nginx共享内存Nginx共享内存
Nginx共享内存
 
twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARP
 
Linux Network Monitoring
Linux Network MonitoringLinux Network Monitoring
Linux Network Monitoring
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 

Similar to MySQL-Proxy

2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 phpronnywang_tw
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
8, lamp
8, lamp8, lamp
8, lampted-xu
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy clusterYiwei Ma
 
基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践ZY Zhang
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Yiwei Ma
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on praticeKenny (netman)
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86dbabc
 
第一讲 My sql初步
第一讲 My sql初步第一讲 My sql初步
第一讲 My sql初步hjl888666
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops琛琳 饶
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置Yiwei Ma
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告Bo-Yi Wu
 
My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化YUCHENG HU
 
Python小团队不妨知道的技术
Python小团队不妨知道的技术Python小团队不妨知道的技术
Python小团队不妨知道的技术jie.wang
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡guest2d0fe3
 

Similar to MySQL-Proxy (20)

2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
8, lamp
8, lamp8, lamp
8, lamp
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
 
第一讲 My sql初步
第一讲 My sql初步第一讲 My sql初步
第一讲 My sql初步
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
Squid安装配置
Squid安装配置Squid安装配置
Squid安装配置
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告
 
My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化
 
Python小团队不妨知道的技术
Python小团队不妨知道的技术Python小团队不妨知道的技术
Python小团队不妨知道的技术
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 

MySQL-Proxy

  • 2. use ● 依赖 ○ libevent ○ glib ○ lua,必须支持dlopen ● 重要参数 ○ --plugins=<name> ○ --event-threads ○ --proxy-backend-addresses ○ --proxy-read-only-backend-addresses ○ --proxy-lua-script ● 例子 ○ 启动 bin/mysql-proxy --proxy-read-only-backend-addresses=10.250.7.14:3306 --proxy-backend-addresses=10.250.7.15:3306 --proxy-lua-script=tutorial-basic.lua ○ 连接 mysql -h 127.0.0.1 -ptest -P4040 -u test
  • 3. plugin ● 支持多种plugins,内置有proxy(必须加载),admin等模块. ○ 模块是so共享库,以dl_open形式打开 ■ $INSTALL/lib/mysql-proxy/plugins/libproxy.so ■ $INSTALL/lib/mysql-proxy/plugins/libadmin.so ● 模块必须遵循的规范 ○ 必须有plugin_init函数,填充chassis_plugin中init, apply_config函数
  • 4. arch 1. 根据events-threads启动多线程. 2. 加载proxy模块,调用plugin_init函数(admin模块类似) 3. 调用proxy模块的apply_config启动监听(4040端口) 4. 主线程与子线程通过一个pipe交互,主线程开始监听 5. 子线程盯着pipe fd看主线程是否发送数据. 6. 主线程发现有新连接,主线程把任务(fd,event)写入一个队 列. 7. 往pipe写一个字符,子线程(惊群)从pipe fd的epoll_wait返 回. 8. 子线程从队列里抢夺该任务. 9. 抢到任务的子线程把pipe fd的数据读掉,对这个fd开始 epoll_wait. 10. 仅有该子线程与这个fd保持交互.
  • 5. arch 1. 子线程在与client,mysql交互的过程中会调用proxy模块的几个函数 (proxy_connect_server等6个函数). 2. 如果存在lua脚本还会有调用proxy_lua_connect_server 3. proxy_lua_connect_server会创建一个lua_State,并把mysql server的信息 写入一张叫proxy的lua表里,并载入lua脚本(cachedscripts)到一个 REGISTRYINDEX里,方便后面的连接使用. 4. 同时写入还有mysql的一些宏方便lua进行解析packet 5. proxy_lua_connect_server还会判断lua脚本是否有connect_server函数,由 它来选择需要连接mysql服务器. 6. 接下来就是状态机....
  • 7. proxy plugin ● lua_scripts的作用 ○ 对client与MySQL的交互设置hook,可以添加额外的很多功 能,这也是MySQL-Proxy最吸引的功能 ● Proxy 与lua的交互 ■ 修改lua-scripts会影响到下一次的连接 ■ client第一次连接才会载入 ■ 如果没有lua-scripts则跳过
  • 9. proxy plugin ● connect_server ○ 各种模式的负载均衡 ○ 读写控制 ○ 白名单,黑名单 ○ 必须设置proxy.connection.backends_ndx保证c代码可以 连接数据库.
  • 10. proxy plugin ● read_handshake ○ ● read_auth ○ 用户映射 ■ 把proxy用户转换成mysql的用户 ■ 处理密码和重包协议 ■ 需要$INSTALL/lib/mysql-proxy/lua/mysql.so ● read_auth_result ○ 记录连接 ○ 连接池
  • 11. proxy plugin ● read_query ○ 对某类sql的汇总统计 ○ 记录sql语句的类型和明文的sql语句 ○ 否定部分特殊的sql(sql注入,避免select *) ○ 可以添加额外的sql(queries) ○ 可以自己定制proxy.response,添加一些额外的命令参数,例 如show mysql-proxy等命令.
  • 12. proxy plugin ● read_query_result ○ 记录结果集 ○ 避免过大的结果集 ○ 移走不想展示的结果集 ○ Qos控制结果集返回的时间 ○ 定制proxy.response包,模拟MySQL的返回结果 ○ 从injection获取sql执行时间和返回结果集的时间
  • 13. admin plugin ● 启动 bin/mysql-proxy --plugins=admin --plugins=proxy --admin-password=test --admin-username=test --admin-lua-script=admin.lua --proxy-backend-addresses=10.250.7.15:3306 --proxy-backend-addresses=10.250.7.14:3306 --proxy-lua-script=tutorial-basic.lua ● client ○ mysql -h 127.0.0.1 -utest -ptest -P4040 ● admin ○ mysql -h 127.0.0.1 -utest -ptest -P4041 mysql> select * from backends; +-------------+------------------+---------+------+------+-------------------+ | backend_ndx | address | state | type | uuid | connected_clients | +-------------+------------------+---------+------+------+-------------------+ | 1 | 10.250.7.15:3306 | up | rw | NULL | 1| | 2 | 10.250.7.14:3306 | unknown | rw | NULL | 0| +-------------+------------------+---------+------+------+-------------------+
  • 14. dir ● 目录说明,$INSTALL为MySQL-Proxy安装后的目录,$SOURCE为源代码 目录 ● MySQL-Proxy主体的目录 ○ $SOURCE/src ○ $INSTALL/bin,$INSTALL/lib ● admin,proxy模块的目录 ○ $SOURCE/plugins ○ $INSTALL/lib/mysql-proxy/plugins ● lua-scripts,包括负载均衡,用户映射,解析sql等 ○ $SOURCE/lib/(example), $SOURCE/lib/proxy(lib) ○ $INSTALL/lib/mysql-proxy/lua/proxy/(lib) ● lua-scripts调用c的模块(密码,包重新组装,词法解析) ○ $SOURCE/lib ○ $INSTALL/lib/mysql-proxy/lua/