mysql proxy hscale_mysql proxy 学习笔记

Mysqlproxy&Hscale

一.分布存储的常见方式

二.Mysqlproxy

a)Mysqlproxy简介

b)Mysqlproxy的工作流程

c)Mysqlproxy的lua脚本

d)Mysqlproxy处理请求机制

// @演示

e)Mysqlproxy重写查询

f)Mysqlproxy纠正常见错误

g)Mysqlproxy记录log

h)执行shell脚本

i)重写结果集

j)读写分离

k)负载平衡

三.Hscale

a)Hscale简介

b)Hscale的工作原理

一.分布存储的常见方式

a)Mysql5.1支持的分区表

i.分区的优点:

1.与单个磁盘或文件系统分区相比,可以存储更多的数据。

2.对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

ii.分区算法

1.RANGE分区

a)基于属于一个给定连续区间的列值,把多行分配给分区LIST分区PARTITION BY RANGE (store_id) (PARTITION p0 VALUES LESS THAN (6),PARTITION p1 VALUES LESS THAN (11),PARTITION p2 VALUES LESS THAN (16),PARTITION p3 VALUES LESS THAN (21));

b)

2.LISRT分区

a)类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。PARTITION BY LIST(store_id)PARTITION pNorth VALUES IN (3,5,6,9,17),PARTITION pEast VALUES IN (1,2,10,11,19,20),PARTITION pWest VALUES IN (4,12,13,14,18),PARTITION pCentral VALUES IN (7,8,15,16));

b)

3.HASH分区

a)基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。PARTITION BY HASH(YEAR(hired))PARTITIONS 4;

4.KEY分区

a)类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。PARTITION BY LINEAR KEY (col1)PARTITIONS 3;

b)

5.

b)手工分表

i.比如 :passport的user_info与user_info_cr

二.Mysqlproxy

a)Mysqlproxy简介:

Mysqlproxy是工作在mysql客户端和server端之间的中间件,主要可以截获,修改客户端的请求以及server端返回的结果。

b)mysql的工作流程

c)Mysqlproxy的lua脚本:

Mysqlproxy mysql proxy可以在LUA文件定义一个或者几个函数,从而来控制代理与mysql server交互的过程以及结果,具体的函数如下 ,

init(), connect_server(), read_handshake(), send_handshake(),

read_auth(), send_auth(), read_auth_result(), send_auth_result(),

read_query(), read_query_result(), send_query_result(), cleanup()

connect_server() —这个函数每次client连接的时候被调用,可以用这个函数来处理负载均衡,决定当前的请求发给那个后台的服务器,如果没有指定这个函数,那么就会采用简单的轮询机制。read_handshake() —这个函数在server返回初始握手信息时被调用,可以调用这个函数在验证信息发给服务器前进行额外的检查。read_auth() — client发送验证信息给服务器的时候会调用这个函数。read_auth_result() —服务器验证信息返回后调用这个函数。read_query() —每次client发送查询请求函数的时候被调用,可以用这个函数进行查询语句的预处理,过滤掉非预期的查询等等,这个是最常用的函数。read_query_result() —查询结果返回是调用的函数,可以进行结果集处理。

应用程序可以通过lua脚本重写这些方法,定制自己需要的功能

Connect_server():

可以修改连接参数,实现负载平衡

通过启动命令指定连接的后台服务器:

Mysql-proxy—proxy-backend-addresses=192.168.95.136

在该函数中可以通过,设置proxy.backend.backend_ndx=1来指定需要连接的服务器

Read_query(packet):

该方法内可以不对请求做任何修改

可以纠正拼写错误,slect,CRATE等修改为select,create

过滤请求,批量删除

根据一定的策略重写请求的sql语句

添加可能漏掉的语句

注意:如果需要重写proxy,需要将命令加入到待发送队列:

Proxy.queries.append(1,string.char(proxy.COM_PROXY),’SHOW DATABASES’)

然后return PROXY_SEND_QUREY表示从query队列中发送请求

。。。

Read_query_result(injection_packet):

可以根据自己的需要定制返回结果,应用非常灵活

如果需要返回自己构造的resultset,需要返回:

Proxy.PROXY_SEND_RESULT

如果需要丢弃结果,需要返回:

Proxy.PROXY_IGNORE_RESULT

附:mysqlproxy的主要命令:

--help-all显示所有的帮助选项

--admin-address=host:port管理主机及端口,默认是4041

--proxy-address=host:port代理服务器的监听地址及端口,默认4040

--proxy-read-only-address=host:port只读连接时,代理服务器的监听地址及端口。默认4042

--proxy-backend-addresses=host:port连接真实服务器的地址及监听端口,默认是3306,这是mysql代理最重要的选项,多个主机之间用空格隔开。使用rr算法。

--proxy-lua-script=file指定lua脚本的名称

三.Hscale

a)Hscale简介

HSCALE是基于的一个插件应用,通过MySQL Proxy的脚 本拦截分拆对应的SQL语句来实现数据的分布存储,而且使用lua脚本可以自由定制分表策略,比起MySQL自己的partition更加灵活些。现在版 本还是0.2,功能有限,只能实现同库分表,但是基于MySQL Proxy的架构,未来要实现示分库分表也不是什么难事。

b)Hscale的工作流程

C注意:

配置文件是安装目录下的hscale,lua

设置环境变量

Export HSCALE_CONFIG_FILE=/opt/hscale/hscale.lua

