mysql ——读写分离
一、实验环境:
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 ——读写分离相关推荐
- proxy实现 mysql 读写分离
实现 mysql 读写分离 图解: 环境: iptables 和 selinux 关闭 proxy:test2 172.25.1.2 Master: test3 172.25.1.3 Slave:te ...
- 项目性能优化(MySQL读写分离、MySQL主从同步、Django实现MySQL读写分离)
当项目中数据库表越来越多,数据量也逐渐增多时,需要做数据库的安全和性能的优化.对于数据库的优化,可以选择使用MySQL读写分离实现. 1.MySQL主从同步 1.主从同步机制 1.1.主从同步介绍和优 ...
- asp.net mysql 读写分离_MySQL读写分离
MySQL读写分离 1,为啥要读写分离? 系统到了高并发阶段,数据库一定要做的读写分离了,因为大部分的项目都是读多写少.所以针对这个情况,把写操作放一个主库,主库下挂多个从库处理读操作,这样就可以支撑 ...
- mysql读写分离,主从配置
2019独角兽企业重金招聘Python工程师标准>>> 一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 ...
- php mysql读写分离主从复制_mysql主从复制 读写分离原理及实现
主从复制,读写分离原理 在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的.无论是在安全性.高可用性还是高并发等各个方面都是完全不能满足实际需求的.因此,通过主从复制的 ...
- centos mysql卸载重装_提高性能,MySQL 读写分离环境搭建
MySQL 读写分离在互联网项目中应该算是一个非常常见的需求了.受困于 Linux 和 MySQL 版本问题,很多人经常会搭建失败,今天松哥就给大伙举一个成功的例子,后面有时间再和大家分享下使用 Do ...
- sae mysql django_Django中MySQL读写分离技术
最近需要用到Django的MySQL读写分离技术,查了一些资料,把方法整理了下来. 在Django里实现对MySQL的读写分离,实际上就是将不同的读写请求按一定的规则路由到不同的数据库上(可以是不同类 ...
- mysql读写分离有用吗_MySQL的使用中实现读写分离的教程
mysql-proxy实现读写分离 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括 ...
- mysql读写分离_Mysql数据库09MySQL读写分离
Mysql数据库09-MySQL读写分离 一.读写分离应用案例分析 在企业用户中,在大量的数据请求下,单台数据库将无法承担所有读写操作.解决方法:配置多台数据库服务器以实现主从复制+读写分离. 二.读 ...
- mysql读写分离实现_脱离开发:Mysql读写分离方案之一
案例:Mysql读写分离 技能目标: · 熟悉MySQL主从复制原理 · 熟悉MySQL读写分离原理 · 学会配置MySQL主从复制 · 学会配置MySQL读写分离 6.1 案例分析 6.1.1 案例 ...
最新文章
- 【转】Python3 (入门6) 库的打包与安装
- linux下数据库的基本管理,数据库的管理_linux 运维之道 基础篇的技术博客_51CTO博客...
- WebService它CXF注释错误(两)
- php生成临时文件,使用PHP处理内存中的存档(无需在磁盘上创建临时文件)
- 功能测试代码python_如何使您的Python代码更具功能性
- LeetCode题解
- cocos2d-x for xna创建动画-人物行走
- 直播丨云原生数据库PolarDB年度发布
- 如何删除旧的和未使用的Docker映像
- Android系统中用C语言来编写服务程序并且开机自启动运行服务
- 转-挂载raw和qcow2格式的KVM硬盘镜像
- 三种常用的MySQL建表语句
- 漫画网站java_基于jsp的漫画网站-JavaEE实现漫画网站 - java项目源码
- 复盘2020:那些崛起的公司
- 初学,这个报错怎么解决
- 通过IP地址绘制信息地图(Python+PowerBI+MapBox)
- atob()和btoa() 进行base64的编码和解码
- 001.宋浩老师《线性代数》笔记(第一章行列式)
- 用vs20008生成MFC项目,测试wince
- Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例
热门文章
- Bapi-BAPI_GOODSMVT_CREATE【该物料不可能有库存记帐】
- 为维护视图创建事物码
- 盘式制动系统卡钳分类
- 家用轿车轮胎多久更换一次?
- ABAP开发如何动态的实现任意表的ALV显示
- 海尔智家股市被看好,增长逻辑令人深思
- 网游服务端php5.1时间戳格式化,php格式化时间戳显示友好时间的简单示例
- 通过插件自动将maven项目打成jar包的同时将当前项目依赖的第三方Jar包一起打包
- BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]
- CTF-杂项与密码学之工具使用汇总(二)