一、实验环境:

server1:master 172.24.54.1

server2:slave 172.25.54.2 主从复制

server3:mysql-proxy代理 172.25.54.3

此实验在mysql的主从复制的基础上进行, 需要配备好主从的环境

二、配置server3

[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mysql-proxy-0.8.5-linux-el6-x86-64bit  mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
[root@server3 ~]# cd /usr/local/mysql-proxy/
[root@server3 mysql-proxy]# ls
bin  include  lib  libexec  licenses  share
[root@server3 mysql-proxy]# mkdir conf
[root@server3 mysql-proxy]# mkdir logs
[root@server3 mysql-proxy]# vim ~/.bash_profile
[root@server3 mysql-proxy]# cat ~/.bash_profile
//修改第10行10 PATH=$PATH:$HOME/bin:/usr/local/mysql-proxy/bin
[root@server3 mysql-proxy]# source ~/.bash_profile
[root@server3 mysql-proxy]# vim conf/mysql-proxy.conf
[mysql-proxy]
user=root    //运行mysql-proxy进程的用户
proxy-address=0.0.0.0:3306  //监听本机所有地址的3306端口
proxy-backend-addresses=172.25.54.1:3306    //backend主   注意addresses
proxy-read-only-backend-addresses=172.25.54.2:3306   //backend从
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
//lua脚本地址
log-file=/usr/local/mysql-proxy/logs/mysql-proxy   //proxy日志路径
log-level=debug   //日志级别
daemon=true     //打入后台
keepalive=true   //在mysql-proxy崩溃时尝试重启之
[root@server3 mysql-proxy]# chmod 660 conf/mysql-proxy.conf
[root@server3 mysql-proxy]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
//修改最大最小链接数,最大链接两个, 超过则会读写分离38 if not proxy.global.config.rwsplit then39         proxy.global.config.rwsplit = {40                 min_idle_connections = 1,  41                 max_idle_connections = 2,42 43                 is_debug = false44         }
[root@server3 mysql-proxy]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
//启动mysql-proxy
[root@server3 mysql-proxy]# netstat -antpl

主库授权

mysql> grant all on *.* to 'root'@'%' identified by '5820hhXM!@#';
Query OK, 0 rows affected, 1 warning (0.37 sec)

三、测试

  • 物理机

//客户端1
[root@foundation54 ~]# mysql -h 172.25.54.3 -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.17-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)] select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
+----------+----------+
1 row in set (0.00 sec)MySQL [(none)] insert into test.userlist values ('user2','258');
Query OK, 1 row affected (0.34 sec)MySQL [(none)] select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
+----------+----------+
2 rows in set (0.00 sec)
  • server1

mysql> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
+----------+----------+
2 rows in set (0.00 sec)
  • server2

mysql> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
+----------+----------+
2 rows in set (0.00 sec)
  • server1、server2

    yum install -y lsof

//此时只有一个客户端开启
[root@server1 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2367 mysql   33u  IPv6  11154      0t0  TCP server1:mysql->server2:51784 (ESTABLISHED)
mysqld  2367 mysql   34u  IPv6  11108      0t0  TCP *:mysql (LISTEN)
mysqld  2367 mysql   62u  IPv6  11186      0t0  TCP server1:mysql->server3:44796 (ESTABLISHED)
[root@server1 ~]#
[root@server2 ~]# yum install -y lsof
[root@server2 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2841 mysql   32u  IPv6  11743      0t0  TCP *:mysql (LISTEN)
mysqld  2841 mysql   60u  IPv4  11809      0t0  TCP server2:51784->server1:mysql (ESTABLISHED)
[root@server2 ~]# 
  • 物理机

此时增加一个客户端链接——客户端2
//客户端2
[root@foundation54 ~]# mysql -h 172.25.54.3 -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.17-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
+----------+----------+
2 rows in set (0.00 sec)MySQL [(none)]> insert into test.userlist values ('user3','369');
Query OK, 1 row affected (0.15 sec)MySQL [(none)]> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
| user3    | 369      |
+----------+----------+
3 rows in set (0.00 sec)
  • server1、server2

//server1、server2
mysql> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
| user3    | 369      |
+----------+----------+
3 rows in set (0.00 sec)
//客户端1
MySQL [(none)]> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
| user3    | 369      |
+----------+----------+
3 rows in set (0.00 sec)
[root@server1 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2367 mysql   33u  IPv6  11154      0t0  TCP server1:mysql->server2:51784 (ESTABLISHED)
mysqld  2367 mysql   34u  IPv6  11108      0t0  TCP *:mysql (LISTEN)
mysqld  2367 mysql   50u  IPv6  11458      0t0  TCP server1:mysql->server3:44797 (ESTABLISHED)
mysqld  2367 mysql   62u  IPv6  11186      0t0  TCP server1:mysql->server3:44796 (ESTABLISHED)
[root@server1 ~]#
[root@server2 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2841 mysql   32u  IPv6  11743      0t0  TCP *:mysql (LISTEN)
mysqld  2841 mysql   60u  IPv4  11809      0t0  TCP server2:51784->server1:mysql (ESTABLISHED)
[root@server2 ~]# 
  • 物理机

此时增加一个客户端链接——客户端3
//客户端3
[root@foundation54 ~]# mysql -h 172.25.54.3 -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.17-log MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
| user3    | 369      |
+----------+----------+
3 rows in set (0.00 sec)
  • server1、server2

[root@server1 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2367 mysql   33u  IPv6  11154      0t0  TCP server1:mysql->server2:51784 (ESTABLISHED)
mysqld  2367 mysql   34u  IPv6  11108      0t0  TCP *:mysql (LISTEN)
mysqld  2367 mysql   50u  IPv6  11458      0t0  TCP server1:mysql->server3:44797 (ESTABLISHED)
mysqld  2367 mysql   62u  IPv6  11186      0t0  TCP server1:mysql->server3:44796 (ESTABLISHED)
[root@server1 ~]#
[root@server2 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2841 mysql   32u  IPv6  11743      0t0  TCP *:mysql (LISTEN)
mysqld  2841 mysql   48u  IPv6  12507      0t0  TCP server2:mysql->server3:47313 (ESTABLISHED)
mysqld  2841 mysql   60u  IPv4  11809      0t0  TCP server2:51784->server1:mysql (ESTABLISHED)
[root@server2 ~]# 

客户端3是与从库server2相连接的

在客户端3上写入,然后在server1即masetr上访问

//客户端3
MySQL [(none)]> insert into test.userlist values ('user4','666');
Query OK, 1 row affected (0.09 sec)MySQL [(none)]> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
| user3    | 369      |
| user4    | 666      |
+----------+----------+
4 rows in set (0.00 sec)
  • server1

mysql> select * from test.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 147      |
| user2    | 258      |
| user3    | 369      |
| user4    | 666      |
+----------+----------+
4 rows in set (0.00 sec)

虽然客户端3是与从库server2相连接的, 但是当在客户端3写入时,还是写入到了master上

yum install -y tcpdump 抓包工具, 可以在proxy端安装,抓包查看

mysql ——读写分离相关推荐

  1. proxy实现 mysql 读写分离

    实现 mysql 读写分离 图解: 环境: iptables 和 selinux 关闭 proxy:test2 172.25.1.2 Master: test3 172.25.1.3 Slave:te ...

  2. 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)

    当项目中数据库表越来越多,数据量也逐渐增多时,需要做数据库的安全和性能的优化.对于数据库的优化,可以选择使用MySQL读写分离实现. 1.MySQL主从同步 1.主从同步机制 1.1.主从同步介绍和优 ...

  3. asp.net mysql 读写分离_MySQL读写分离

    MySQL读写分离 1,为啥要读写分离? 系统到了高并发阶段,数据库一定要做的读写分离了,因为大部分的项目都是读多写少.所以针对这个情况,把写操作放一个主库,主库下挂多个从库处理读操作,这样就可以支撑 ...

  4. mysql读写分离,主从配置

    2019独角兽企业重金招聘Python工程师标准>>> 一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 ...

  5. php mysql读写分离主从复制_mysql主从复制 读写分离原理及实现

    主从复制,读写分离原理 在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的.无论是在安全性.高可用性还是高并发等各个方面都是完全不能满足实际需求的.因此,通过主从复制的 ...

  6. centos mysql卸载重装_提高性能,MySQL 读写分离环境搭建

    MySQL 读写分离在互联网项目中应该算是一个非常常见的需求了.受困于 Linux 和 MySQL 版本问题,很多人经常会搭建失败,今天松哥就给大伙举一个成功的例子,后面有时间再和大家分享下使用 Do ...

  7. sae mysql django_Django中MySQL读写分离技术

    最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类 ...

  8. mysql读写分离有用吗_MySQL的使用中实现读写分离的教程

    mysql-proxy实现读写分离 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括 ...

  9. mysql读写分离_Mysql数据库09MySQL读写分离

    Mysql数据库09-MySQL读写分离 一.读写分离应用案例分析 在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作.解决方法:配置多台数据库服务器以实现主从复制+读写分离. 二.读 ...

  10. mysql读写分离实现_脱离开发:Mysql读写分离方案之一

    案例:Mysql读写分离 技能目标: · 熟悉MySQL主从复制原理 · 熟悉MySQL读写分离原理 · 学会配置MySQL主从复制 · 学会配置MySQL读写分离 6.1 案例分析 6.1.1 案例 ...

最新文章

  1. 【转】Python3 (入门6) 库的打包与安装
  2. linux下数据库的基本管理,数据库的管理_linux 运维之道 基础篇的技术博客_51CTO博客...
  3. WebService它CXF注释错误(两)
  4. php生成临时文件,使用PHP处理内存中的存档(无需在磁盘上创建临时文件)
  5. 功能测试代码python_如何使您的Python代码更具功能性
  6. LeetCode题解
  7. cocos2d-x for xna创建动画-人物行走
  8. 直播丨云原生数据库PolarDB年度发布
  9. 如何删除旧的和未使用的Docker映像
  10. Android系统中用C语言来编写服务程序并且开机自启动运行服务
  11. 转-挂载raw和qcow2格式的KVM硬盘镜像
  12. 三种常用的MySQL建表语句
  13. 漫画网站java_基于jsp的漫画网站-JavaEE实现漫画网站 - java项目源码
  14. 复盘2020:那些崛起的公司
  15. 初学,这个报错怎么解决
  16. 通过IP地址绘制信息地图(Python+PowerBI+MapBox)
  17. atob()和btoa() 进行base64的编码和解码
  18. 001.宋浩老师《线性代数》笔记(第一章行列式)
  19. 用vs20008生成MFC项目,测试wince
  20. Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例

热门文章

  1. Bapi-BAPI_GOODSMVT_CREATE【该物料不可能有库存记帐】
  2. 为维护视图创建事物码
  3. 盘式制动系统卡钳分类
  4. 家用轿车轮胎多久更换一次?
  5. ABAP开发如何动态的实现任意表的ALV显示
  6. 海尔智家股市被看好,增长逻辑令人深思
  7. 网游服务端php5.1时间戳格式化,php格式化时间戳显示友好时间的简单示例
  8. 通过插件自动将maven项目打成jar包的同时将当前项目依赖的第三方Jar包一起打包
  9. BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]
  10. CTF-杂项与密码学之工具使用汇总(二)