当前位置: 首页 > news >正文

使用mysql-proxy代理服务器上的mysql.sock连接以及mysql-proxy的配置意义及配置示例

一、使用mysql-proxy代理服务器上的mysql.sock连接

    线上的mysql服务器只能使用本地的mysql.sock进行连接,非常不方便,于是想找一个中间代理来操作,之前使用过haproxy这种中间proxy,很好用。但haproxy上没有试过使用mysql.sock连接,当然mysql-proxy上的socker连接我也没有试过,但mysql-proxy毕竟是专门 的mysql proxy,我想应该会支持吧。也正好没出我所料,mysql-proxy可以支持后端直接mysql.sock文件连接。

    MySQL-Proxy是一个在client端和MySQL Server间的中间层代理,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。

    MySQL Proxy除了可以当做一个连接池外,还能通过使用lua脚本实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。另外MySQL Proxy还能实现读写分离,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。

    MySQL-Proxy官网的下载地址:MySQL :: Download MySQL Proxy (Archived Versions)  安装如下:

#找到对应的版本下载MySQL-Proxy,直接执行即可启用
root@h127:/opt/mysql-proxy# wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
root@h127:/opt/mysql-proxy# tar zxvf mysql-proxy-0.8.5-linux-debian6.0-x86-64bit.tar.gz
root@h127:/opt/mysql-proxy# mv mysql-proxy-0.8.5-linux-debian6.0-x86-64bit/* ./ ; cd bin
root@h127:/opt/mysql-proxy/bin# mysql-proxy --proxy-address=10.10.22.22:3307 --proxy-backend-addresses=path_to_mysql.sock --plugins=proxy
#在其它的服务器上即可进行连接
root@h191:/data$ mysql -h 10.10.22.22 -P 3307 -u read_user

二、mysql-proxy的配置意义及配置示例

    mysql-proxy下载下来之后,在share/doc/mysql-proxy目录中存放了各种lua文件代码示例,包括读写分享的rw-splitting.lua文件。而在另一个目录lib/mysql-proxy/plugins下存放着一些插件,比如admin,proxy插件。进入到mysql-proxy目录,执行bin/mysql-proxy --help-all可查看所有的设置选项。

root@h127:/opt/mysql-proxy$ bin/mysql-proxy --help-all
Usage:mysql-proxy [OPTION...] - MySQL Proxy
Help Options:-?, --help                                              Show help options--help-all                                              Show all help options--help-proxy                                            Show options for the proxy-module
proxy-module-P, --proxy-address=<host:port>                         listening address:port of the proxy-server (default: :4040)-r, --proxy-read-only-backend-addresses=<host:port>     address:port of the remote slave-server (default: not set)-b, --proxy-backend-addresses=<host:port>               address:port of the remote backend-servers (default: 127.0.0.1:3306)--proxy-skip-profiling                                  disables profiling of queries (default: enabled)--proxy-fix-bug-25371                                   fix bug #25371 (mysqld > 5.1.12) for older libmysql versions-s, --proxy-lua-script=<file>                           filename of the lua script (default: not set)--no-proxy                                              don't start the proxy-module (default: enabled)--proxy-pool-no-change-user                             don't use CHANGE_USER to reset the connection coming from the pool (default: enabled)--proxy-connect-timeout                                 connect timeout in seconds (default: 2.0 seconds)--proxy-read-timeout                                    read timeout in seconds (default: 8 hours)--proxy-write-timeout                                   write timeout in seconds (default: 8 hours)
Application Options:-V, --version                                           Show version--defaults-file=<file>                                  configuration file--verbose-shutdown                                      Always log the exit code when shutting down--daemon                                                Start in daemon-mode--user=<user>                                           Run mysql-proxy as user--basedir=<absolute path>                               Base directory to prepend to relative paths in the config--pid-file=<file>                                       PID file in case we are started as daemon--plugin-dir=<path>                                     path to the plugins--plugins=<name>                                        plugins to load--log-level=(error|warning|info|message|debug)          log all messages of level ... or higher--log-file=<file>                                       log all messages in a file--log-use-syslog                                        log all messages to syslog--log-backtrace-on-crash                                try to invoke debugger on crash--keepalive                                             try to restart the proxy if it crashed--max-open-files                                        maximum number of open files (ulimit -n)--event-threads                                         number of event-handling threads (default: 1)--lua-path=<...>                                        set the LUA_PATH--lua-cpath=<...>                                       set the LUA_CPATH

