Mysql-MVCC原理
什么是 Mvcc ?Mvcc 全称:Multi-Version Concurrency Control (多版本控制)。
主要是实现了 提高数据库并发性,实现了读-写冲突不加锁,而这个读指的就是快照度,不是当前读,当前读实际上是一种加锁的操作,是悲观锁实现的【维持一个数据的多个版本,使得读写操作没有冲突】。
Mysql InnoDB下的 当前读 和 快照读 是什么?当前读:就是读取最新的数据,读取是加锁保证其它事物不能修改,对读取的记录行加锁。
快照读:不加锁的查询就是快照读,非堵塞读。快照读前提是隔离级别不在串行化的级别,不然也是当前读。出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于多版本并发控制,即 MVCC ,可以认为 MVCC 是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销。既然是基于多版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本。
快照读就是 MySQL 实现 MVCC 理想模型的其中一个非阻塞读功能,MVCC 模型在 MySQL 中的具体实现则是由 3 个隐式字段,undo 日志 ,Read View 等去完成 ...
Mysql-两段提交
如有笔误,欢迎留言指正或讨论!
一、 MySQL 的基本架构示意图
二、 更新语句的执行流程
在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表 T 上所有缓存结果都清空。一般不建议使用查询缓存的原因 !
接下来,分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用 ID 这个索引。然后,执行器负责具体执行,找到这一行,然后更新。
这个 update 语句的执行流程图,图中浅色框表示是在 InnoDB 内部执行的,深色框表示是在执行器中执行的。
与查询流程不一样的是,更新流程还涉及两个重要的日志模块:redo log(重做日志)和 binlog(归档日志)。
三、Redo Log
MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging(预写日志记录),它的关键点就是先写日志,再写磁盘。
当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统 ...
Mysql-索引
mysql索引(INDEX)定义:
帮助mysql提高查询效率的数据结构;
优点:
加快访问数据的查询速度;
缺点:
维护索引需要消耗数据库资源;
所索引要占用磁盘空间;
当对表数据进行查询增删改查的时候, 需要维护索引, 速度也会收受到影响;
mysql索引的分类:
innodb:
主键索引
设定主键后,数据库会自动建立索引,innodb为(聚簇索引);
普通索引(单值索引、单列索引):
一个索引只包含单个列,一个表可以有多个单列索引(age index);
唯一索引:
索引列的值必须唯一,但可以允许有空值(只能存在一个null);
主键和唯一区别:主键不能为空!!!
复合索引:
一个索引包含多个列;
最左包含原则,所以在查询过程中,mysql会动态的调整查询的字段顺序;
myIsam:
全文索引(FULL TEXT,MYISAM引擎才有):
在定义索引的列上支持值得全文搜索(类似于 es),允许在这些索引列插入重复的值和空值;
全文索引可以在(CHAR、VARCHAR、TEXT)类型上使用;
索引底层原理:
Mysql-主从复制
如有笔误,欢迎留言指正或讨论!
一、概述1.1、什么是主从复制?
主从复制就是将主数据库的 DDL 和 DML 通过二进制日志传到从服务器上,从数据库对这些日志进行重新执行,使得主从数据保持一致性。
二、 主从复制原理2.1、主从复制结构图
主库 在事物提交时会把变更的数据作为 事件 记录到二进制日志Binlog中;
从库 创建 I/O线程 用来连接主库请求更新的数据,主库收到请求后会通过 dump线程 读取binlog日志数据并发送给从库;
从库 收到数据后会先写入到 relay-log日志 中,从库会有一个 sql线程 实时监控relay-log日志中更新的数据,然后执行的相关操作;
三、搭建主从复制实例3.1、docker运行mysql(8.0.30)实例
首先拉取mysql(8.0.30)镜像 (本机需要有docker环境)docker pull mysql:8.0.31
3.1.1、主库mysql实例/var/lib/mysql/mysql_binLog
启动主节点mysql实例docker run --name mysql_master -p 3307:3 ...
docker-composer使用教程
如有笔误,欢迎留言指正或讨论!
dockerFile使用教程
如有笔误,欢迎留言指正或讨论!
Mysql-慢日志详解
mysql慢日志是什么? 慢查询日志由 long_query_time 执行时间超过几秒钟并且至少 `min_examined_row_limit` 需要检查行的 SQL 语句组成 。慢查询日志可用于查找需要很长时间执行的查询,因此可以进行优化。但是,检查长而缓慢的查询日志可能是一项耗时的任务。
mysql long_query_time: 默认值是 10 秒
查看/操作慢日志登录mysql终端查看慢日志是否开启:show variables like '%quer%'; 默认是关闭状态。
开始慢日志有两种返方式。( 我们用第二种演示 )
可以直接修改 my.cnf 文件,永久有效;
终端执行此命令: set global slow_query_log=1; MySQL重启后则会失效;
这边你也可以自定义慢日志文件地址:set global slow_query_log_file='路径名'; 来设置你的慢查询日志想要存放的地址,我一般都使用默认的地址;
开启慢日志,什么样的 SQL 语句会被记录到日志中全部取决于 long_que ...
Docker基础知识
如有笔误,欢迎留言指正或讨论!
docker解决的痛点一种新的技术的诞生,往往是解决某件事情的 痛点 、难点,我们先来了解一下,它究竟解决了什么问题?我们可以大致分为几个模块:
快速部署环境
传统软件开发与发布环境复杂,配置繁琐,如:LAMP、LNMP。
虚拟化更加轻量级
docker是一种操作系统级别的虚拟技术,运行在操作系统之上的用户空间,所有的容器共用 一个系统内核甚至公共库,容器引擎提供了进程级别的隔离,让每个容器就像运行在单独的系 统之上,但是又能共享很多底层资源,更加轻量快速和易于管理。
程序的可移植性
docker的三大核心组件
镜像
镜像算是一个只读的静态模板,它保存了容器需要的环境和应用执行的代码,可以将镜像看成是容器的代码,代码运行起来后就成了容器,镜像和容器的关系也类似于程序和进程的关系。
容器
容器是一个运行时环境,是镜像的一个运行状态,他是镜像执行的动态表现。
库
库是一个特定用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像。
docker应用场景
一般前五个场景-最常用!
1、加速本地开发
2、自动打包和部署 ...