mysql特性
InnoDB
InnoDB存储引擎是MySQL数据库中非常强大的一个组件,以其高性能、可靠性和丰富的特性而闻名。
InnoDB存储引擎将数据存储在磁盘上,但为了提高性能,它使用内存中的缓冲池(Buffer Pool)来缓存频繁访问的数据和索引。InnoDB的数据存储结构主要包括:
- 表空间(Tablespace):InnoDB的数据和索引都存储在表空间中,它是InnoDB存储结构的最高层。表空间可以包含多个文件。
- 段(Segment):表空间被划分为不同的段,每个段对应不同类型的数据结构,如索引段、数据段等。
- 区(Extent):段进一步被划分为区,每个区包含64个连续的页。
- 页(Page):InnoDB存储的基本单位是页,每个页默认大小为16KB。页可以包含数据、索引、事务日志等。
- 行(Row):数据在页中以行的形式存储。
索引和数据存储InnoDB支持两种类型的索引,其每个表自动创建一个聚簇索引,通常是主键。聚簇索引的叶节点直接包含行数据,这意味着数据和索引是一起存储的,除了聚簇索引外,InnoDB还支持辅助索引,InnoDB的事务处理是其核心特性之一,它支持ACID属性。
InnoDB使用日志系统来保证事务的持久性和一致性:
- 重做日志:记录事务对数据的修改,用于崩溃恢复。
- 回滚日志:记录事务对数据的修改前的版本,用于事务回滚和MVCC。
InnoDB支持多种锁机制,例如行级锁中的共享锁和排他锁,共享锁允许事务读取一行数据,但不能修改它。多个事务可以同时对同一行数据加共享锁,排他锁:允许事务修改一行数据,但不允许其他事务读取或修改它。
MyISAM
MyISAM在MySQL 5.5版本之前是默认的存储引擎,MyISAM不支持事务处理,这意味着它不适合需要事务支持的应用场景,MyISAM使用表级锁而不是行级锁,在进行数据更新时,会锁定整个表,这限制了并发写入的能力,在MyISAM表中,写入操作会阻塞其他写入和读取操作。
MyISAM的内部结构MyISAM表由以下三种类型的文件组成:
.frm文件:存储表的定义(结构)。
.MYDMYData文件:存储实际的表数据。
.MYIMYIndex文件:存储表的索引。
MyISAM是非聚集索引,与InnoDB的聚集索引不同,
MyISAM适合于那些对读取性能要求高、不需要事务支持的应用,但其崩溃恢复与InnoDB相比,MyISAM在崩溃后可能会出现数据损坏,需要手动修复,而InnoDB具备强大的崩溃恢复机制。
mysql集群
MySQL集群是一种让数据库分布在多台服务器上的技术,这样可以提高处理大量数据的能力,同时也可以在某些服务器出现问题时,保证数据不会丢失,服务不会中断。
为什么需要MySQL集群?
- 提高性能:如果有很多用户同时访问数据库,一个数据库服务器可能会忙不过来。有了集群,不同的服务器可以同时处理不同的请求。
- 数据安全:在集群中,每个服务器都有其他服务器的数据备份,这样即使某个服务器坏了,数据也不会丢。
- 负载均衡:集群可以将不同的任务分配给不同的服务器,这样每个服务器都不会过载,可以更稳定地工作。
MySQL集群怎么工作的?
- MySQL集群会根据一定的规则(比如数据的类型或者数据的大小),把数据分成很多小块,这些小块叫做分片,每个分片都存储在不同的服务器上。
- 在MySQL集群中,通常有一个或几个服务器专门负责处理写入操作,其他的服务器负责处理读取操作,这样可以减少单个服务器的压力,为了保证数据的一致性。
- MySQL集群会不断地在各个服务器之间同步数据。
通过集群,数据库可以处理更多的数据,也可以在出现问题时快速恢复,保证服务的连续性。
主从复制
MySQL主从复制是一种数据复制技术,它允许你将一个MySQL数据库服务器(主服务器)上的数据复制到一个或多个其他的MySQL服务器(从服务器),这样就可以在多个服务器上拥有相同的数据副本,从而提高数据库的读取性能和可用性。
主服务器上的数据变更会被复制到从服务器上,保持数据的一致性,主服务器通常处理所有的写入操作,而从服务器处理读取操作,而如果主服务器出现问题,可以从服务器接管服务,保证数据库的持续可用。
主从复制的工作原理:
- 二进制日志:主服务器会记录所有的数据变更操作到二进制日志中。
- 复制线程:从服务器上有一个复制线程,它会连接到主服务器,请求获取二进制日志中的数据变更。
- 数据同步:主服务器将数据变更发送给从服务器,从服务器上的复制线程将这些变更应用到自己的数据库中,从而实现数据的同步。
- 自动故障转移:在一些高级配置中,如果主服务器宕机,可以从服务器中选举出一个成为新的主服务器,实现自动故障转移。
主从复制通过在多个服务器之间同步数据,提供了一种提高数据库性能、可用性和数据安全性的有效方法。