惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
T
The Blog of Author Tim Ferriss
腾讯CDC
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
爱范儿
爱范儿
GbyAI
GbyAI
H
Help Net Security
I
InfoQ
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
云风的 BLOG
云风的 BLOG
Project Zero
Project Zero
P
Privacy & Cybersecurity Law Blog
A
Arctic Wolf
Know Your Adversary
Know Your Adversary
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tor Project blog
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
WordPress大学
WordPress大学
V
Visual Studio Blog
博客园_首页
G
GRAHAM CLULEY
K
Kaspersky official blog
T
Tailwind CSS Blog
T
Threat Research - Cisco Blogs
博客园 - Franky
D
Docker
Security Latest
Security Latest
I
Intezer
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - I'mAlex

Linux 环境下数据库服务开机自启实战:root.sh 脚本配置与服务管理全解 踩坑实录:NFS挂载环境下脚本执行权限问题(Operation not permitted)的深度排查与解决 单机数据库小版本升级实战:零数据迁移、分钟级完成的高效方案 表空间目录自动创建:告别手工建目录,提升数据库运维效率 深度解析:数据库 OID 与 ROWID 原理、用法与实战避坑 配置数据库日志输出到syslog,运维再也不用挨个找日志了 告别Oracle:深度解析数据库迁移的真实成本、技术路径与落地实战 Oracle替换实战干货:别再被迁移坑了,零改造+低成本落地全攻略 OpenClaw+优云智算Coding Plan:从灵感到成文,再到公众号发布的全流程AI自动化 MySQL迁移不再踩坑:金仓数据库兼容性与工程实力深度解析 信创替代破局:金仓数据库MySQL兼容性与迁移工程实力深度解析 融合为体,一库多能:金仓数据库重构企业数智化数据底座 KingbaseES 用户、会话与连接控制:从权限到连接池的实战运维 KingbaseES PLSQL异常处理深度解析:机制、实践与优化 国产化时序数据库替换实战:金仓全方位替代InfluxDB/TimescaleDB/TDengine指南 文档数据库国产化替代实践:金仓KES打造MongoDB高兼容迁移方案 关系数据库替换用金仓:数据迁移中的完整性与一致性风险深度解析 Oracle平滑迁移到KingbaseES关系数据库的技术实践 金仓数据库赋能北京一卡通:国产数据库在民生核心系统的信创实践标杆 深度解析数据库TOAST技术:超大字段存储的核心实现与实操指南 AI Ping实测:一站式大模型API评测+调用,开发者选型对接效率翻倍 SSH Key多密钥管理实战:不同域名/不同仓库/不同目录自动匹配不同ssh key的配置方案 KingbaseES数据库瓶颈排查实战指南:从实例到语句的全维度解析 金仓数据库平替MongoDB实操解析:多模融合赋能企业文档数据管理国产化升级
一文读懂数据库data目录:原来你的数据都藏在这里
I'mAlex · 2026-04-13 · via 博客园 - I'mAlex

不管是日常刷APP、逛网站,还是公司里的业务数据统计,我们每天都会产生大量数据。这些数据看似“看不见摸不着”,其实都安安稳稳地躺在数据库的某个角落——其中,data目录就是它们的“大本营”。

很多人对数据库的印象,停留在“写SQL查数据”的层面,却不知道背后的数据是如何存储、管理的。今天,我们就用最通俗的语言,科普一下数据库data目录的核心结构,不用复杂的运维操作,不用晦涩的专业术语,哪怕是刚接触数据库的新手,也能轻松看懂数据的“藏身之处”。

我们以一款兼容PostgreSQL生态的企业级数据库(KingbaseES)为例,它的data目录结构具有很强的代表性,大部分关系型数据库的核心逻辑都与之相似,看懂它,就能举一反三。

一、先搞懂:data目录到底是什么?

image

简单来说,data目录就是数据库的“专属仓库”。当你安装并初始化数据库后,系统会自动生成这个目录,它就像一个整理得井井有条的储物间,把数据库运行所需的一切东西都分类存放好。

你可以这样理解:如果把数据库比作一家超市,那么data目录就是超市的“后台仓库”——货架(数据文件)、账本(日志)、规章制度(配置文件)、管理人员信息(权限数据),全都在这个仓库里。只要这个仓库完好无损,哪怕超市前台出了问题,也能快速恢复正常营业。

在Linux系统中,我们用一条简单的命令,就能看到这个“仓库”的整体布局:

tree -LP 2 data/

执行后,会看到类似这样的结构(只保留核心部分,复杂的次要文件已省略):

