proxy实现 mysql 读写分离
实现 mysql 读写分离
图解:
环境:
iptables 和 selinux 关闭
proxy:test2 172.25.1.2
Master: test3 172.25.1.3
Slave:test4 172.25.1.4
环境已经实现 test3(master) 和 test4(slave) 的主从复制
Server2:
[root@test2 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@test2 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C
/usr/local
[root@test2 ~]# cd /usr/local
[root@test2 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
[root@test2 local]# vim ~/.bash_profile
[root@test2 local]# source ~/.bash_profile //使环境变量生效
[root@test2local]# cd /usr/local/mysql-proxy/share/doc/mysql-proxy
[root@test2mysql-proxy]# vim rw-splitting.lua //修改读写分离 lua 脚本
mysql proxy 会检测客户端连接, 当连接没有超过 max_idle_connections 值时, 不会进
行读写分离, 即查询操作会发生到 master 上。
[root@test2 local]# cd /usr/local
[root@test2 local]# cd mysql-proxy
[root@test2 mysql-proxy]# mkdir conf
[root@test2 mysql-proxy]# cd conf
[root@test2 conf]# vim mysql-proxy.conf[mysql-proxy]
user=root
proxy-address=0.0.0.0:3306
proxy-backend-addresses=172.25.254.11:3306
proxy-read-only-backend-addresses=172.25.254.12:3306
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalived=true
[root@test2conf]#mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@test2 conf]# mkdir ../logs
[root@test2 conf]# chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf //配置文件必须是 660 权限
[root@test2 conf]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf //再次执行启动配置文件
[root@test2 conf]# netstat -antlp //查看端口
主备 mysql 开启服务
Test3 和 test4 都需要做解压 mysql 并已搭建好主备模式
Test3:
mysql> grant insert,update on westos.* to cxx@'%' identified by '@Caoxingxing123';
mysql> show master status;
mysql> show slave status;
Test4:
mysql> stop slave;
mysql>change master to master_host='172.25.1.3',master_user='repl',master_password='@Caoxingxing123', master_auto_position=1;
mysql> start slave
mysql> show slave status\G;
Test3:
mysql> show databases;
mysql> CREATE DATABASE westos;
mysql> USE westos;
mysql> CREATE TABLE userlist(
-> username varchar(10) not null,
-> password varchar(30) not null
-> );
mysql> select * from userlist;
Test4:
mysql> show databases;
mysql> use westos;
mysql> select * from userlist; //数据库已经同步过来了
客户端测试:
[root@foundation1 ~]# mysql -u root -h 172.25.1.2 -p //会出现如下情况
ERROR 1045 (28000): Unknown error 1045
//注意:root 用户需要在 master 和 slave 做授权
test3 和 test4 都需要执行
mysql> grant insert,update on westos.* to cxx@'%' identified by '@Caoxingxing123';
//再次尝试登陆
[root@foundation1 ~]# mysql -h 172.25.1.2 -u cxx -p westos
MySQL [(none)]> use westos;
MySQL [westos]> show tables;
MySQL [westos]> insert into userlist values('user1','111');
MySQL [westos]> select * from userlist; //只能写不能读
master 和 slave 端都可以查看到刚插入的数据
Test3:
Test4:
当连接一个时:
test3:通过监控查看连接情况
[root@test3 ~]# yum install lsof -y
[root@test3 ~]# lsof -i :3306 //下载所需的监控
test4:通过监控查看连接情况
[root@test4 ~]# yum install lsof -y
[root@test4 ~]# lsof -i :3306
当连接两个时:
[kiosk@foundation1 ~]$ mysql -h 172.25.1.2 -u cxx -p westos //加一个
Test3:
[root@test3 mysql]# lsof -i :3306
Test4:
[root@test4 mysql]# lsof -i :3306
当连接三个时(此时已超过最大连接数):
[kiosk@foundation1 ~]$ mysql -h 172.25.1.2 -u cxx -p westos
Test3:
Test4:
此时在最后一个连接的客户端写数据
MySQL [westos]> insert into userlist values ('user2','222');
Test3 查看数据:
Test4 查看数据:
实现了读写分离,当读数据的时候第三个连接到的是test4 ,但
写数据时自动连接 test3 从而保存数据。
总结:
首先连接的是 master,所以此时是对 master 读写,还没有读写分离,只有当连接数
大于设置的最大连接数时才会出现读写分离。
之前设置了最大连接数为 2,最小连接数为 1。所以默认为当连接数(客户端访问量)
为 1 时,连接的是 master,连接数为 2 时,连接的也是 master;只有当连接数大于 2 时,
后面连接的为 slave,且当读的时候访问的是 slave,写的时候访问的是 master(原因是:
master 和 slave 主从同步是单向的,所以写数据的时候如果写到 slave,slave 是不会同步
给 master 的。读的话就可以,因为数据的一致性, slave 和 master 的数据始终是相同的)。
proxy实现 mysql 读写分离相关推荐
- Proxy实现MySQL读写分离
MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力. 使用mysql-proxy实现mysql的读写分离,mysql-pr ...
- 分布式mysql proxy 360_mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
当前位置: IT大杂烩 > JavaScript > mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离 mysql-proxy之奇虎360 Atlas 安装实现m ...
- mysql读写分离,主从配置
2019独角兽企业重金招聘Python工程师标准>>> 一个完整的mysql读写分离环境包括以下几个部分: 应用程序client database proxy database集群 ...
- mysql读写分离有用吗_MySQL的使用中实现读写分离的教程
mysql-proxy实现读写分离 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括 ...
- atlas mysql 读写分离_MySQL读写分离工具Atlas
大家好,我是anyux.本文介绍MySQL读写分离工具Atlas. Atlas介绍 原来mha构架下有三台服务器,利用率只有30%,可以使用Atlas数据库中间件提高服务器利用率.即利用从库读,主库写 ...
- mysql读写分离和分布式_MySQL主从复制与读写分离
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...
- mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离
前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...
- mysql读写分离实战
一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database ...
- MySQL 读写分离 部分_一个完整的mysql读写分离环境包括以下几个部分
一个完整的mysql读写分离环境包括以下几个部分: ?应用程序client ?database proxy ?database集群 在本次实战中,应用程序client基于c3p0连接后端的databa ...
最新文章
- Jquery源码解析-设计理念
- android入门知识,android基础知识学习笔记
- bootstrat 设置 select option 选项的值
- ARC078F - Mole and Abandoned Mine(状压DP)
- java整体打印二叉树
- 使用BFC块级上下文
- python经典笔试、面试题-01
- WF从入门到精通(第十章):事件活动 (转)
- Socket开发框架之框架设计及分析
- SHA256算法原理详解图
- 委托、事件 茴字有几种写法
- ActiveMQ的MQTT:WARN | Stealing link for clientId XXX From Connection Transport
- 【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
- 做数据分析必看的书有哪些?
- python爬虫分析豆瓣中最新电影的影评
- EMMC 擦除组的理解
- 机器学习强基计划6-1:图文详细总结马尔科夫链及其性质(附例题分析)
- PID算法控制的PWM调速
- g6的minimap中的配置_g6 基本
- 服务器无线密码是什么原因,有密码为什么连不上wifi