使用mysql-proxy实现读写分离

mysql-proxy实现MySQL读写分离

使用二进制格式的mysql-proxy的安装配置

  • mysql-proxy本身并不能进行读写分离,要实现读写分离要依赖于lua,所以要先查看是否安装了lua,如果没有安装使用yum install安装上即可

    ~]# rpm -q lua
    lua-5.1.4-4.1.el6.x86_64
  • 创建系统用户
    useradd -r mysql-proxy
  • 解压包创建链接文件
    tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/
    ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
  • 导出二进制程序
    ~]# vim /etc/profile.d/mysql-proxy.sh
    内容为:
    export PATH=/usr/loca/mysql-proxy/bin/:$PATH
    ~]# source  /etc/profile.d/mysql-proxy.sh
  • 查看mysql-proxy用法
    ~]# mysql-proxy --help-all
    #比较重要的选项有以下几个
    --daemon   #让mysql-proxy在后台工作
    --user=<user>  #指定运行mysql-proxy进程的属主
    --proxy-backend-addresses=<host:port>  #后端服务器
    --proxy-read-only-backend-addresses=<host:port>  #只允许读的后端服务器
    --log-level=(error|warning|info|message|debug) #指定日志级别
    --log-file=<file> #指定日志文件路径
    --plugins=<name>  #要加载的插件名,插件路径在/usr/local/mysql-proxy/lib/mysql-proxy/plugins,该路径下有一个libadmin.so的插件,可以用来管理后端服务器,还有libproxy.so的插件,启用proxy的功能
    --keepalive  #如果proxy崩溃了,就会尝试去重启proxy
    --proxy-lua-script=<file> #指定要使用的lua脚本文件,lua脚本路径在/usr/local/mysql-proxy/share/doc/mysql-proxy,该路径下有一个实现读写分离的lua脚本文件rw-splitting.lua
    --defaults-file #指定配置文件路径
  • 启用mysql-proxy
    ~]# mysql-proxy --daemon > --user=mysql-proxy > --log-level=debug > --log-file=/var/log/mysql-proxy.log > --plugins=proxy > --plugins=admin > --proxy-backend-addresses=172.25.78.2:3306 > --proxy-read-only-backend-addresses=172.25.78.3:3306 > --keepalive=true > --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua > --admin-username=admin > --admin-password=adminpass > --admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
  • 查看启用的端口
    ]# netstat -tan | grep :40
    tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN
    tcp        0      0 0.0.0.0:4041                 0.0.0.0:*                   LISTEN
    #4041是admin管理接口的端口,4040是mysql-proxy的端口

连接测试

  • 在代理服务器上(172.25.78.4)连接到管理接口查看有哪些后端服务器

    mysql -uadmin -padminpass -h172.25.78.4 --port=4041
    MySQL [(none)]> SELECT * FROM backends;
    +-------------+------------------+---------+------+------+-------------------+
    | backend_ndx | address          | state   | type | uuid | connected_clients |
    +-------------+------------------+---------+------+------+-------------------+
    |           1 | 172.25.78.2:3306 | unknown | rw   | NULL |                 0 |
    |           2 | 172.25.78.3:3306 | unknown | ro   | NULL |                 0 |
    +-------------+------------------+---------+------+------+-------------------+
  • 在master节点和slave节点上添加测试用户
    MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE ON *.* TO ‘test‘@‘192.168.182.%‘ IDENTIFIED BY ‘testpass‘;
  • 在客户端进行测试
    ~]# mysql -utest -ptestpass -h192.168.182.131 -P4040
    MariaDB [(none)]> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | MYDB               |
    | S_SC_C             |
    | db_user            |
    | discuz             |
    | dvwa               |
    | hello              |
    | mysql              |
    | performance_schema |
    | test               |
    | testdb             |
    +--------------------+
    MariaDB [(none)]> USE S_SC_C;
    MariaDB [S_SC_C]> INSERT INTO S_1(sname,sdept) VALUES (‘H‘,‘AA‘);
    MariaDB [S_SC_C]> SELECT * FROM S_1;
    +-----+-------+-------+
    | sid | sname | sdept |
    +-----+-------+-------+
    |   1 | HELLO | A     |
    |   2 | HE    | A     |
    |   3 | H     | AA    |
    +-----+-------+-------+
  • 在master上查看
    MariaDB [S_SC_C]> SELECT * FROM S_1;
    +-----+-------+-------+
    | sid | sname | sdept |
    +-----+-------+-------+
    |   1 | HELLO | A     |
    |   2 | HE    | A     |
    |   3 | H     | AA    |
    +-----+-------+-------+
  • 在slave上查看
    MariaDB [S_SC_C]> SELECT * FROM S_1;
    +-----+-------+-------+
    | sid | sname | sdept |
    +-----+-------+-------+
    |   1 | HELLO | A     |
    |   2 | HE    | A     |
    |   3 | H     | AA    |
    +-----+-------+-------+