data/
├── base           # 你的业务数据、表格都存在这
├── global         # 数据库的“全局配置中枢”
├── sys_wal        # 数据的“安全备份日志”
├── sys_xact       # 事务的“状态记录册”
├── kingbase.conf  # 数据库的“运行规则手册”
└── kingbase.pid   # 数据库的“运行身份证”

接下来,我们逐个走进这个“仓库”的各个区域,看看每个地方都放了什么。

二、data目录核心区域科普:每个文件夹都有大作用

2.1 base目录:业务数据的“专属储物柜”

base目录是整个data目录中最核心、最“值钱”的地方——你在数据库里创建的所有表格、索引、视图,甚至是存储过程,最终都会存放在这里。

它的存放逻辑很简单,就像超市里的储物柜,每个数据库对应一个“专属柜子”,这个柜子的名字很特别,是一串数字(叫做OID,数据库对象的唯一标识)。比如,你创建了一个名为“user_db”的数据库,系统会自动给它分配一个OID(比如16268),然后在base目录下创建一个名为“16268”的文件夹,这个文件夹里就装着“user_db”数据库里的所有数据。

再往深了说,每个表格和索引,在这个“柜子”里又会变成一个独立的“文件”,文件名也是一串数字(叫做filenode,物理文件标识)。比如你创建了一张“user_info”表,系统会给它分配一个filenode,然后在对应的OID文件夹里,生成一个以这个filenode命名的文件,这就是“user_info”表的真实数据文件。

还有两个小细节很有意思:

  1. 如果一张表的数据量很大,超过1GB,系统会自动把它分成多个“分文件”,比如filenode.1、filenode.2,这样可以避免单个文件太大,导致读取和管理不便(这个大小可以通过配置调整)。
  2. 每个数据文件旁边,都会有两个“辅助文件”:一个后缀是“_fsm”,用来记录文件里的空闲空间,方便系统快速找到可以插入数据的位置;另一个后缀是“_vm”,用来标记哪些数据是“可用的”,避免读取到无效数据,提升查询速度。

2.2 global目录:数据库的“全局中枢”

如果说base目录是“分储物柜”,存放各个数据库的专属数据,那么global目录就是整个数据库的“全局中枢”,管的是所有数据库都需要用到的“公共信息”。

这里面最关键的东西有两个:

一是“全局系统表”,比如记录所有数据库信息的表、记录用户权限的表、记录表空间信息的表。这些表就像超市的“员工手册”“会员档案”,不管哪个“储物柜”(数据库),都需要用到这些信息。

二是“sys_control文件”,这是数据库的“核心配置文件”,记录着数据库的版本、块大小、检查点信息等关键参数。如果这个文件损坏,整个数据库都无法启动,就像超市的“总电闸”坏了,所有区域都无法正常运行。

除此之外,global目录里还有两个“辅助文件”:sys_filenode.map用来建立系统表OID和物理文件名的映射,方便系统快速找到对应的文件;sys_internal.init是系统表的“缓存文件”,可以加快系统表的读取速度,就像超市里的“常用商品备货区”,不用每次都去仓库深处找。

2.3 sys_wal目录:数据的“安全备份日志”

sys_wal目录,全称是“预写日志目录”,它的作用就像超市的“监控录像”,记录着数据库里的每一次操作——不管是插入一条数据、修改一条记录,还是删除一条信息,都会被详细记录在这里。

它的核心逻辑很简单:数据库在修改数据之前,会先把修改操作记录到sys_wal的日志文件里,然后再去修改真正的数据文件。这样做的好处是,一旦数据库突然崩溃(比如断电、宕机),重启后可以通过这些日志,恢复到崩溃前的状态,避免数据丢失。

举个例子:你在数据库里插入了一条用户数据,系统会先把“插入这条数据”的操作记录到sys_wal的日志里,然后再把这条数据写入base目录的数据文件中。如果写入数据的过程中突然断电,重启后,系统会读取sys_wal的日志,发现有一条“未完成的插入操作”,就会重新执行这个操作,确保数据不会丢失。

sys_wal目录里的日志文件,名字是一串24位的数字(比如000000010000000000000051),分为时间线、logid、logseg三个部分,方便系统区分和查找。还有一个“archive_status”文件夹,用来记录日志的归档状态:.ready表示日志等待备份,.done表示日志已经备份完成。

2.4 sys_xact目录:事务的“状态记录册”

我们在操作数据库时,经常会用到“事务”——比如转账,从A账户扣钱,再给B账户加钱,这两个操作必须同时成功或同时失败,这就是一个事务。sys_xact目录的作用,就是记录每个事务的“状态”:是正在执行中、已经成功完成,还是已经取消(回滚)。

