五一假期,有个博友给我发邮件,说我的这篇blog:http://bobwu.blog.51cto.com/2918362/537077 只能通过程序员在程序中实现读写分离,咨询能否实现程序员无察觉的读写分析,呵呵,我明白意思。回答是肯定的,可以实现,这里面就用到了Mysql-proxy的功能。我在测试环境下搭建了一下,把过程写出来,大家看看,依旧不提供截图,仅提供命令行,方便大家粘贴复制:

Mysql-proxy安装配置:

装mysql-proxy.需要按下列顺序安装其所依赖的包:

(一)安装LUA

#tar zxvf lua-5.1.tar.gz

#cd lua-5.1

用vi修改Makefile,使"INSTALL_TOP=/usr/local/lua",这样做的目的是为了是lua的所有文件都安装在目录/usr/local/lua/

#make posix

#make install

装 libevent

#tar zxvf libevent-1.1a.tar.gz

#cd libevent-1.1a

#./configure --prefix=/usr/local/libevent

#make

#make install

装check

#tar zxvf check-0.8.4.tar.gz

#cd check-0.8.4

#./configure

#make

#make install

置安装mysql-proxy所需的环境变量.把下面的内容追加到/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"

然后执行 source /etc/profile (安装完mysql-proxy不再需要这些变量,可以删除之)

装mysql(只安装mysql客户端即可)

#tar zxvf  mysql-5.0.45.tar.gz

#cd mysql-5.0.45

#./configure --prefix=/usr/local/mysql  --without-server

#make

#make install

装mysql-proxy

#tar zxvf mysql-proxy-0.5.0.tar.gz

#cd mysql-proxy-0.5.0

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

#make

#make install

补充:主要的命令行选项

--help-all显示所有的帮助选项

--admin-address=host:port 管理主机及端口,默认是4041

--proxy-address=host:port 代理服务器的监听地址及端口,默认4040

--proxy-read-only-address=host:port 只读连接时,代理服务器的监听地址及端口。默认4042

--proxy-backend-addresses=host:port连接真实服务器的地址及监听端口,默认是3306,这是mysql代理最重要的选项,多个主机之间用空格隔开。使用rr算法。

--proxy-lua-script=file 指定lua脚本的名称

置使用方法

2个mysql服务器的情形,本方案情景

mysql-proxy \

--proxy-backend-addresses=mysql_ip1:3306 \

--proxy-backend-addresses=mysql_ip2:3306

3个服务器的情形:一个主服务器,负责写入;2个从服务器,负责查询,依次类推。

mysql-proxy --proxy-backend-addresses=<master_ip> :3306\

--proxy-read-only-address=<slave_ip1>:3306 \

--proxy-read-only-address=<slave_ip2>:3306

动mysql-proxy

编写脚本/usr/local/bin/mysql-proxy.sh其内容如下:

#!/bin/bash

LUA_PATH="/usr/local/mysql-proxy/share/mysql-proxy/?.lua" mysql-proxy --proxy-read-only-backend-addresses=<salve_IP>:3306 --proxy-
backend-addresses=<master_IP>:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log &

chmod 755 /usr/local/bin/mysql-proxy.sh;

执行命令/usr/local/bin/mysql-proxy.sh启动服务

能测试

1、主从复制测试:在主数据库服务器上创建库和表,然后再插入记录,再登陆到从服务器,看是否也建立相一致的库和表以及记录。

mysql> create database hichina_db;

Query OK, 1 row affected (0.01 sec)

在主数据库服务器创建库hichina_db

mysql> create table hichinaren_tb(id int(3),name char(10));

Query OK, 0 rows affected (0.00 sec)

在主数据库服务器创建表hichinaren_db

mysql> insert into first_tb values (001,'bob');

Query OK, 1 row affected (0.00 sec)

在主数据服务器的表hichinaren_db中插入记录

现在转到从数据库服务器,看是否同步了上面主数据库的数据

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| hichina_db           |

| mysql              |

| test               |

+--------------------+

4 rows in set (0.01 sec)

数据库自动生成了

mysql> use hichina_db;
Database changed

mysql> show tables;
+--------------------+
| Tables_in_first_db |
+--------------------+
| hichinaren_tb           | 
+--------------------+
1 row in set (0.00 sec)

表也自动生成了

mysql> select * from hichinaren_tb;
+------+--------+
| id   | name   |
+------+--------+
|    1 | bob    | 
+------+--------+
1 row in set (0.00 sec)

记录存在。

