MySQL数据存储位置与数据访问流程技术咨询
回答
先给明确结论:MySQL默认不属于内存数据库(IMDB),核心持久化数据的主存储位置是磁盘,和IMDB以内存为主存储的设计逻辑完全不同,两个问题分别展开说:
- 数据存储位置
常规配置下,MySQL的库表元数据、行记录、索引、事务日志等所有需要持久化的内容,都会落盘存储在服务对应的数据目录(默认路径一般是/var/lib/mysql),哪怕服务重启、服务器掉电,这部分数据也不会丢失。
只有主动使用MEMORY引擎创建的表是特例:这类表的数据会全程存在主内存中,但不会做持久化,MySQL服务重启后表数据会直接清空,一般只用来做临时缓存、小体量中间结果计算,不是MySQL的默认存储逻辑。 - 数据访问逻辑
MySQL不会直接读写磁盘上的数据,所有数据操作都要经过内存中的InnoDB缓冲池(Buffer Pool,默认引擎是InnoDB的场景):
读请求过来时,会先检查目标数据页是否已经在缓冲池中:如果命中就直接从内存返回结果;如果没命中,才会触发磁盘IO,把对应的数据页加载到缓冲池后再返回结果。
写请求过来时,也不会直接修改磁盘上的数据:会先修改缓冲池里的对应数据页标记为脏页,后续按预设的刷盘策略异步把脏页写回磁盘,整个过程靠redo log、undo log等日志机制保证宕机场景下的数据一致性。
容易混淆的点:不要把MySQL的缓冲池机制和内存数据库划等号。内存数据库是把内存作为数据的主存储,磁盘仅做冷备份、持久化兜底;而MySQL的缓冲池本质是磁盘数据的缓存,磁盘才是数据的唯一可信主存储,就算内存里的缓存全部丢失,完全可以靠磁盘上的完整数据重建缓存内容。
内容的提问来源于stack exchange,提问作者Vishal Patidar
相关产品推荐
相关产品推荐

