在我学习一门数据库的时候,有一个习惯就是把数据库的目录结构拆解一下。好处是可以较快了解一些常用我呢见的路径,而且遇到问题的时候可以有迹可循,在这过程中遇到任何疑问,去查查文档,也能学到更多。YashanDB里面两个比较重要的大目录分别是yasdb_home和yasdb_data,可以把它们约等于ORACLE_HOME和oradata这两个目录。我们来逐个拆解一下。
yasdb_home篇
yasdb_home是数据库软件的安装路径,它包含了如下的几个目录。
管理目录,里面有几个下一级目录,codepage、dbcr、simple_schema和upgrade。
codepage保存了一些gbk、iso之类的文件还有拼音排序。
dbcr里全是各类sql文件的脚本,比如创建视图、创建系统表,应该是建库时候调用的。
simple_schema(为啥不是sample?),里面有一个sales.sql,包含了样例数据
upgrade,升级目录,里面有个TXT文件会解释每个脚本的用途,里面有很多个旧版本升级脚本的目录
bin
二进制文件的目录,包含了诸如exp、imp、修改密码、备份、命令行等等诸多命令的文件,和Oracle Home里的bin目录一样
client
客户端目录,里面只有一个ini空文件
conf
配置文件路径,里面既包含了配置环境变量的bashrc,也有数据库参数的json文件,以及一些模板文件。值得一提的是,数据库参数文件里都有中文注释,不用查阅官方文档。还有一个下级目录monit,是监控平台和agent的配置信息。
ext
看名字是文件系统相关,进去发现里面既有bin目录,又有和监控相关的内容,还有index.html,官方文档没查到用途。
include
包含了几个头文件
java
包含了一个java的loader类文件
lib
动态链接库目录,看了一下,包含了不少名字里带yas的库,应该是自己开发的
log
日志目录,里面一个monit.log和一个集群/节点对应的目录,后者包含了运行日志和慢查询日志,慢查询日志记录了具体的事件、数据库名称、执行时间、SQL语句。运行日志,因为我的log级别是info,所以包含的东西就比较多,事无巨细几乎把每个数据库动作都记录了下来。
om
云管平台日志的目录,包含了备份日志、yasboot的安装日志、云管平台日志还有一些配置信息
plug-in
插件目录,里面自带了两个插件,正则表达式和几何图形
scripts
脚本目录,也是本次我最感兴趣的目录。如果大家去看稍微早一些的安装文档,会发现官方提供的安装方式都是在这个目录下的脚本里,例如install.sh。此外像初始化、日常启停、创建standby库,都在里面。
yasdb_data篇
yasdb_data是数据库实例对应的文件目录,一般是实例名/节点名两层。它包含了如下的几个目录。
archive
归档日志目录,能够看到的是,我这个近乎闲置的实例每天仍然会生成一个归档,而且上限和redo日志一样的128MB,
-rw-r----- 1 yashan users 36K Nov 21 13:58 arch_0_1.ARC
-rw-r----- 1 yashan users 128M Nov 22 02:00 arch_0_2.ARC
-rw-r----- 1 yashan users 732K Nov 23 09:41 arch_0_4.ARC
-rw-r----- 1 yashan users 128M Nov 25 02:00 arch_0_5.ARC
-rw-r----- 1 yashan users 128M Nov 26 02:00 arch_0_6.ARC
-rw-r----- 1 yashan users 128M Nov 27 14:30 arch_0_7.ARC
backup
bak_full_yashandb_instance1_20231126150000.tar.gz
备份目录,如果之前在ycm配置了定时备份任务,并且指定在这个路径,就会生成一个文件,格式是bak_备份方式_cluster名称_实例名称_时间戳.tar.gz,比如我这个文件就是一个在11月26日15点整启动的一个全备份。当然,手动的yasbak也可以指定在这里。
config
配置文件目录,我的实例里面只有一个文件yasdb.ini,里面的参数包含了集群id、节点id、还有各类日志文件和监听的基础信息
_CLUSTER_ID=655c46ac59cea6a7c0f8b1c65a4a1c65
NODE_ID=1-1:1
CONTROL_FILES=('/opt/app/yashandb/yasdb_data/db-1-1/dbfiles/ctrl1', '/opt/app/yashandb/yasdb_data/db-1-1/dbfiles/ctrl2', '/opt/app/yashandb/yasdb_data/db-1-1/dbfiles/ctrl3')
RUN_LOG_FILE_PATH=/opt/app/yashandb/yasdb_home/yashandb/23.1.1.100/log/yashandb/db-1-1/run
RUN_LOG_LEVEL=INFO
SLOW_LOG_FILE_PATH=/opt/app/yashandb/yasdb_home/yashandb/23.1.1.100/log/yashandb/db-1-1/slow
CHARACTER_SET=UTF8
LISTEN_ADDR=yasdbhost:1688
data
空目录,不知道放的什么,后面有时间研究
dbfiles
数据库文件目录,既包含了控制文件ctrln,又包含了redo文件redon,还有就是各类表空间文件,比较有意思的是,默认的命名都不包含扩展名,比如system表空间文件名就叫system,再就是默认安装的情况下,控制文件、redo日志文件不会分散到不同目录,如果上生产,还是需要DBA手动修改,把它们尽量分散到不同的存储对象下
diag
诊断目录,进去能看到一个pid文件。metadata下可以看到几个文件{hm_finding hm_run incident problem},具体用途还没有去仔细研究,看名字大概能猜出是健康检查和系统故障相关。没有手动跑过健康检查,所以hm和trace目录在我的实例是空的
external
只有一个server目录,一个yex_server.ini,里面也只有一个字符集参数。查了一下官方文档,yex是外置UDF代理程序服务的缩写,我没有使用。
instance
实例相关目录,其中有两个很重要的文件,一个是yasdb的pid文件,另一个是和Oracle类似的密码文件yasdb.pwd,保存了sys用户的密码,也可以用高权限账号来重置。
local_fs
看名字是本地文件系统,里面只有一个users空目录
log
日志目录,dba可能会用到最多的目录之一。再详细点,里面包含了几个下一级目录:
alert,顾名思义,类似oracle里的告警日志,作为故障排查必不可少的,包含了时间戳、会话ID、告警名称、对象ID、其他信息
audit,审计日志目录,我是默认安装没有开启审计所以里面没有审计日志
external,看名字是外部,里面依旧是空的,也许是yex相关,拍脑子猜的
listener,监听日志目录,记录了每次登录的日志,时间、包含IP、协议、端口、用户名、状态,够用了
run,空目录,因为运行日志配置在了yasdb_home下
start.log,启动日志,从官方文档内容来看,记录的是yasboot相关错误信息
trace,trace日志目录,我的实例中依旧是空的
tmp
临时目录,官方文档里没有查到相关信息,所以存放哪些临时信息还不清楚
小结
能看出来,yasdb的目录从名称到用途,和oracle既有相似的地方,又有诸多不同之处,并没有完全照搬,这一点还是很值得学习的。当然,我还是想提一个小小建议,如果可以,是否能把每个目录具体用途在文档里都写上。如果在活动结束前来得及,我再写一篇对象类型或者SQL语法相关的内容。