Submit Search
Upload
MySQL-Proxy
•
3 likes
•
1,194 views
R
ruoyi ruan
Follow
sourcode research
Read less
Read more
Report
Share
Report
Share
1 of 15
Download now
Download to read offline
Recommended
Nginx使用和模块开发
Nginx使用和模块开发
qingpiao1983
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011
Yiwei Ma
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
ideawu
Database.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
Lixun Peng
Redis介绍
Redis介绍
zhaolinjnu
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
twMVC
MongoDB at Qihoo 360
MongoDB at Qihoo 360
MongoDB
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理
Lixun Peng
Recommended
Nginx使用和模块开发
Nginx使用和模块开发
qingpiao1983
百姓网如何优化网速-Qcon2011
百姓网如何优化网速-Qcon2011
Yiwei Ma
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
ideawu
Database.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
Lixun Peng
Redis介绍
Redis介绍
zhaolinjnu
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
twMVC
MongoDB at Qihoo 360
MongoDB at Qihoo 360
MongoDB
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理
Lixun Peng
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
iammutex
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用
dong yuwei
Upstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginx
monad bobo
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
pigso
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
cachowu
My fox 扩容与数据迁移
My fox 扩容与数据迁移
aleafs
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
Redis 常见使用模式分析
Redis 常见使用模式分析
vincent253
Maven & mongo & sring
Maven & mongo & sring
Tzu Chi University
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
LaravelConfTaiwan
对MySQL应用的一些总结
对MySQL应用的一些总结
Lixun Peng
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
ideawu
前端各階段工作
前端各階段工作
Chi-wen Sun
Nginx共享内存
Nginx共享内存
Lucien Li
twMVC#43 YARP
twMVC#43 YARP
twMVC
Linux Network Monitoring
Linux Network Monitoring
Kenny (netman)
前端框架發展
前端框架發展
Chi-wen Sun
Mysql展示功能与源码对应
Mysql展示功能与源码对应
zhaolinjnu
分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化
freeplant
MySQL新技术探索与实践
MySQL新技术探索与实践
Lixun Peng
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
ronnywang_tw
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
thinkinlamp
More Related Content
What's hot
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
iammutex
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用
dong yuwei
Upstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginx
monad bobo
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
pigso
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
cachowu
My fox 扩容与数据迁移
My fox 扩容与数据迁移
aleafs
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
OpenCity Community
Redis 常见使用模式分析
Redis 常见使用模式分析
vincent253
Maven & mongo & sring
Maven & mongo & sring
Tzu Chi University
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
LaravelConfTaiwan
对MySQL应用的一些总结
对MySQL应用的一些总结
Lixun Peng
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
ideawu
前端各階段工作
前端各階段工作
Chi-wen Sun
Nginx共享内存
Nginx共享内存
Lucien Li
twMVC#43 YARP
twMVC#43 YARP
twMVC
Linux Network Monitoring
Linux Network Monitoring
Kenny (netman)
前端框架發展
前端框架發展
Chi-wen Sun
Mysql展示功能与源码对应
Mysql展示功能与源码对应
zhaolinjnu
分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化
freeplant
MySQL新技术探索与实践
MySQL新技术探索与实践
Lixun Peng
What's hot
(20)
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用
Upstream design and_implementation_in_nginx
Upstream design and_implementation_in_nginx
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
My fox 扩容与数据迁移
My fox 扩容与数据迁移
Track2 -刘继伟--openstack in gamewave
Track2 -刘继伟--openstack in gamewave
Redis 常见使用模式分析
Redis 常见使用模式分析
Maven & mongo & sring
Maven & mongo & sring
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
[LaravelConf Taiwan 2018] 如何正確佈署 Laravel 專案
对MySQL应用的一些总结
对MySQL应用的一些总结
高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
前端各階段工作
前端各階段工作
Nginx共享内存
Nginx共享内存
twMVC#43 YARP
twMVC#43 YARP
Linux Network Monitoring
Linux Network Monitoring
前端框架發展
前端框架發展
Mysql展示功能与源码对应
Mysql展示功能与源码对应
分布式系统中的 RPC 与串行化
分布式系统中的 RPC 与串行化
MySQL新技术探索与实践
MySQL新技术探索与实践
Similar to MySQL-Proxy
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
ronnywang_tw
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
thinkinlamp
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
pwesh
8, lamp
8, lamp
ted-xu
Mysql proxy cluster
Mysql proxy cluster
Yiwei Ma
基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践
ZY Zhang
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
Yiwei Ma
Linux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
Kenny (netman)
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
dbabc
第一讲 My sql初步
第一讲 My sql初步
hjl888666
Monitor is all for ops
Monitor is all for ops
琛琳 饶
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
xuebao_zx
Mysql handlersocket
Mysql handlersocket
pwesh
Squid安装配置
Squid安装配置
Yiwei Ma
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
maclean liu
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告
Bo-Yi Wu
My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化
YUCHENG HU
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
YingSiang Geng
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
guest2d0fe3
Similar to MySQL-Proxy
(20)
2012 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
8, lamp
8, lamp
Mysql proxy cluster
Mysql proxy cluster
基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
Linux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
第一讲 My sql初步
第一讲 My sql初步
Monitor is all for ops
Monitor is all for ops
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
Mysql handlersocket
Mysql handlersocket
Squid安装配置
Squid安装配置
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告
My sql 5.5 innodb xtradb 性能诊断与优化
My sql 5.5 innodb xtradb 性能诊断与优化
Python小团队不妨知道的技术
Python小团队不妨知道的技术
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
MySQL-Proxy
1.
MySQL-Proxy --使用和源码分析
www.hoterran.info
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. 接下来就是状态机....
6.
proxy plugin ● 状态机函数(plugin.c
里proxy_*) ●
7.
proxy plugin ● lua_scripts的作用
○ 对client与MySQL的交互设置hook,可以添加额外的很多功 能,这也是MySQL-Proxy最吸引的功能 ● Proxy 与lua的交互 ■ 修改lua-scripts会影响到下一次的连接 ■ client第一次连接才会载入 ■ 如果没有lua-scripts则跳过
8.
proxy plugin ● proxy
table ●
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/
15.
代码之旅 从src/mysql-cli.c开始
Download now