mysql 的 log 和 MVCC

Wesley13
• 阅读 545

1、bin log

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。使用binlog日志大约会有1%的性能损耗。

应用:

1)MySQL主从复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。 

2)数据恢复,通过使用mysqlbinlog工具来使恢复数据。

开启:

修改mysql配置文件,重启

show variables like 'log_%'; #查看mysql的binlog是否开启

每次服务器(数据库)重启,服务器会调用flush logs;,新创建一个binlog日志!

查看:使用mysqlbinlog自带查看命令法:

MySQL binlog的三种工作模式

  (1)Row level

  日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。

  优点:能清楚的记录每一行数据修改的细节

  缺点:数据量太大

  (2)Statement level(默认)

  每一条被修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql再次执行

  优点:解决了 Row level下的缺点,不需要记录每一行的数据变化,减少bin-log日志量,节约磁盘IO,提高新能

  缺点:容易出现主从复制不一致

  (3)Mixed(混合模式)

  结合了Row level和Statement level的优点

2.redo log 和 undo log

https://mp.weixin.qq.com/s/kuDfg95TPQuU6rj2Ro6B9g

3. mysql 的mvcc

https://www.cnblogs.com/chinesern/p/7592537.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
2年前
Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份binlog日志恢复增量数据部分),化险为夷!一、简单了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句sel
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
MySQL主从复制异步原理以及搭建
MySQL主从复制的原理:  1、首先,MySQL主库在事务提交时会把数据变更作为时间events记录在二进制日志文件binlog中;MySQL主库上的sync\_binlog参数控制Binlog日志以什么样的方式刷新到磁盘上。  2、主库推送二进制日志文件Binlog中的事件到从库的中继日志RelayLog中,之后从库根据中继日志Rela
Wesley13 Wesley13
2年前
MySQL二进制日志系列
MySQL二进制日志系列总结1、binarylog记录的是 已经提交commit的各种DML和DDL语句,类似oracle的redolog(包含onlineredolog和archiveredolog)中已经commit提交的数据statement格式的binlog,最后会有COMMIT; 
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究