Appearance
第21章 读写分离的利器——MySQL Proxy
学习目标 l Objective
MySQL Proxy 是一个位于客户端和 MySQL 服务器端之间的程序,通过它可以实现监听、管理客户端和 MySQL 服务器端之间的通信,最大的作用是实现数据库的读写分离,从而达到负载均衡的目的。本章节将学习使用 MySQL Proxy 的方法和技巧。
内容导航 l Navigation
- 了解 MySQL Proxy 的概述
- 掌握 MySQL Proxy的安装方法
- 掌握配置 MySQL Proxy 的方法
- 掌握配置 Path 变量的方法
- 掌握使用 MySQL Proxy 实现读写分离的方法
21.1 概述
MySQL Proxy 是一个位于客户端和 MySQL服务器端之间的程序,它可以监测、分析或改变客户端与服务器端之间的通信。 MySQL Proxy 最常用的用途包括负载平衡、故障分析、查询分析、查询过滤和修改等。
MySQL Proxy 作为一个中间层代理,通俗地说,它就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用程序来说, MySQL Proxy 是完全透明的,应用程序只需要连接到 MySQL Proxy 的监听端口即可。
MySQL Proxy 最强大的功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从数据库处理SELECT查询,最后通过数据库的复制功能,把事务性查询导致的数据变更同步到集群中的从数据库中。
MySQL Proxy 实现读写分离的过程如图21.1所示:
提示
如果此时只有一个 MySQL Proxy 机器,可能会出现单点失效的问题,解决办法是使用多个proxy机器作为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
MySQL Proxy 通过 mysql-proxy 来指定配置的参数,下面来了解下该命令常用参数的含义:
--proxy-backend-addresses
:该参数用来指定MySQL服务器的IP地址和端口号,如果代理多个服务器,可以用逗号分隔即可。--proxy-read-only-backend-addresses
:该参数用来指定只读服务器的IP地址和端口号,如果代理多个服务器,可以用逗号分隔即可。--proxy-skip-profling
:该参数用来设置是否禁用查询性能分析。--proxy-lua-script
:该参数用来指定 lua 脚本文件。--daemon
:采用daemon方式启动。--admin-address
:指定 MySQL Proxy 的管理端口。--proxy-address
:指定 MySQL Proxy 的监听端口。
读者也可以通过 mysql-proxy --help-all 查看完整的参数含义。