热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysqlproxy实现读写分离

背景:如下图所示,主要通过mysql-proxy实现对两台mysql服务器的读写分离操作,两台mysql提供的测试数据库内容一致(这里主要通过手工同步两台mysql测试数据库的内容

   背景:如下图所示,主要通过mysql-proxy实现对两台mysql服务器的读写分离操作,两台mysql提供的测试数据库内容一致(这里主要通过手工同步两台mysql测试数据库的内容,没有使用mysql主从,主要是方便测试)

 

技术分享 

一、环境软件

1、 安装pkg-config 

[root@web1 srv]yum install pkgconfig

2、安装glib2

[root@web1 src]yum install glib2 

3、安装 libevent
[root@web1 srv]tar zxvf libevent-1.4.14b-stable.tar.gz
[root@web1 libevent-2.0.22-stable]./configure --prefix=/usr/local/libevent
[root@web1 libevent-2.0.22-stable]make
[root@web1 libevent-2.0.22-stable]make install

4安装mysql-devel安装mysql开发包

[root@web1 src]yum install mysql-devel  

5LUA

yum install -y readline-devel ncurses-devel

[root@web1 src]wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

[root@web1 src]#tar -zxvf lua-5.3.1.tar.gz

[root@web1 lua-5.3.1]# vim Makefile

INSTALL_TOP= /usr/local/lua

[root@web1 lua-5.3.1]make linux

[root@web1 lua-5.3.1]make install

如果你的服务器是64位的,这时要调整一下Makefilevi src/Makefile,在CFLAGS里加上-fPIC,否则会出错

 

6、设置mysql-proxy运行的环境变量

Vim /etc/profile

export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"

export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"

export PKG_CONFIG_PATH=/usr/lib/pkgconfig  #rpm -ql pkgconfig查看其安装路径

然后执行 source /etc/profile

 

二、Mysql-proxy安装

 

Wget ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz

[root@web1 mysql-proxy-0.8.4]#

./configure --prefix=/usr/local/mysql-proxy --with-lua

[root@web1 mysql-proxy-0.8.4]make

[root@web1 mysql-proxy-0.8.4]make install

 

设置mysql-proxy环境变量

Vim /etc/profile

export PATH=$PATH:/usr/local/mysql-proxy/bin

Source /etc/profile

 

查看安装信息

[root@web1 mysql-proxy-0.8.4]# mysql-proxy -V

mysql-proxy 0.8.4

  chassis: 0.8.4

  glib2: 2.28.8

  libevent: 2.0.22-stable

  LUA: Lua 5.1.4

    package.path: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua

    package.cpath: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.so

-- modules

  proxy: 0.8.4

三、mysql-proxy读写分离测试

1、读,写数据库信息一致

技术分享 

 

2、192.168.1.121192.168.1.124mysql-proxy授权

mysql> grant all on jiang.* to ‘proxyuser‘@‘192.168.1.120‘ identified by ‘jiang‘;

 

3、配置mysql-proxy,实现读写分离(后台启动该程序&

 

mysql-proxy --proxy-read-only-backend-addresses=192.168.1.124:3306 

--proxy-backend-addresses=192.168.1.121:3306 

--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" &

 

[root@web1 lib]# netstat -an | grep 4040     //确保已经启动了mysql-proxy

tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN

 

vim /usr/local/mysql-proxy/lib/rw-splitting.lua 

proxy.global.config.rwsplit = { 

   min_idle_connections = 1,       

   max_idle_connections = 2,        

   is_debug = false 

}

说明:这是因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上(可通过show processlist查询连接情况)

 

参数说明:

--proxy-read-only-backend-addresses=192.168.1.124:3306 \ //定义后端只读从服务器地址
--proxy-backend-addresses=192.168.1.121:3306 \ //定义后端主服务器地址
--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" \ //定义lua读写分离脚本路径

 

4、远程连接mysql-proxy

[root@web1 lib]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

技术分享 

 

5、插入数据,分析读写情况

mysql> INSERT INTO `jiang`.`personal_info` (`pi_id` ,`pi_name` ,`pi_tel` ,`pi_qq` ,`pi_email`)

VALUES (‘2‘, ‘mysqlproxy‘, ‘111111111111‘, ‘22222222‘, ‘test@mysqlproxy.com‘);

 

5.1 此次检查192.168.1.121192.168.1.124的数据库jiang的情况。

192.168.1.121:如下数据

技术分享 

192.168.1.124:如下数据

技术分享 

 

说明:在192.168.1.120 mysql-proxy上,写的数据在192.168.1.121,而192.168.1.124没有写入数据。

 

接下来,为了实现分离状态的查看,需要重新打开客户端重新连接mysql-proxy,如下所示

 

[root@mysql ~]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

 

如下所示,表示读取的数据库,那么该数据中并没有新插入的数据,其原因在于此时读取的数据在192.168.1.124上,而根据测试环境,192.168.1.124为只读数据库,所以插入的数据并没有写入到192.168.1.124上。

技术分享 


Mysql-proxy 实现读写分离


推荐阅读
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
author-avatar
更东陌飞絮蒙蒙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有