Skip to content

第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 查看完整的参数含义。

21.2 安装与配置

21.2.1 下载与安装MySQL Proxy

21.2.2 配置MySQL Proxy参数

21.2.3 配置Path变量

21.3 使用MySQL Proxy实现读写分离

21.4 专家解惑

21.5 经典习题