码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据库(mysql)主从复制与读写分离


    目录

    一、主从复制原理

    1、mysql 支持的复制类型

    2、主从复制的原理 ☆

    3、mysql主从复制方式

    3.1、异步复制(Async Replication)

    3.2、同步复制(Sync Replication)

    3.3、 半同步复制(Semi-Sync Replication)

    3.4、增强半同步复制(lossless Semi-Sync Replication、无损复制)

    二、主从复制实验

    0、数据流向图

    1、Mysql主从服务器时间同步

    1.1 主服务时间同步

    1.2 从服务器时间同步 

    2、主服务器的mysql配置 

    3、 slave从服务器的配置

    3.1 报错扩展 Slave_IO_Running: No的原因

    3.2 遇到Slave_SQL_Running:NO的情况

    4、验证主从服务器效果 

    5、 在原有的主从服务器上在加一台从服务器slave2

    5.1 时间同步

    5.2  配置slave2的mysql配置文件

    5.3 将主服务器数据导入到从服务器中

    5.4 在主服务器上查看当前偏移量

    5.5 在从slave2服务器上配置与master服务器进行数据同步

    5.6  在主服务器上解锁表

    5.7 验证主从复制 

    三、读写分离实验

    1、前期环境及数据流向图

    2、Amoeba服务搭建

    2.1 JDK环境安装

    2.2 Ameoba服务安装

    2.3 将三台mysql主从服务器设置权限 

    2.4 修改主配置文件 amoeba.xml

    2.5 修改数据库配置文件 dbServers.xml

    2.6 启动amoeba服务

    3、客户机测试验证 

    3.1 验证写入是否从master主机写入

    3.2 测试是否读写分离

    3.3 测试读的时候,是否是以轮询方法 

    四、总结

    1、主从复制

    2、读写分离


    一、主从复制原理

    在企业应用中,成熟的业务通常数据量都比较大。单台MySQL在安全性、高可用性和高并发高并发方面都无法满足实际的需求。配置多台主从数据库服务器以实现读写分离。

    mysql 的主从复制和mysql的读写分离两者有着紧密联系,首先要部署主从复制,
    只有主从复制完成了,才能在此基础上进行数据的读写分离。

    1、mysql 支持的复制类型

    基于语句的复制(STATEMENT)。
    在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。mysql 默认采用基于语句的复制,效率比较高。

    基于行的复制(ROW)。
    把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

    混合类型的复制(MIXED)。
    默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

    2、主从复制的原理 ☆

    两日志

    二进制日志: 记录数据库变动的信息(语句、变动记录)master

    中继日志文件: 用于临时存放二进制文件内容。 slaves

    三线程

    master上: dump线程

    slave上: i/o线程 sql线程

    dump线程: ① 监听本地二进制日志 ② 记录I/O线程对应的slave位置

                          ③同步二进制日志更新内容给I/O线程

    I/O线程: ①监听master的dump线程。②将slave信息发送给master 从服务器位置、日志的                    position(记录位置), 超时时间   ③接受master的dump线程传递过来的更新信息

                     ④写入relay-log中

    SQL线程:① 监听中继日志 ②将中继日志中的更新内容执行到自己的数据库中(保证从库与                    主库执行相同操作)

    主MySQL 服务器做的增删改操作,都会写入自己的二进制日志(Binary log)
    然后从MySQL 从服务器打开自己的 I/O线程 连接主服务器,进行读取主服务器的二进制日志
    I/O 去监听二进制日志,一旦有新的数据,会发起请求连接
    这时候会触发dump线程,dump thread响应请求,传送数据给I/O,通过tp的方式发送给I/O(dump线程要么处于等待,要么处于睡眠)
    I/O 接收到数据之后存放在中继日志
    SQL thread线程会读取中继日志里的数据,存放到自己的服务器中。

    3、mysql主从复制方式

    3.1、异步复制(Async Replication)

    主库将更新写入Binlog日志文件后,不需要等待数据更新是否已经复制到从库中,就可以继续处理更多的请求。Master将事件写入binlog,但并不知道Slave是否或何时已经接收且已处理。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。MySQL复制默认是异步复制,异步复制提供了最佳性能。

    3.2、同步复制(Sync Replication)

    主库将更新写入Binlog日志文件后,需要等待数据更新已经复制到从库中,并且已经在从库执行成功,然后才能返回继续处理其它的请求。同步复制提供了最佳安全性,保证数据安全,数据不会丢失,但对性能有一定的影响。

    3.3、 半同步复制(Semi-Sync Replication)

    写入一条数据请求到master,从服务器只要有一台接收到写入自己的中继日志,会给客户端返回一条接收成功的信息。
    **主库提交更新写入二进制日志文件后,等待数据更新写入了从服务器中继日志中,然后才能再继续处理其它请求。该功能确保至少有1个从库接收完主库传递过来的binlog内容已经写入到自己的relay log里面了,才会通知主库上面的等待线程,**该操作完毕。
    半同步复制,是最佳安全性与最佳性能之间的一个折中。
    MySQL 5.5版本之后引入了半同步复制功能,主从服务器必须安装半同步复制插件,才能开启该复制功能。如果等待超时,超过rpl_semi_sync_master_timeout参数设置时间(默认值为10000,表示10秒),则关闭半同步复制,并自动转换为异步复制模式。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内,收到了从库的响应,则主从又重新恢复为增强半同步复制。
    ACK (Acknowledge character)即是确认字符。

    3.4、增强半同步复制(lossless Semi-Sync Replication、无损复制)

    增强半同步是在MySQL 5.7引入,其实半同步可以看成是一个过渡功能,因为默认的配置就是增强半同步,所以,大家一般说的半同步复制其实就是增强的半同步复制,也就是无损复制。
    增强半同步和半同步不同的是,等待ACK时间不同
    rpl_semi_sync_master_wait_point = AFTER_SYNC(默认)
    半同步的问题是因为等待ACK的点是Commit之后,此时Master已经完成数据变更,用户已经可以看到最新数据,当Binlog还未同步到Slave时,发生主从切换,那么此时从库是没有这个最新数据的,用户看到的是老数据。
    增强半同步将等待ACK的点放在提交Commit之前,此时数据还未被提交,外界看不到数据变更,此时如果发送主从切换,新库依然还是老数据,不存在数据不一致的问题。

    二、主从复制实验

    0、数据流向图

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0

    1、Mysql主从服务器时间同步

    1.1 主服务时间同步

    yum -y install ntp   下载更新时间同步工具

    ntpdate ntp1.aliyun.com  同步阿里云时间

    systemctl start ntpd;  开启同步服务

    或者设置本地时间源

    vim /etc/ntp.conf  在末尾添加

    server 127.127.0.0 #设置本地时钟源(网段与本机相同)
    fudge 127.127.0.0 stratum 8   #设置时间层级为8(限制在15以为)  层级环

    设置本机的时间层级为8级,0级表示层级为0级,是向其他服务器时间同步源的意思,不要设置为0级

    systemctl start ntpd;  开启同步服务

    1.2 从服务器时间同步 

     yum -y install ntp   下载更新时间同步工具

    ntpdate ntp1.aliyun.com  同步阿里云时间

    systemctl start ntpd;  开启同步服务

    或者同步指定的服务器

    ntpdate 192.168.100.20 #指定同步NTP服务器

    systemctl start ntpd;  开启同步服务

    设置周期性计划同步主服务日志

    crontab -e
    * 1 * * 1  /usr/sbin/ntpdate 192.168.100.20

    2、主服务器的mysql配置 

    vim /etc/my.cnf

    [mysqld] 在这里插入

    server-id = 1
    log-bin=master-bin                            #添加,主服务器开启二进制日志
    log-slave-updates=true                        #添加,允许从服务器更新二进制日志

    systemctl restart mysqld  重启

    mysql -uroot -p #登录数据库

    授权,允许192.18.100.0网段主机使用myslave账号及密码登录并使用数据库

    grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123456';

    flush privileges; #将用户和权限配置保存在内存中

    show master status;  #查看master服务器当前正在执行的二进制日志位置,和列偏移量

    注意:给从服务器授权时,可能会出现密码不符合当前策略要求

    ERROR 1819 (HY000): Your password does n

  • 相关阅读:
    ASPICE系列:顺利通过ASPICE流程软件单元验证(SWE.4)
    Operator介绍
    腾讯云物联网MQTT对接
    MCU设计--M3内核整体功能说明
    解决 java.sql.SQLSyntaxErrorException:Unknown column ‘xxx‘ in ‘field list‘的问题
    LeetCode·每日一题·1235.规划兼职工作·动态规划
    Improper integral
    Linux毕业设计:基于OpenCV和QT库实现的人脸识别考勤/门禁系统(arm嵌入式ubuntu)
    1688详情接口调用示例
    【Linux】组管理命令
  • 原文地址:https://blog.csdn.net/m0_71521555/article/details/127024154
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号