原文地址:http://blog.51cto.com/12774272/2145954

时间: 2024-11-06 15:42:14

使用mysql-proxy实现读写分离的相关文章

MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)

Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从数据库处理SELECT查询操作.数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库. 1.设置说明 Master服务器: 192.168.41.196 Slave服务器: 192.168.41.197 Proxy服务器: 192.168.41.203 2.安装Mysql Pro

Windows操作系统下的MySQL主从复制及读写分离

一.主服务器(master)配置 1.修改MySQL配置文件my.ini [mysqld] log-bin=mysql-binlog-bin-index=mysql-bin.indexserver-id=1sync_binlog=1binlog_format=mixedbinlog-do-db=testbinlog-ignore-db=mysqlbinlog-ignore-db=performance_schemabinlog-ignore-db=information_schema 配置完成后

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

Amoeba+Mysql实现数据库读写分离

一.Amoeba 是什么 Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发.座落与Client.DB Server(s)之间.对客户端透明.具有负载均衡.高可用性.sql过滤.读写分离.可路由相关的query到目标数据库.可并发请求多台数据库合并结果. 主要解决: ? 降低 数据切分带来的复杂多数据库结构 ? 提供切分规则并降低 数据切分规则 给应用带来的影响 ? 降低db 与客户端的连接数 ? 读写分离 二.为什么要用Amoeba 目前要实现mysql的主从读写分离,主要有以下

Mysql主从配置+读写分离(转)

   MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl 一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz # cd cmake-3.0.0 # .

Mysql 主从复制,读写分离

Mysql 主从复制及读写分离 特别推荐看:amoeba.xml 的配置部分,在百度上看了很多配置都不完整,是我测试时的痛点 实验的目的: 有两部分:第一实现Mysql主从复制,第二实现读写分离. 下面是实验的环境: 192.168.58.11     安装了amoeba 的节点 192.168.58.16      master    系统:rhel 5.4 192.168.58.12      slave     系统: rhel 5.4 192.168.58.11      代理     

利用oneproxy部署mysql数据库的读写分离

实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel5-linux64-v5.6-ga 下载地址:http://pan.baidu.com/s/1jGpL2o2 实验拓扑: 注意:本实验是之前mysql-proxy实验的拓展,因此大部分环境及设定是相同的,其中一.二步这里不再重复,具体请参考:利用mysql-proxy进行mysql数据库的读写分离

Mysql主从配置+读写分离

Mysql主从配置+读写分离     MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 注:安装前须查看是否已经安装了如下依赖包,如果没有请安装. apt-get -y install gcc g++ libncurses5-dev ncurses-devel openssl   一.主库安装及配置 1.源码安装cmake # tar xf cmake-3.0.0.tar.gz #

Mysql主从复制、读写分离工作原理+配置

Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysqlinstance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端. MySQL 复制的基本过程如下: 1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开

MySQL 主从复制与读写分离

Mysql主从复制作用原理 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作.2.做数据的热备3.架构的扩展.业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能.mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记