MYSQL 主从复制以及存储引擎的相关知识点笔记

参考资料:

  1. CS-Notes/MySQL.md at master · CyC2018/CS-Notes · GitHub
  2. 帅地玩编程-校招|面试|学习路线,你都可以在这里找到 (iamshuaidi.com)

主从复制

主要涉及的三个线程:

binlog线程:负责将主服务器的数据更改写入二进制日志中。

I/O线程:负责主服务上读取二进制日志,并写入从服务器中的中继日志。

SQL线程:负责读取中继日志,解析出主服务器已经执行的数据更改并在从服务器中重放。

读写分离

  • 主服务器:处理写操作以及实时性要求较高的读操作
  • 从服务器:处理读操作

读写分离提高性能的原因在于:

  • 主从服务器负责各自的读和写,极大程度了缓解锁的争用
  • 从服务器可以使用MyISAM,提升查询性能以及节约系统开销
  • 增加冗余,提高可用性

读写分离常用代理方式来实现,代理服务器接收应用层传来的读写请求,然后决定转法到哪个服务器。

 主从同步的延迟原因

  假如一个服务器开房N个连接给客户端,这样会有大并发的更新操作,但是从服务器里面读取binlog的线程(I/O线程?我认为的)只有一个,当某个SQL在从服务器上执行的时间稍长或由于某个SQL要进行缩表就会导致主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致,也就是主从延迟。

主从同步延迟的解决方法

实际上主从同步延迟没有办法根本解决,只有一些缓解措施,因为所有的SQL必须都要在从服务器里面执行一遍,但是主服务器如果不断的有更新操作,那么一旦有延迟产生,那么延迟家中的可能性就会越来越大。

缓解措施:

  1. 因为主服务器要负责更新操作,它对安全性的要求比从服务器高,所有可以修改一些设置,如sync_binlog=1, innodb_flush_log_at_trx_commit = 1等设置,而从服务器不需要那么高的数据安全,就可以sync_binlog = 0或者关闭binlog、innodb_flushlog、innodb_flush_log_at_trx_commit
  2. 增加从服务器

存储引擎

前面提到从服务器主要采用MyISAM搜索引擎,但是我不知道搜索引擎的区别,在这里补充一下。

InnoDB

InnoDB是默认的事务型存储引擎,只有在需要它不支持的特性时,才会考虑使用其他的存储引擎。

InnoDB实现了四个标准的隔离级别,包括读取未提交内容、读取提交内容、可重复读和可串行化,默认级别是可重复度。

主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,引次对查询性有很大的提升。

内部做了很多优化,包括从磁盘中读取数据时采用的可预测读,能够加快读操作并且自动创建自适应哈希索引、能够加速插入操作的插入缓冲区等。

支持真正的在线备份。

MyISAM

设计简单,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,则依然可以使用它。

提供了大量的特性,包括压缩表、空间数据索引等。

不支持事务。

不支持行级锁,只能对整张表加锁,读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入(CONCURRENT INSERT)。

可以手工或者自动执行检查和修复操作,但是和事务恢复以及崩溃恢复不同,可能导致一些数据丢失,而且修复操作是非常慢的。

如果指定了 DELAY_KEY_WRITE 选项,在每次修改执行完成时,不会立即将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘。这种方式可以极大的提升写入性能,但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复操作。

比较

  • 事务:InnoDB是事务型的,可以使用Commit和RollBack语句
  • 并发:MyISAM只支持表级锁,而InnoDB还支持行级锁
  • 外键:InnoDB支持外键,MyISAM不支持
  • 备份:InnoDB支持在线热备份
  • 崩溃恢复:MyISAM崩溃后发生损坏的概率更高,而且恢复速度更慢
  • 其他特性:MyISAM支持压缩表和空间数据索引

InnoDB采用B+树而不是B树

用 B+ 树不用 B 树考虑的是 IO 对性能的影响,B 树的每个节点都存储数据,而 B+ 树只有叶子节点才存储数据,所以查找相同数据量的情况下,B 树的高度更高,IO 更频繁。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值