问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

MySQL Proxy怎样配置lua脚本来实现对SQL语句的拦截和修改?

发布网友 发布时间:2022-04-23 16:59

我来回答

2个回答

热心网友 时间:2022-04-07 19:13

Mysql Proxy Lua读写分离设置是本文要介绍的内容,主要是来了解Mysql Proxy的Mysql 分离设置,为了未来MySQL读写分离的需要, 先行对MySQL官方的Mysql Proxy产品进行了初步测试. 以下是测试过程,二进制版Mysql Proxy可以去下载。
1、设置说明
Master服务器: 192.168.41.196 Slave服务器: 192.168.41.197 Proxy服务器: 192.168.41.203

2、安装Mysql Proxy
在Proxy服务器上安装即可. 如果源码方式安装, 需提前安装pkg-config,libevent,glibc,lua等依赖包, 非常麻烦, 建议直接使用二进制版.
# cd /u01/software/mysql # tar -zxvf Mysql Proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz -C /usr/local # cd /usr/local # ln -s Mysql Proxy-0.8.1-linux-rhel5-x86-32bit Mysql Proxy # vi + ~/.bash_profile export PATH=$PATH:/usr/local/Mysql Proxy/bin/ # . ~/.bash_profile

3、Mysql Proxy选项说明
# Mysql Proxy help-all

管理功能选项:
admin-address=host:port 指定一个mysqo-proxy的管理端口, 缺省是4041; admin-username=<string> username to allow to log in admin-password=<string> password to allow to log in admin-lua-script=<filename> script to execute by the admin plugin

代理功能选项:
-P, proxy-address=<host:port> 是Mysql Proxy 服务器端的监听端口, 缺省是4040; -r, proxy-read-only-backend-addresses=<host:port> 只读Slave的地址和端口, 缺省为不设置; -b, proxy-backend-addresses=<host:port> 远程Master地址和端口, 可设置多个做failover和load balance, 缺省是127.0.0.1:3306; proxy-skip-profiling 关闭查询分析功能, 缺省是打开的; proxy-fix-bug-25371 修正 mysql的libmysql版本大于5.1.12的一个#25371号bug; -s, proxy-lua-script=<file> 指定一个Lua脚本来控制Mysql Proxy的运行和设置, 这个脚本在每次新建连接和脚本发生修改的的时候将重新调用;

其他选项:
defaults-file=<file>配置文件, 可以把Mysql Proxy的参数信息置入一个配置文件里; daemon Mysql Proxy以守护进程方式运行 pid-file=file 设置Mysql Proxy的存储PID文件的路径 keepalive try to restart the proxy if it crashed, 保持连接启动进程会有2个, 一号进程用来监视二号进程, 如果二号进程死掉自动重启proxy.

4、数据库准备工作
(1)安装半同步补丁(建议)
读写分离不能回避的问题之一就是延迟, 可以考虑Google提供的SemiSyncReplication补丁.
(2)给用户授权
在Master/Slave建立一个测试用户, 因为以后客户端发送的SQL都是通过Mysql Proxy服务器来转发, 所以要确保可以从Mysql Proxy服务器上登录MySQL主从库.
mysql> grant all privileges on *.* to 'u_test'@'192.168.41.203' identified by 'xxx' with grant option;

(3)在Master建立测试表
mysql> create table db_test.t_test (col varchar(10)); mysql> insert into db_test.t_test values ('testA'); mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | +-+

5、Mysql Proxy启动
(1)修改读写分离lua脚本
默认最小4个最大8个以上的客户端连接才会实现读写分离, 现改为最小1个最大2个:
# vi +40 /usr/local/Mysql Proxy/share/doc/Mysql Proxy/rw-splitting.lua connection pool if not proxy.global.config.rwsplit then proxy.global.config.rwsplit = { min_idle_connections = 1, max_idle_connections = 2, is_debug = true } end

这是因为Mysql Proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上.
(2)启动Mysql Proxy
建议使用配置文件的形式启动, 注意配置文件必须是660权限, 否则无法启动. 如果有多个Slave的话, proxy-read-only-backend-addresses参数可以配置多个以逗号分隔的IP:Port从库列表.
# killall Mysql Proxy # vi /etc/Mysql Proxy.cnf [Mysql Proxy] admin-username=wangnc admin-password=iamwangnc admin-lua-script=/usr/local/Mysql Proxy/lib/Mysql Proxy/lua/admin.lua proxy-backend-addresses=192.168.41.196:3351 proxy-read-only-backend-addresses=192.168.41.197:3351 proxy-lua-script=/usr/local/Mysql Proxy/share/doc/Mysql Proxy/rw-splitting.lua log-file=/var/tmp/Mysql Proxy.log log-level=debug daemon=true keepalive=true # chmod 660 /etc/Mysql Proxy.cnf # Mysql Proxy defaults-file=/etc/Mysql Proxy.cnf # ps -ef | grep Mysql Proxy | grep -v grep root 1869 1 0 18:16 ? 00:00:00 /usr/local/Mysql Proxy/libexec/Mysql Proxy defaults-file=/etc/Mysql Proxy.cnf root 1870 1869 0 18:16 ? 00:00:00 /usr/local/Mysql Proxy/libexec/Mysql Proxy defaults-file=/etc/Mysql Proxy.cnf # tail -50f /var/tmp/Mysql Proxy.log

6、客户端连接测试
(1)先停止Slave的复制进程
mysql> stop slave;

(2)连接Proxy端口, 插入数据
# mysql -uu_test -pxxx -h192.168.41.203 -P4040 -Ddb_test mysql> insert into db_test.t_test values ('testB'); mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | | testB | +-+