这个目录里的文件,大小都是固定的256KB,文件名从0000开始,依次递增到FFFF,就像一本本装订好的“账本”,每一本都记录着一部分事务的状态。当事务完成后,系统会在对应的“账本”里标记它的状态,后续可以通过这些记录,判断数据的有效性。

另外,这些“账本”也会定期“清理”——系统会通过VACUUM操作,删除那些已经过期、不再需要的事务记录,避免占用过多的磁盘空间,就像超市定期清理过期的商品一样。

2.5 其他常用目录:辅助数据库正常运行

除了上面四个核心目录,data目录里还有一些“辅助区域”,虽然不直接存放业务数据,但却是数据库正常运行不可或缺的部分,我们用一张简单的表格,快速了解它们的作用:

目录名称

核心作用

通俗理解

sys_multixact

记录多事务共享行锁的状态

超市里的“商品锁定记录”,避免多人同时修改同一件商品

sys_replslot

记录主从复制的状态

超市的“分店数据同步记录”,确保主店和分店的数据一致

sys_stat

存储数据库的统计信息

超市的“销售报表”,记录商品的销售情况,帮助优化库存

sys_tblspc

指向表空间的软链接

超市的“临时仓库指引”,告诉系统额外的商品存放在哪里

sys_aud

存储审计日志

超市的“安全日志”,记录谁在什么时候操作了什么数据

三、data目录里的“关键文件”:少了它们数据库就“罢工”

除了各种文件夹,data目录的根目录下,还有几个“关键文件”,它们就像数据库的“身份证”和“运行手册”,少了任何一个,数据库都无法正常启动。

3.1 kingbase.conf:数据库的“运行规则手册”

这个文件是数据库的“核心配置文件”,里面记录着数据库的运行规则:比如数据库能同时接受多少个连接、分配多少内存、日志的存储级别、 WAL日志的相关配置等等。

如果你觉得数据库运行太慢,可以修改这个文件里的内存配置;如果想调整日志的详细程度,也可以在这里修改。不过要注意,修改后需要重启数据库才能生效,就像修改了超市的规章制度,需要通知所有员工才能执行一样。

3.2 kingbase.auto.conf:自动生成的“补充规则”

这个文件是系统自动生成的,当你用SQL命令(比如ALTER SYSTEM SET)修改数据库配置时,系统会把修改后的配置存放在这里,它的优先级比kingbase.conf高。

简单来说,kingbase.conf是“手动配置”,kingbase.auto.conf是“自动配置”,如果两者有冲突,系统会优先使用kingbase.auto.conf里的配置,这样可以避免手动修改配置文件时出现错误。

3.3 sys_hba.conf:数据库的“门禁规则”

这个文件用来控制“谁能访问数据库”,就像超市的“门禁系统”,规定了哪些IP地址、哪些用户、可以通过什么方式访问数据库。

比如,你可以在这个文件里设置,只有公司内部的IP地址才能访问数据库,外部IP无法访问;也可以设置,某个用户只能通过密码登录,不能无密码访问。这样可以保证数据库的安全,防止非法访问。

3.4 kingbase.pid:数据库的“运行身份证”

这个文件是数据库启动后自动生成的,里面记录着数据库的运行信息:比如数据库的进程ID(PID)、data目录的路径、启动时间、监听端口、共享内存信息等等。

如果数据库启动失败,或者出现“无法启动,提示已在运行”的错误,就可以查看这个文件,确认数据库是否真的在运行,或者是否有残留的进程,删除这个文件后再重新启动(注意:删除前要确认数据库确实没有在运行,否则会导致数据损坏)。

四、简单总结:记住这几点,轻松理解data目录

看到这里,相信你已经对data目录有了一个清晰的认识。其实不用记住所有细节,只要抓住这几个核心点,就能轻松理解它的作用:

  1. data目录是数据库的“专属仓库”,所有数据、配置、日志都在这里;
  2. base存业务数据,global管全局配置,sys_wal保数据安全,sys_xact记事务状态;
  3. 根目录的几个关键文件,决定了数据库能不能启动、能不能安全运行;
  4. 不管是哪种关系型数据库,data目录的核心逻辑都大同小异,看懂一个,就能举一反三。

其实,数据库并没有我们想象中那么晦涩难懂,它的本质就是“一套精心设计的文件管理系统”——把数据分类存放,把操作记录下来,把规则制定好,就能保证数据的安全、稳定、高效运行。

下次再操作数据库的时候,不妨想一想:你写的SQL语句,最终会作用于data目录里的哪个文件?你查询的数据,是从base目录的哪个“储物柜”里取出来的?理解了这些,你对数据库的认知,会更上一层楼。