文章目录

  • 1. MySQL读写分离
  • 2. MySQL-proxy实现读写分离

1. MySQL读写分离

Mysql的主从复制和Mysql的读写分离两者有着紧密联系。

  • 首先部署主从复制,只有主从复制完了,才能在此基础上进行数据的读写分离。Master数据库处理事务性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而让Slave数据库处理SELECT操作。
  • MYSQL读写分离前提是基于MYSQL主从复制,这样可以保证在Master上修改数据,Slave同步之后,WEB应用可以读取到Slave端的数据。
  • 简单来说,读写分离就是只在主服务器上写,只在从服务器上读。
  • 基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库

2. MySQL-proxy实现读写分离

实验环境

主机名 IP 服务器
server1 172.25.42.1 master mysqld
server2 172.25.42.2 slave mysqld
server3 172.25.42.3 mysql-proxy 相当于代理
物理机 172.25.42.250 测试

基于gtid的异步复制(主从复制)。在server3上面:搭建proxy代理服务器(实现客户端写在server1上面、客户端读server2上的数据)

步骤一:解压mysql-proxy的tar包到/usr/local,做软连接

tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/   加压到指定目录下
ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy

步骤二:新建一个配置文件的目录,创建配置文件

cd /usr/local/mysql-proxy
mkdir conf
cd conf/
vim mysql-proxy.conf      ##编写服务的配置文件[mysql-proxy]
proxy-address=0.0.0.0:3306    ##mysql-proxy运行的端口
proxy-read-only-backend-addresses=172.25.42.2:3306   ##slave节点:只读
proxy-backend-addresses=172.25.42.1:3306    ##master节点:可读可写
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua   ##lua脚本的路径
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid 进程pid的位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log    ##日志位置
plugins=proxy
log-level=debug    ##定义日志级别
keepalive=true     ##mysql-proxy崩溃时尝试重启
daemon=true        ##打入后台


步骤三:修改数据库发生读写分离时的最大和最小连接数

把原来的4和8改为1和2,默认超过4个连接才会启动读写分离,改为2个便于测试。

vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua


步骤四:创建日志文件和进程pid文件所在的目录

[root@server3 mysql-proxy]# cd /usr/local/mysql-proxy/
[root@server3 mysql-proxy]# ls
[root@server3 mysql-proxy]# mkdir log建立目录,存放进程pid和日志


步骤五:启动mysql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf


此时报错:

  • 原因: 配置文件权限过大
  • 更改方法: 修改文件权限
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf

再次启动

步骤六:查看日志

cd /usr/local/mysql-proxy/log/
ls
mysql-proxy.log  mysql-proxy.pid
cat mysql-proxy.log ##查看日志

此时可以看到两个节点都加进来了,server3的proxy配置完成!!

测试

步骤一:物理机中安装mariadb

步骤二:在server1上面:创建新的用户并且授权

mysql -uroot -pDrn+19961126mysql> grant insert,update,select on *.* to drn@'%' identified by 'Drn+19961126';           #新建一个用户并对他授权
mysql> flush privileges; #刷新授权表
mysql> use nn;
mysql> create table userinfo (-> username varchar(10) not null,-> password varchar(15) not null);
mysql> desc userinfo;        #查看表结构

步骤三:server3安装lsof

yum install lsof

步骤四:在物理机上,打开一个shell以drn用户来连接数据库

mysql -h 172.25.42.3 -udrn -pDrn+19961126

多开物理机然后连接一次在server3上losf -i 3306一次,直到出现server2(发现开始读写分离(用户多的时候))

步骤五:在server3上,用lsof命令对mysql的端口3306进行监测,列出谁在使用3306端口:lsof -i:3306

我们在物理机上再打开两个shell来连接数据库,就可以看到 前两次的连接都指向server1,第三次的连接指向server2,说明启动了读写分离。

步骤六:在物理机上,插入数据

MySQL [nn]> insert into userinfo values ('okokj','75156321');
MySQL [nn]> select * from userinfo;

此时slave被关闭
此时slave被打开

linux企业实战 --MySQL数据库之读写分离相关推荐

  1. linux企业实战 --MySQL数据库之组复制

    文章目录 实验环境 组复制前需要清空mysql环境 server1配置 server2配置 server3配置 测试 实验环境 hostname IP server1 172.25.42.1 mast ...

  2. 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?

    徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离? 完成:第一遍 1.理想的主从架构实现的效果是怎样的? 主库负责所有读写操作,从库只实现对主库备份功能,这样的主从架构性价比是很低的 ...

  3. 基于amoeba实现mysql数据库的读写分离/负载均衡

    更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn) 一.Amoeba的简述:[来自百度百科]      Amoeba是一个以MySQL为底层数据存储,并对应用提供MyS ...

  4. MySQL数据库mycat读写分离

    mycat读写分离 Mycat的读写分离是建立在Mysq的主从复制的基础上的 修改配置文件 schema.xml <?xml version="1.0"?> <! ...

  5. MySQL数据库:读写分离

    一.读写分离的原理: 1.实现原理: 读写分离解决的是,数据库的写操作,影响了查询的效率,适用于读远大于写的场景.读写分离的实现基础是主从复制,主数据库利用主从复制将自身数据的改变同步到从数据库集群中 ...

  6. Mysql数据库的读写分离

    读写分离,即在主数据库中进行写操作(也可以进行增.删.改操作),在从数据库中进行读操作.在正常情况下,我们对主数据库进行的是增.删.改.查操作,数据库的写入时间比较长,而查询时间短,所以为了提高数据库 ...

  7. Atlas实现MySQL数据库的读写分离

    在实现了mysql的主从配置后,博主这里准备实现一下mysql的读写分离 这里我选择的是360团队的Atlas作为代理当然还可以使用mycat,one proxy,proxySQL等等开源的中间件,有 ...

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

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

  9. Django项目配置mysql主从数据库实现读写分离

    1.在配置文件中添加slave数据库的配置 DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',   ...

最新文章

  1. XML解析简介及Xerces-C++简单使用举例
  2. Android Binder 学习笔记
  3. 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型
  4. 机器学习笔记(十五)规则学习
  5. boost::hana::make_pair用法的测试程序
  6. [蓝桥杯][算法提高VIP]开灯游戏(dfs)
  7. 微型计算机接口技术与汇编语言课后答案
  8. c++future 配合httplib post 高级技巧
  9. 自动生成mybatisplus的相关代码
  10. 内存分配-堆-栈-静态区
  11. 导出PDF /home/education/font/simsun.ttc not found as file or resource.
  12. redis 中pipline,mset, mget使用对比
  13. rust修改礼包时间_Rust Async: futures-timer源码解析
  14. Blizzard的MPQ文件格式搜索算法
  15. TimestampUtil时间处理工具类
  16. 小程序加载网络图片404错误,使用默认图片替换
  17. 索爱j10 java,张崇:索爱J10怎么样呢?
  18. (吊灯止损和YOYO止损) --- ATR作为入场工具的应用示例
  19. Numpy中的数组、行/列向量及其之间的转化
  20. 明远智睿5G工业网关 5G物联网人工智能

热门文章

  1. 车联网中基于轨迹预测的无人机动态协同优化覆盖算法
  2. SQL Server系统数据库介绍
  3. 新媒体短视频运营面试经验
  4. FPGA调试过程中识别不到设备Labtoolstcl 44-494
  5. 重装系统后如何恢复php环境
  6. 愿自己的能力够配的上自己的野心
  7. awk 根据分隔符解析文件并取值
  8. Windows10 自带壁纸
  9. 奋斗的一生(谨以此文献给自己和所有正在奋斗的人!)
  10. 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验