mysql持久性怎么样 mysql 长时间执行的sql

mysql的四大特性1、原子性:在整个操作的事务中,要么全部成功 , 要么全部失败 。
2、隔离性:所谓隔离性,就是每个事务执行的时候,相互之间不会受到影响,都是单独的事务 。
3、一致性:也就是说事务在执行之后,必须和之前的数据保持一致 。
4、持久性:事务一旦提交 , 就会持久化到数据库中,不能回滚 。
mysql 核心内容-上1、SQL语句执行流程
MySQL大体上可分为Server层和存储引擎层两部分 。
Server层:
连接器:TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆 。
查询缓存:查询后的结果存储位置 , MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失 。
分析器:根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法 。
优化器:多种执行策略可实现目标,系统自动选择最优进行执行 。
执行器:判断是否有权限,将最终任务提交到存储引擎 。
存储引擎层
负责数据的存储和提取 。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎 。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎(经常用的也是这个) 。
SQL执行顺序
2、BinLog、RedoLog、UndoLog
BinLog
BinLog是记录所有数据库表结构变更(例如create、alter table)以及表数据修改(insert、update、delete)的二进制日志,主从数据库同步用到的都是BinLog文件 。BinLog日志文件有三种模式 。
STATEMENT 模式
内容:binlog 记录可能引起数据变更的 sql 语句
优势:该模式下,因为没有记录实际的数据,所以日志量很少 IO 都消耗很低,性能是最优的
劣势:但有些操作并不是确定的 , 比如 uuid() 函数会随机产生唯一标识,当依赖 binlog 回放时,该操作生成的数据与原数据必然是不同的,此时可能造成无法预料的后果 。
ROW 模式
内容:在该模式下,binlog 会记录每次操作的源数据与修改后的目标数据,StreamSets就要求该模式 。
优势:可以绝对精准的还原 , 从而保证了数据的安全与可靠,并且复制和数据恢复过程可以是并发进行的
劣势:缺点在于 binlog 体积会非常大,同时 , 对于修改记录多、字段长度大的操作来说,记录时性能消耗会很严重 。阅读的时候也需要特殊指令来进行读取数据 。
MIXED 模式
内容:是对上述STATEMENT 跟 ROW 两种模式的混合使用 。
细节:对于绝大部分操作,都是使用 STATEMENT 来进行 binlog 没有记录,只有以下操作使用 ROW 来实现:表的存储引擎为 NDB,使用了uuid() 等不确定函数 , 使用了 insert delay 语句,使用了临时表
主从同步流程:
1、主节点必须启用二进制日志,记录任何修改了数据库数据的事件 。
2、从节点开启一个线程(I/O Thread)把自己扮演成 mysql 的客户端,通过 mysql 协议,请求主节点的二进制日志文件中的事件。
3、主节点启动一个线程(dump Thread) , 检查自己二进制日志中的事件,跟对方请求的位置对比 , 如果不带请求位置参数 , 则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点 。
4、从节点接收到主节点发送过来的数据把它放置到中继日志(Relay log)文件中 。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个) 。

推荐阅读