Export LUA_PATH=’opt/mysqlproxy/share/mysqlproxy/?.lua;/opt/hscale/src/?.lua’

启动hascale

Mysql-proxy –proxy-lua-script=/opt/hscale/src/…/main.lua

Mysql-Proxy的内部结构体以及变量

mysql-proxy的LUA配置脚本中可以使用很多内部结构,其中最主要的是proxy,proxy提供了很多其他的结构体的接口,比如连接列表,后端服务器列表等等。像incoming packet这样的来自客户的结构体只是在脚本函数上下文中存在。

属性描述:

connection:包含所有活动客户的连接(proxy.connection)列表. .

servers: 后台服务器的列表(proxy.backends)queries:某一客户要发送到服务器端的查询PROXY_VERSION:mysql-proxy版本,十六进制。

proxy.connection

proxy.connection是只读对象,提供了当前活动连接的信息

proxy.connection属性:thread_id:连接的threadid

backend_ndx:当前连接所对应的后端服务器编号

proxy.backends

proxy.backends部分可写的,包含了后台服务器以及服务器meta信息的列表 ,你可以指定当前连接使用那个后台服务器。proxy.backends属性:address: 当前连接的主机名/端口组合connected_clients:目前已连接的客户数state:后台服务器的状态

proxy.queries

proxy.queries是一个要送往服务器的查询队列,The queue is not populated automatically, but if you do not explicitly populate the queue then queries are passed on to the backend server verbatim. Also, if you do not populate the query queue by hand, then the read_query_result() function is not triggered.

The following methods are supported for populating the proxy.queries object.函数描述:append(id,packet)添加到队尾。prepend(id,packet)插入队头。len()返回查询的队列长度

以下常量mysql-proxy用来客户指定操作:PROXY_SEND_QUERY发送查询给服务器.

PROXY_SEND_RESULT返回客户端查询结果PROXY_IGNORE_RESULT丢弃结果集

包状态常量:MYSQLD_PACKET_OK The packet is OK.

MYSQLD_PACKET_ERR The packet contains error information.

MYSQLD_PACKET_RAW The packet contains raw data.

后台状态常量:BACKEND_STATE_UNKNOWN The current status is unknown.

BACKEND_STATE_UP The backend is known to be up (available).

BACKEND_STATE_DOWN The backend is known to be down (unavailable).

BACKEND_TYPE_UNKNOWN Backend type is unknown.

BACKEND_TYPE_RW Backend is available for read/write.

BACKEND_TYPE_RO Backend is available only for read-only use.

服务器命令常量:

Constant Description

COM_SLEEP Sleep

COM_QUIT Quit

COM_INIT_DB Initialize database

COM_QUERY Query

COM_FIELD_LIST Field List

COM_CREATE_DB Create database

COM_DROP_DB Drop database

COM_REFRESH Refresh

COM_SHUTDOWN Shutdown

COM_STATISTICS Statistics

COM_PROCESS_INFO Process List

COM_CONNECT Connect

COM_PROCESS_KILL Kill

COM_DEBUG Debug

COM_PING Ping

COM_TIME Time

COM_DELAYED_INSERT Delayed insert

COM_CHANGE_USER Change user

COM_BINLOG_DUMP Binlog dump

COM_TABLE_DUMP Table dump

COM_CONNECT_OUT Connect out

COM_REGISTER_SLAVE Register slave

COM_STMT_PREPARE Prepare server-side statement

COM_STMT_EXECUTE Execute server-side statement

COM_STMT_SEND_LONG_DATA Long data

COM_STMT_CLOSE Close server-side statement

COM_STMT_RESET Reset statement

COM_SET_OPTION Set option

COM_STMT_FETCH Fetch statement

COM_DAEMON Daemon (MySQL 5.1 only)

COM_ERROR Error

MySQL数据类型

Constant Field Type

MYSQL_TYPE_DECIMAL Decimal

MYSQL_TYPE_NEWDECIMAL Decimal (MySQL 5.0 or later)

MYSQL_TYPE_TINY Tiny

MYSQL_TYPE_SHORT Short

MYSQL_TYPE_LONG Long

MYSQL_TYPE_FLOAT Float

MYSQL_TYPE_DOUBLE Double

MYSQL_TYPE_NULL Null

MYSQL_TYPE_TIMESTAMP Timestamp

MYSQL_TYPE_LONGLONG Long long

MYSQL_TYPE_INT24 Integer

MYSQL_TYPE_DATE Date

MYSQL_TYPE_TIME Time

MYSQL_TYPE_DATETIME Datetime

MYSQL_TYPE_YEAR Year

MYSQL_TYPE_NEWDATE Date (MySQL 5.0 or later)

MYSQL_TYPE_ENUM Enumeration

MYSQL_TYPE_SET Set

MYSQL_TYPE_TINY_BLOB Tiny Blob

MYSQL_TYPE_MEDIUM_BLOB Medium Blob

MYSQL_TYPE_LONG_BLOB Long Blob

MYSQL_TYPE_BLOB Blob

MYSQL_TYPE_VAR_STRING Varstring

MYSQL_TYPE_STRING String

MYSQL_TYPE_TINY Tiny (compatible with MYSQL_TYPE_CHAR)

MYSQL_TYPE_ENUM Enumeration (compatible with MYSQL_TYPE_INTERVAL)

MYSQL_TYPE_GEOMETRY Geometry

MYSQL_TYPE_BIT Bit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值