mysql proxy是什么
MySQL Proxy,顾名思义,是MySQL的代理工具,它坐落于客户端与服务器端之间。正因其独特的位置,它具备了众多实用功能。
mysql proxy能做什么
由于数据在送达服务器之前,需先通过mysql代理进行过滤,因此在此环节我们可以实施多项操作,同时这一过程对客户端而言是隐蔽无感的。
负载均衡、查询分析、查询过滤、查询监控、查询修改等,这些是它常见的应用场景。至于其他用途,那就取决于你的想象力了。
怎么安装mysql proxy
MySQL Proxy是MySQL官方推出的辅助软件,用户可从官方网站进行下载并安装,该网站的具体链接为:
。
依据我们所采用的操作系统来选择相应的版本,鉴于我正使用的是Linux系统,因此我下载的是适用于Linux的版本。
解压完压缩包后,需将文件逐一移动至指定文件夹,以下为我在安装过程中所使用的指令:。
执行以下命令,将mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit目录下的所有文件,以归档模式复制到/usr/local/目录中:cp,参数-a,源目录mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit,星号*,目标目录/usr/local/。
安装后我们执行以下命令就可以看到它的使用帮助:
请运行位于本地路径/usr/local/bin的mysql-proxy程序,并使用其帮助命令。
怎么配置mysql proxy
若需将正在执行的SQL语句进行打印,以便观察其配置情况。
首先执行以下命令创建配置目录
创建目录 /usr/local/etc/mysql-proxy。
然后创建脚本文件:
在本地路径/usr/local/etc/mysql-proxy中,存在一个名为proxy.lua的文件,其内容如下:
局部变量proto被赋予了一个值,该值是通过调用require函数并传入字符串"mysql.proto"来从模块中导入的。
local prep_stmts = { }
function read_query( packet )
局部变量cmd_type被赋值为数据包中的字节值。
若命令类型等于代理查询类型。
print(string.sub(packet, 2))
io.flush()
若命令类型等于代理的预编译语句类型,
代理查询:向列表中添加元素1,包含数据包,并设置结果集需求为开启状态。
return proxy.PROXY_SEND_QUERY
若命令类型等于代理库中的执行语句类型,
代理查询:向列表中添加元素2,附带数据包,并设置结果集需求为开启状态。
return proxy.PROXY_SEND_QUERY
若命令类型等于代理模块的COM_STMT_CLOSE类型,
代理查询:向列表中添加元素(索引为3),元素内容为数据包,并附带条件(结果集需求为真)。
return proxy.PROXY_SEND_QUERY
end
end
执行查询结果读取操作,针对输入参数inj进行。
if inj.id == 1 then
本地语句准备 = 确保从输入查询的协议语句准备数据包中提取
输出提示:准备阶段:%s,格式化输出语句准备文本。
若inj的结果集原始字节数为0,则。
确保本地语句准备成功,即通过断言从输入结果集的原始数据中提取的协议语句准备响应包正确无误。
print(("< PREPARE: stmt-id = %d (resultset-cols = %d, params = %d)"):format(
stmt_prepare_ok.stmt_id,
stmt_prepare_ok.num_columns,
stmt_prepare_ok.num_params))
prep_stmts[stmt_prepare_ok.stmt_id] = {
num_columns = stmt_prepare_ok.num_columns,
num_params = stmt_prepare_ok.num_params,
}
end
elseif inj.id == 2 then
local stmt_id = assert(proto.stmt_id_from_stmt_execute_packet(inj.query))
local stmt_execute = assert(proto.from_stmt_execute_packet(inj.query, prep_stmts[stmt_id].num_params))
print((">执行操作:语句编号为%d的语句将被执行(引用编号:%d)。
若语句执行模块的新参数已被绑定。
遍历stmt_execute.params中的每个元素,分别获取索引ndx和值v。
输出格式为:(" [%d] %s (类型 = %d)"):通过format函数处理,其中包含索引值ndx,转换为字符串的值v.value,以及类型标识v.type。
end
end
elseif inj.id == 3 then
确保从输入查询中提取的关闭语句包,通过断言操作成功转换为本地语句关闭变量。
输出结果为:"> 关闭:语句ID为%d",其中%d代表stmt_close对象的stmt_id属性。
在stmt_close的stmt_id对应的索引位置,将prep_stmts数组中的元素设置为nil。
end
end
然后创建配置文件:
在位于本地路径`/usr/local/etc/mysql-proxy`的`proxy.conf`文件中,具体内容如下:
[mysql-proxy]
log-level=info
请将此处的代理后端地址设置为192.168.99.1端口13357,同时确保替换为您的MySQL服务器具体地址。
代理Lua脚本路径设置为:/usr/local/etc/mysql-proxy/proxy.lua
然后修改配置文件权限:
执行命令更改文件权限,具体为将路径为/usr/local/etc/mysql-proxy/proxy.conf的文件权限设置为660。
最后执行以下命令启动程序:
执行命令:在本地路径/usr/local/bin下运行mysql-proxy程序,指定配置文件为/usr/local/etc/mysql-proxy/proxy.conf。
怎么使其服务化并开机自启动
为了实现开机自动启动功能并确保由系统统一管理,我们必须创建一个服务配置文档,并确保该文档在系统启动时自动执行。
首先我们创建服务配置文件:
/etc///mysql-proxy.,内容如下:
[Unit]
描述:MySQL代理服务器
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
启动命令位于/usr/local/bin目录下,执行的是mysql-proxy程序,其配置文件路径为/usr/local/etc/mysql-proxy下的proxy.conf。
KillSignal=SIGTERM
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后启动应用程序并使其开机自启动:
sysctemctl start mysql-proxy
sysctemctl enable mysql-proxy
下次服务器启动时就会自启动mysql-proxy服务了。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1