Mysql

187 阅读3分钟

Mysql架构

存储引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制索引技巧锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

InnoDB

  • 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎
  • 行级锁
  • 外键约束,MySQL支持外键的存储引擎只有InnoDB
  • 支持自动增加列AUTO_INCREMENT属性 一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择

MyISAM

MyISA没有事务特性,主要有以下特点

  • 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点
  • 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据
  • 表级锁

Memory

使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。

复制

主从复制

主从复制模式

  • 基于语句的复制: 主服务器上面执行的语句在从服务器上面再执行一遍,在MySQL-3.23版本以后支持 存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户

  • 基于行的复制: 把主服务器上面改变后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在MySQL-5.0版本以后引入 存在的问题:如果修改的行数过多,造成的开销比较大

从库通过回放主库sql日志来复制数据 主要涉及三个线程:binlog 线程、I/O 线程和 SQL 线程。

  • binlog 线程 :负责将主服务器上的数据更改写入二进制日志(Binary log)中。
  • I/O 线程 :负责从主服务器上读取二进制日志,并写入从服务器的中继日志(Relay log)。
  • SQL 线程 :负责读取中继日志,解析出主服务器已经执行的数据更改并在从服务器中重放(Replay)。

读写分离

主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。

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

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

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