MySQL整理

一、MySQL主从复制。

1、MySQL主从复制原理。

基于二进制文件实现。

2、MySQL主从复制类型。

基于语句的复制statement,MySQL默认类型。基于行的复制row。混合类型的复制mixed。

3、MySQL主从复制的工作过程。

1)master节点将数据的改变记录成二进制日志binlog,当master上的数据发生改变时,则将其改变写入二进制日志中。

2)slave节点会在一定时间间隔内对master的二进制日志进行探测,看其是否发生变化,如果发生改变,则开始一个I/O线程请求master的二进制文件。

3)同时master节点为每个I/O线程启动一个dump线程,用于向其发送二进制文件,并保存到slave节点本地的中继日志RelayLog中,slave节点将启动sql线程从中继日志读取二进制日志,在本地重放(即解析成sql语句逐一执行),让slave数据与master节点保持一致,最后I/O线程和sql线程将进入睡眠状态,等待下次被唤醒。

二、MySQL的Binlog录入格式及区别。

1、statement。

该模式下,每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少binlog的日志量,节约I/O,提高性能。由于sql执行有上下文,因此在保存时需要保存相关信息,同时有一些使用函数之类的语句无法被记录复制。

2、row。

不记录sql语句上下文相关信息,只保存被修改的那条记录。记录单元为每一行的改动,基本可以全部记录下来,但是由于很多操作会导致大量行的改动(比如alter table),因此这种模式的文件保存信息太多,日志量太大。

3、mixed。

是一种折中方案,普通操作使用statement记录,当无法使用statement的时候使用row。

三、MySQL中InnoDB支持的事务隔离级别。

1、read uncommitted。

读到未提交数据。最低的事务隔离级别,可能会导致脏读幻读不可重复读

2、read committed。

可以阻止脏读,但是仍然有可能发生幻读不可重复读

3、repeatable read。

可重复读,可以阻止脏读,但是仍然可能发生幻读。(MySQL默认事务级别)

4、serializable。

串行事务。最高的隔离级别,完全服从ACID隔离级别。所有的事务依次逐个执行,事务之间互不干扰,该级别可以防止脏读、不可重复读及幻读。

注:

不可重复读:在一个事务内多次读取同一数据得到不一样的结果。读到其他事务执行update delete后的数据。

幻读:多个事务同时进行时,可能会读到其他事务新增(insert)后的数据。

关于幻读不可重复读,网上搜了一篇个人认为写得比较详细的博文,地址如下:一文详解脏读、不可重复读、幻读_脏读 幻读 不可重复读-CSDN博客

四、MySQL的主从延迟。

解决方案

1、提高从库的硬件性能。

2、优化慢SQL,执行时间较长的SQL或者事务,可以修改拆分多次写入。

3、优化网络。主从部署在同一网络下,跨公网容易导致主从延迟。

4、主库写压力大,可以增加缓存。从库读压力大,可以增加从库数量,但从库节点不宜过多,3-5个比较合理。

五、MySQL事务底层原理(ACID)。

原子性(A):是undo log实现的;

一致性(C):是由代码逻辑层面保证的;

隔离性(I):是由mvcc实现的;

持久性(D):是基于redo log实现的。

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Showne92

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值