实现 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 读写分离相关推荐

  1. Proxy实现MySQL读写分离

    MySQL读写分离是指让master处理写操作,让slave处理读操作,非常适用于读操作量比较大的场景,可减轻master的压力. 使用mysql-proxy实现mysql的读写分离,mysql-pr ...

  2. 分布式mysql proxy 360_mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离

    当前位置: IT大杂烩 > JavaScript > mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离 mysql-proxy之奇虎360 Atlas 安装实现m ...

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

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

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

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

  5. atlas mysql 读写分离_MySQL读写分离工具Atlas

    大家好,我是anyux.本文介绍MySQL读写分离工具Atlas. Atlas介绍 原来mha构架下有三台服务器,利用率只有30%,可以使用Atlas数据库中间件提高服务器利用率.即利用从库读,主库写 ...

  6. mysql读写分离和分布式_MySQL主从复制与读写分离

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  7. mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离

    前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...

  8. mysql读写分离实战

    一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database proxy database集群 在本次实战中,应用程序client基于c3p0连接后端的database ...

  9. MySQL 读写分离 部分_一个完整的mysql读写分离环境包括以下几个部分

    一个完整的mysql读写分离环境包括以下几个部分: ?应用程序client ?database proxy ?database集群 在本次实战中,应用程序client基于c3p0连接后端的databa ...

最新文章

  1. Jquery源码解析-设计理念
  2. android入门知识,android基础知识学习笔记
  3. bootstrat 设置 select option 选项的值
  4. ARC078F - Mole and Abandoned Mine(状压DP)
  5. java整体打印二叉树
  6. 使用BFC块级上下文
  7. python经典笔试、面试题-01
  8. WF从入门到精通(第十章):事件活动 (转)
  9. Socket开发框架之框架设计及分析
  10. SHA256算法原理详解图
  11. 委托、事件 茴字有几种写法
  12. ActiveMQ的MQTT:WARN | Stealing link for clientId XXX From Connection Transport
  13. 【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
  14. 做数据分析必看的书有哪些?
  15. python爬虫分析豆瓣中最新电影的影评
  16. EMMC 擦除组的理解
  17. 机器学习强基计划6-1:图文详细总结马尔科夫链及其性质(附例题分析)
  18. PID算法控制的PWM调速
  19. g6的minimap中的配置_g6 基本
  20. 服务器无线密码是什么原因,有密码为什么连不上wifi

热门文章

  1. html脱机不显示图片,Python绘图脱机图表嵌入HTML(不工作)
  2. 选择器优先级_CSS选择器优先级指北
  3. 判断数组里面的下标是否等于一个字符串
  4. React.js绑定this的5种方法
  5. Springboot 中 Mybatis 的使用
  6. Cocoa pods的安装
  7. 优化应用启动时的体验
  8. 【Big Data】HADOOP集群的配置(一)
  9. 【动态规划】最长公共子序列与最长公共子串
  10. 基于OpenCasCade的程序发布问题