• MySQL:读写分离原理和实践


    前言

    读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

    读写分离原理

    目前较为常见的MySQL读写分离方式有:

    1. 程序代码内部实现
    2. 引入中间代理层MySQL_proxy、Mycat

    第一种就是客户端内部实现自定义的基于TCP的数据协议,简称MySQL协议,但读写操作特别多,耗时大,如果在客户端直接由代码直接控制,那么就和这个主从环境强相关了,某个库挂掉了,也不好监测,所以直接用代码实现不太合适。

    所以本次使用Mycat。数据端口:8066,管理端口:9066

    如图中的代理服务器,就是中间件Mycat,同样需要遵循MySQL通信协议,配置Mycat可以:一主一从、一主多从、多主多从。
    如图中的写操作就是主库,下面的读操作是两个从库,那么他们之间的同步就是需要主从复制,在上篇文章中有讲到。

    Mycat功能强大,如果配置的一主多从,该主库挂掉,那么会将一个从库设置成供读操作的主库。
    在这里插入图片描述

    多主多从:Mycat后面多挂几套环境就行。

    如果某个主库挂掉,则其相应的从库也就不能用,那么Mycat会自动切换到第二套环境,所以说读写分离有高可用,容灾能力,这一切都归功于Mycat。

    在这里插入图片描述

    读写分离实践配置

    首先要强调的是,读写分离的前提是有主从复制。

    主从复制的配置:【点此查看】

    先查看主从复制是否正常
    在这里插入图片描述

    Mycat配置

    条件:

    master(centos7):192.168.131.129
    slave(win10):192.168.31.27

    1、JDK1.7版本以上(java -version检查jdk环境),因为Mycat是Java写的

    检查环境

    在这里插入图片描述

    2、MySQL的root账户有远程访问权限
    设置支持ip远程连接
    mysql默认只能通过localhost访问,不能通过ip远程访问,主要考虑安全的问题。如果在集群分布式环境中单独部署mysql,就需要设置通过ip远程访问了

    在这里插入图片描述
    上面显示可以看到,mysql默认只支持localhost访问。

    在这里插入图片描述

    通过ip地址远程连接mysql如下:

    mysql -h 172.20.10.3 -u root -p123456

    安装Mycat:
    Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz(工具上传到linux,tar -zxvf解压)
    解压放到/usr/local/mycat目录下
    ./mycat start启动服务,默认在8066和9066端口

    在这里插入图片描述
    在这里插入图片描述

    配置Mycat账号信息:

    在这里插入图片描述

    USERDB是逻辑库,Mycat操作的就是这个逻辑库,逻辑库映射到具体的后端的库,有多个逻辑库的话用逗号隔开
    在这里插入图片描述

    vi mycat/conf/schema.xml

    配置逻辑库和数据源、续写分离、分库分表信息等

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    balance:
    “0”:不开启读写分离
    “1”:全部的readHost和stand by writeHost参与select语句的负载
    “2”:所有读操作随机在readHost和writeHost上分发
    “3”:所有读请求随机分发到writeHost对应的readHost上执行

    writeType=“0”:所有写操作发送到配置的第一个writeHost,第一个挂掉切换到还生存的第二个
    writeHost
    switchType:
    “-1”:不自动切换
    “1”:自动切换,根据心跳select user()
    “2”:基于MySQL的主从同步状态决定是否进行切换 show slave status

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    9066端口登录示例:

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    8066端口示例

    在这里插入图片描述

    如图,这个之前说过是逻辑库,映射对应的主库
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    数学家陶哲轩在形式证明帮助下发现论文中错误
    设计模式:02观察者模式--labview实现
    肠道微生物群与帕金森以及相关影响因素
    JavaWeb、Web核心
    Python学习笔记--面向对象的概念
    【CesiumforUnreal插件】UE5 快速构建Cesium场景 快速入门!!!
    图像分类(五) 全面解读复现ResNet
    git学习
    Android:kotlin中Gson与JSON的泛型映射解析
    [原创]解决老款AMD CPU在Win10/Win11无故重启的问题.
  • 原文地址:https://blog.csdn.net/m0_56257585/article/details/126282742