2、读写分离:用mysql客户端程序如mysql登陆到mysql代理,然后执行读写操作,以测试读写分离的正确性。

转载于:https://blog.51cto.com/bobwu/558161

Mysql实现非程序控制读写分离相关推荐

  1. 数据库应用——Atlas代理MySQL集群实现读写分离

    Atlas代理MySQL集群实现读写分离 一.Atlas简介和架构 1.1 环境准备 1.2 配置时间服务器 二.主服务器配置 2.1 master节点1的配置 2.2 master节点2的配置 2. ...

  2. MySQL之——MSS主从复制(读写分离)实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52746393 前面,在博文<MySQL之--MS主从复制(读写分离)实现&g ...

  3. (含PPT)MySQL托管服务架构及读写分离的优化

    关注我们获得更多内容 内容来源:2017 年 08 月 24 日,微软中国首席产品经理宋青见在"ODF 2017开源数据库论坛(北京)"进行<云原生的MySQL托管服务架构及 ...

  4. MySQL数据库主从复制与读写分离(图文详解!)

    目录 前言 一:MySQL数据库主从复制与读写分离 1.什么是读写分离? 2.为什么要读写分离呢? 3.什么时候要读写分离? 4.主从复制与读写分离 5.mysql支持的复制类型 (1)STATEME ...

  5. 【纯干货】Amoeba实现MySQL主从同步与读写分离

    [纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...

  6. mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc

    sharding-sphere是强大的读写分离.分表分库中间件,sharding-jdbc是sharding-sphere的核心模块.官方网站 springboot项目中集成sharding-jdbc ...

  7. mysql主从复制中间件_linux下mysql主从复制(第二篇读写分离) mycat 中间件

    linux下mysql主从复制(第二篇读写分离) mycat 中间件 接着上篇文档补全,mysql 读写分离,在上篇文章案例下准备好Mycat-server-1.4-release-201510192 ...

  8. MySQL的主从复制与读写分离技术实例(一)主从复制

    系统版本:CentOS 6.5   MySQL版本:mysql-5.5.38 生产环境下,如果对同一个数据库服务器即做写服务又做读服务,无论是从安全性.高可用性还是高并发等各个角度都不能满足实际需求, ...

  9. mysql主从和mycat读写分离的安装及验证

    目录 一.背景介绍 二.安装mysql数据库(主从机器都需要先这样安装) 三.主从机配置 1.主服务器进行如下操作 2.从服务器进行如下操作 四.代理服务器安装和配置mycat读写分离 五.主从复制. ...

最新文章

  1. 关于std::string 在 并发场景下 __grow_by_and_replace free was not allocated 的异常问题
  2. 微软披露拓扑量子计算机计划!
  3. C# 虚函数和重载函数
  4. linux 内核阻塞,linux内核阻塞IO
  5. 退一步 - 王阳明的心学智慧
  6. Python中的条件语句和循环语句
  7. window oracle 只有bak文件怎么恢复_Oracle 11g R2 RAC数据库备份通过RMAN恢复到单实例数据库实现...
  8. [转载]android设置全屏和无标题
  9. Delphi:ADOConnection连接SQLServer自动断网问题解决
  10. 顶级MySQL主从复制企业应用
  11. linux_nmon监控教程,如何使用Nmon监控Linux系统性能
  12. ajax向php传参数对数据库操作
  13. ubuntu shell 直接输入密码
  14. iOS研发助手DoraemonKit技术实现(一)
  15. TP-LINK无线上网短信Wifi认证配置流程
  16. 随机生成手机号的java代码
  17. 信号与系统——抽样信号的傅里叶变换
  18. 03-平方矩阵的快速解法
  19. uniapp使用IPA苹果支付
  20. c语言 椭圆,C语言画圆椭圆

热门文章

  1. 用Asp.net 传送大文件
  2. C++中#error/assert/static_assert的区别及使用
  3. 【Dlib】dlib实现深度网络学习之 input层
  4. 男孩子学计算机和学医哪个好,你认为学医好还是读211大学的电子信息好?
  5. linux获取最高权限并取消_Linux 更新glibc 漏洞 可以获取最高权限
  6. java数组中怎么去重_java数组去重怎么弄???大神来解
  7. java 泛型对象实例化_在java中实例化泛型类型
  8. 有n个学生选修了c语言程序设计这门课程,C语言程序设计报告学生选修课系统(18页)-原创力文档...
  9. python 打印皮卡丘_Python到底是什么?学姐靠它拿了5个offer
  10. android mac测试地址,android获取有线网的Mac地址