首页 > 数据库 >MKZS515-高并发高性能高可用Mysql - 第6章 如何处理数据更新

MKZS515-高并发高性能高可用Mysql - 第6章 如何处理数据更新

时间:2022-10-27 20:00:09浏览次数:57  
标签:binlog MKZS515 log 数据 并发 Mysql 日志 redo 刷盘

1、数据库 ”动起来“之后,会发生什么?

   1、产生日志数据

      数据库在更新时候,会产生binlog、redo log、undo log

      binlog : server 层产生的逻辑日志

      redo log : InnoDB 产生的物理日志,保证持计划   【innoDB 独有】

      undo log : InnoDB 产生的逻辑日志、保证隔离性、原子性  【innoDB 独有】

    

    2、客户端之间因为锁而相互影响

      1、客户端执行 SQL 时候,会产生各种行锁,表锁,元数据锁

      2、一个客户端产生的锁,会干扰其他客户端 SQL 的执行

      3、两个客户端之间可能产生死锁

   

   3、事务造成查询的数据与磁盘上的不一致

      1、客户端可能暂时看不到已经更新的数据

      2、事务可能产生隐式锁,造成性能问题

 

 

 

2、MySQL 日志体系 

  1、MySQL 为了满足主从复制,事务等,有复杂的日志体系。

  2、Server 产生binlog,用来进行数据复制

  3、InnoDB 产生的 undo log 、redo log,用来实现事务的 ACID

  4、MySQL 的日志体系主要不是用来看的,而是运行必要的

 

  1、binlog 归档日志

    1、Binlog 是 server 层产生的逻辑日志

    2、用来进行数据复制和数据传送

    3、Binlog 完整记录数据库每次的数据操作,可以作为闪回手段

    4、Binlog 记录在专门的文件中

      代码

                  show binary logs ;

      

 

      查看其中具体的

      mysql> show binlog events in 'mysql-bin.000003' \G;

      

 

    通过二进制日志文件的内容可以看出对数据库操作的记录,给管理员对数据库进行管理和数据恢复提供了依据。

 

   2、undo log 回滚日志

      1、InnoDB 自身产生的逻辑日志,用于事务的回滚和展示就版本

      2、对任何数据(缓存)的更新,都先写 undo log

       

   3、redo log 重做日志

      1、InnoDB 自身产生的物理日志,记录数据页的变化

      2、InnoDB ”日志优先于数据“,记录 redo log 视为数据已经更新

      3、内存中的数据更新后写 redo log, 数据被写入硬盘后删除

      4、只要 redo log 不丢,数据就不会丢失

    

 

3、数据的更新流程 

  

    1、查询数据,从数据页读入一条或者多条数据到内存。

    2、在内存中修改数据,然后写 undo log 日志

    3、更新内存中的数据页【这个时候如果有读取这条数据的,直接取出这条数据】

    4、redo log 写入内存 (prepare)

    5、这个时候客户端,继续 update , 重新执行 1 ~ 4

    6、如果客户端,rollback ,这个时候取出 undo log 执行

    7、如果客户端,commit,binlog 写入内存,然后提交事务。

    

    redo log 刷盘

      innodb_flush_log_at_trx_commit 参数控制 redo log 刷盘

        1、0 :异步每秒刷盘

        2、1 : 每 1 个事务刷盘

        3、0 :每 N 个事务刷盘

      建议设置为 1, 保证数据安全。

    

    binlog 刷盘

      sync_binlog 参数控制 binlog 刷盘

                        1、0 :异步每秒刷盘

        2、1 : 每 1 个事务刷盘

        3、0 :每 N 个事务刷盘

      建议设置为 1, 保证数据安全。

 

 

 

 

      

  

 

    

 

  

 

        

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

      

标签:binlog,MKZS515,log,数据,并发,Mysql,日志,redo,刷盘
From: https://www.cnblogs.com/dogHuang/p/16833304.html

相关文章

  • ntunnel_mysql.php
    前言:问题:服务器有跳板机不能直接用本地navicat链接数据库可以用这个方法导出php脚本通过wep服务3.访问4.本地navicat......
  • 「MySQL高级篇」explain分析SQL,索引失效&&常见优化场景
    大家好,我是melo,一名大三后台练习生专栏回顾索引的原理&&设计原则欢迎关注本专栏:MySQL高级篇本篇速览在我们上一篇文章中,讲到了索引的原理&&设计原则,知道了索引如......
  • Ubuntu 安装 PhpMyAdmin 管理 MySQL 数据库
     Ubuntu安装PhpMyAdmin管理MySQL数据库前言:当前服务器有跳板机不能直接用本地navicat连接数据库问题  PhpMyAdmin是一个用PHP编写的软件工具,可以通过......
  • OpenResty+mysql+redis
    1、       ad_load.lua  nginx.conf1、读取mysql并缓存redis     参考:https://www.cnblogs.com/bbgs-xc/p/14437703.html https:/......
  • Mysql备份
    Mysql备份笔记Mysql日志类型日志分类错误日志:启动,停止,关闭失败报错。rpm安装日志位置/var/log/mysqld.log通用查询日志:所有的查询都记下来二进制日志:实现备......
  • 教你2种常用的电商高并发处理解决方案
    网站架构师面临的最大挑战之一就是并发。自Web服务开始以来,并发水平一直在不断增长,一个主流网站同时服务十万甚至数百万用户,这并不罕见。就目前应用广泛的电商系统来说,各种......
  • MySQL基础篇--执行计划key_len计算
    字符类型charchar(N)固定字段且允许NULL=N*(characterset:utf8=3,gbk=2,latin1=1)+1(NULL)char(N)固定字段且不允许NULL=N*(characterset:utf8=3,gbk=2,lat......
  • MySQL组合索引(a,b,c)和EXPLAIN的使用
    前言MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。而索引可分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多......
  • mysql: mycat 安装和简单应用
    mycat安装和简单应用   一、mycat概述 mycat用于数据库的分库分表,本文以数据库mysql-8.0.31为例。mycat主要用“逻辑库、逻辑表”来管理各个物理节点主机......
  • vue+mysql实现前端对接数据库
    下载引入相关依赖1、cnpminstall--savemysql2、cnpminstall--saveaxios3、cnpminstall--savebody-parser4、cnpminstall--saveexpress5、cnpminstall--......