较重要的选项功能描述如下:
[mysql-proxy]  - 此为配置文件的第一行,不能少,如果少了就会报错:failed: Key file does not start with a group
--admin-address=host:port — 指定mysqo-proxy管理端口,缺省是4041
--proxy-address=host:port — 指定mysql-proxy服务端监听端口,缺省是4040
--proxy-read-only-backend-addresses=<host:port> - 读写分享只读后端
--proxy-backend-addresses=host:port — 后端MySQL服务器地址和端口,可设置多个。并且允许使用mysql.sock文件路径。
--proxy-skip-profiling — 关闭查询分析功能,缺省是打开的
--proxy-fix-bug-25371 — 修正 mysql的libmysql版本大于5.1.12的一个#25371号bug
--proxy-lua-script=file — 指定Lua脚本来控制mysql-proxy的运行
--daemon — mysql-proxy以守护进程方式运行
--pid-file=file — 设置mysql-proxy的存储PID文件的路径
--plugin-dir=<path> — 指定插件的路径
--plugins=<name> — 加载的插件,一般proxy即是代理功能;还有admin管理功能
--event-threads — 事件处理线程的个数
--log-file — 指定日志文件
--log-level — 指定日志级别

mysql-proxy配置文件示例

user@n171:/etc$ sudo cat mysql-proxy.conf 
[mysql-proxy]
user=tiger
daemon=true
keepalive=true
plugins=proxy,admin
log-level=info
log-file=/opt/mysql-proxy/logs/mysql-proxy.log
proxy-address=10.10.22.11:3399
proxy-backend-addresses=/data/mysql.sock
admin-address=10.10.22.11:3388
admin-username=proxy_admin
admin-password=123456
#如果上面的plugins里加了admin,下面一定要加上amin-lua-script
admin-lua-script=/data/mysql-proxy/lib/mysql-proxy/lua/admin.lua

SQL处理如下:

user@n171:/etc$ sudo cat mysql-proxy.conf 
[mysql-proxy]
user=tiger
daemon=true
keepalive=true
plugins=proxy,admin
log-level=info
log-file=/opt/mysql-proxy/logs/mysql-proxy.log
proxy-address=10.10.22.11:3399
proxy-backend-addresses=/data/mysql.sock
admin-address=10.10.22.11:3388
admin-username=proxy_admin
admin-password=123456
#如果上面的plugins里加了admin,下面一定要加上amin-lua-script
admin-lua-script=/data/mysql-proxy/lib/mysql-proxy/lua/admin.luaroot@n171:/lua# mysql -h 10.10.22.11 -P 3308 -u proxy_admin -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> select * from help
+------------------------+------------------------------------+
| command                | description                        |
+------------------------+------------------------------------+
| SELECT * FROM help     | shows this help                    |
| SELECT * FROM backends | lists the backends and their state |
+------------------------+------------------------------------+
2 rows in set (0.00 sec)mysql> SELECT * FROM backends;
+-------------+-----------------+-------+------+------+-------------------+
| backend_ndx | address         | state | type | uuid | connected_clients |
+-------------+-----------------+-------+------+------+-------------------+
|           1 | /opt/mysql.sock | up    | rw   | NULL |                 1 |
+-------------+-----------------+-------+------+------+-------------------+
1 row in set (0.00 sec)

http://www.mrgr.cn/news/30876.html

相关文章:

  • linux基础-完结(详讲补充)
  • 【go从零单排】迭代器(Iterators)
  • 自动驾驶安全方向论文阅读
  • 【数据结构】【C语言】求树(或森林)的叶子结点数、求树(或森林)的高度
  • 企业级大数据安全架构
  • CentOS8.4 部署 k8s 1.31.2
  • BLE 协议之链路层
  • 将Python工程打成可执行文件
  • 上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用
  • STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)
  • Python知识点:Python内存管理与优化
  • 第五届“马栏山杯”国际音视频算法大赛创新应用赛投票环节正式启动啦!
  • 支付宝开放平台-开发者社区——AI 日报「9 月 20 日」
  • 面试了50场AIGC,才总结出这190+个问题答案
  • 新手引导|小程序开发指南基础篇(二)
  • Android 如何使用jdk命令给应用/APK重新签名。
  • 深度理解servlet容器、servlet应用、servlet三者的关系
  • 大数据时代:历史、发展与未来
  • 黑科技网址推荐:特殊功能的工具网址
  • 滚雪球学SpringCloud[6.1讲]: Spring Cloud Sleuth详解
  • 【TPAMI 2024】如何让模型在任何环境下都能胜出?领域泛化学习从单一到多元!
  • 24:RTC实时时钟
  • 【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)
  • 第十九节:学习WebFlux与前端响应式-非阻塞-流式通讯(自学Spring boot 3.x的第四天)
  • 平价头戴式蓝牙耳机有哪些?四款公认平价性能超强品牌机型推荐
  • 第六天旅游线路预览——从景区门口到天山天池