(3)多开几个客户端, 连接Proxy端口, 查询数据
# mysql -uu_test -pxxx -h192.168.41.203 -P4040 -Ddb_test mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | +-+

如果查询不到上步新插入的数据, 说明连接到了Slave, 读写分离成功. 在同一线程再插入数据并验证:
mysql> insert into db_test.t_test values ('testC'); mysql> select * from db_test.t_test; +-+ | col | +-+ | testA | +-+

发现insert操作成功, 但是select不出刚插入的数据, 说明同一线程也读写分离成功. 从日志中可以验证:
# tail -50f /var/tmp/Mysql Proxy.log ... [read_query] 192.168.41.203:45481 current backend = 0 client default db = db_test client username = u_test query = select * from db_test.t_test sending to backend : 192.168.41.197:3351 is_slave : true server default db: db_test server username : u_test in_trans : false in_calc_found : false COM_QUERY : true [read_query] 192.168.41.203:45481 current backend = 0 client default db = db_test client username = u_test query = insert into db_test.t_test values ('testC') sending to backend : 192.168.41.196:3351 is_slave : false server default db: db_test server username : u_test in_trans : false in_calc_found : false COM_QUERY : true

(4)测试完毕后, 启动Slave的复制进程
mysql> start slave;

7、正式环境说明
1、Mysql Proxy当前还只是个测试版, MySQL官方还不建议用到生产环境中;
2、Mysql Proxy的rw-splitting.lua脚本在网上有很多版本, 但是最准确无误的版本仍然是源码包中所附带的rw-splitting.lua脚本, 如果有lua脚本编程基础的话, 可以在这个脚本的基础上再进行优化;
3、Mysql Proxy实际上非常不稳定, 在高并发或有错误连接的情况下, 进程很容易自动关闭, 因此打开keepalive参数让进程自动恢复是个比较好的办法, 但还是不能从根本上解决问题, 因此通常最稳妥的做法是在每个从服务器上安装一个Mysql Proxy供自身使用, 虽然比较低效但却能保证稳定性;
4、Amoeba for MySQL是一款优秀的中间件软件, 同样可以实现读写分离, 负载均衡等功能, 并且稳定性要大大超过Mysql Proxy, 建议大家用来替代Mysql Proxy, 甚至MySQL-Cluster.
小结:详解Mysql Proxy Lua读写分离设置的内容介绍完了,希望通过本文的学习能对你有所帮助!追问兄弟不要复制好不好,这篇文章我看过了

热心网友 时间:2022-04-07 20:31

为什么?
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
某某随书赠品有尺子吗 海尔双开门冰箱排水孔堵塞疏通方法 海尔双开门冰箱排水孔在哪? 18岁后追讨抚养费可以吗 民法典中子女成年是不是能追讨抚养费 在杭州城站火车站下,离火车站最近K525路公交站台有多远?怎么走?知道... 会泽人民医院可以看男科吗? 杭州城站到525公交站具体怎么走 在杭州城站火车站下,离火车站最近K525路公交站台怎么走(麻烦具体点... 从杭州城站火车站出来,然后去k525站牌怎么走 1200元,买什么电脑笔记本最好 mysql5.6.20如何开启分区功能 有谁知道戴尔1200笔记本怎样换CPU? 如何让mysql主从复制宕机后主动链接 1200左右能买个什么样配置的笔记本电脑啊?大家给出个主意,本人对笔记本电脑不是太懂! 理光MP2014AD 打印机有网卡 如何设置网络扫描? s71200与笔记本电脑连接步骤 mysql复制基本原理流程是什么? 联想笔记本500-15acz 本人小白不懂,这二手本怎么样?可以玩游戏吗,1200值的吗 如果数据库主从半同步复制主库挂了怎么办 梦到自己结婚,还得到了一大包喜糖,其中有很多松子,麻烦高手解梦~~ 买1200左右的笔记本电脑玩游戏是不是很卡。 mysql 5.6半同步复制 如果slave挂了,是不是写不进去了 梦见松子是黑色的是什么意思? 1200淘宝二手笔记本电脑怎么样,可以用吗,是不是假的 mysql 同步问题,目前是做成环状,但是其中一台断了的时候,有些就不想同步了。 1200元左右的笔记本电脑 现在我在学习MySQL,问问怎么复制粘贴数据库 做梦梦见有人送我松籽是什么意思,好不好。 想买一台1200快左右的笔记本电脑,哪款比较好求大神? 1200元能买什么配置的笔记本电脑? 震旦打印机扫描显示没有网络 戴尔笔记本电脑vostor1200的HOME键怎么用? 如何设置mysql主从同步时间间隔 linux 你好。 咨询一下,我的戴尔VOSTRO1200笔记本电脑,不能同时接上电源适配器和电池,怎么办? 价格1200多的二手笔记本电脑(配置一般),这可信么? 戴尔VOSTRO 1200 笔记本电脑怎样安装Windows XP系统 徐州恒大食品黑蒜怎么样?有什么特点? 二手的惠普笔记本8840p,1200。值这个价钱么?我买电脑的话大概就是做下ppt之类的。 黑蒜养生效果如何?哪里可以买到黑蒜? 1200人民币可以买个什么配置的二手笔记本电脑 黑蒜哪个牌子好 什么牌子的黑蒜好 1200块钱能买什么配置的笔记本电脑。二手的。 笔记本电脑1200pIPS屏比1080p高清屏好很多吗? 继老干妈之后,为何又一中国“特产”黑蒜在美国火了? 黑蒜究竟是哪里的特产? 山东黑蒜特产地有新冠疫情吗? 怎么在局域网通过打印机扫描文件? 江苏徐州和山东枣庄有什么特产可以送人? 怎样在局域网通过打印机扫描文件?
  • 焦点

最新推荐

猜你喜欢

热门推荐