GaussDB 100单机版安装部署实战:从环境配置到健康检查
1. 从零到一为什么选择单机版GaussDB 100作为起点如果你正在寻找一款能够处理企业级核心交易、同时又想在本地环境快速上手体验的国产数据库那么GaussDB 100的单机版安装绝对是你绕不开的第一个实战环节。我接触过不少从Oracle、MySQL转过来的朋友他们最初的想法往往是“先找个能跑起来的版本看看”而单机版恰恰就是这个“看看”的最佳入口。它剥离了分布式架构的复杂性让你能在一个干净的环境里集中精力搞懂它的内核特性、SQL兼容性以及基础的管理操作。GaussDB 100作为一款面向OLTP场景的数据库其单机版完整保留了核心的事务处理能力、SQL标准支持和安全管控特性。这意味着你安装的这个“单机版”并不是一个功能阉割的演示版而是一个可以用于开发、测试甚至小规模生产环境的全功能数据库实例。通过亲手部署它你能直观地感受到它在安装流程、目录结构、参数配置上与传统数据库的异同这是阅读一百篇文档都换不来的第一手经验。这次安装我们将聚焦于最经典的Linux环境。我会带你走一遍从系统准备、软件解压、初始化到启动服务的完整链路过程中会穿插我踩过的那些“坑”比如依赖包版本冲突、环境变量配置的玄学问题、以及初始化失败时如何看日志定位根因。我们的目标不仅仅是让数据库服务gs_ctl start成功跑起来更是要理解每一个步骤背后的意图确保你装好的的是一个“健康”的、随时可以投入使用的数据库实例。2. 战前准备构建一个合格的数据库运行环境安装数据库七分靠准备三分靠执行。一个粗糙的系统环境会让后续的安装步骤举步维艰。GaussDB 100对操作系统、内核参数、资源规格都有明确要求我们必须严格按照官方建议来配置任何“差不多就行”的想法都可能埋下隐患。2.1 操作系统与硬件资源核查首先确认你的操作系统版本。GaussDB 100 V300R001C00版本通常要求基于CentOS 7.6或openEuler 20.03 LTS等。你可以使用cat /etc/os-release命令来查看。我个人的经验是尽量使用纯净的最小化安装系统避免系统中存在多个版本的glibc或其他基础库减少不可预见的冲突。硬件方面CPU建议至少4核内存不小于8GB。对于磁盘需要重点关注两点一是空间安装路径建议预留50GB以上二是I/O性能如果条件允许使用SSD磁盘会极大提升数据库的整体表现。你可以用df -h查看磁盘空间用fdisk -l或lsblk查看磁盘类型。注意务必使用独立的磁盘分区或目录来存放数据库数据绝对不要放在系统根目录/下防止数据库数据增长导致系统盘被写满引发系统崩溃。我吃过这个亏当时临时装在/opt下结果业务数据激增连带系统都登不进去了。2.2 系统参数与依赖包的精细调整这是准备工作中最繁琐但也最关键的一步直接关系到数据库实例的稳定性和性能上限。内核参数调整需要修改/etc/sysctl.conf文件主要涉及共享内存、信号量、网络和文件句柄数。以下是一组适用于中等规模实例的参考值你需要以root用户执行sysctl -p使其生效。# 在/etc/sysctl.conf末尾添加 # 共享内存段最大尺寸建议为物理内存一半以上 kernel.shmmax 68719476736 kernel.shmall 4294967296 # 信号量相关参数 kernel.sem 250 32000 100 128 # 网络核心参数提升连接性能 net.core.rmem_default 262144 net.core.wmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_max 4194304 net.ipv4.tcp_rmem 4096 87380 4194304 net.ipv4.tcp_wmem 4096 65536 4194304 # 最大文件句柄数 fs.file-max 6815744 # 减少TCP连接TIME_WAIT时间加快端口回收 net.ipv4.tcp_fin_timeout 30 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_tw_recycle 1用户资源限制编辑/etc/security/limits.conf为即将创建的数据库管理用户如omm设置资源软硬限制防止单个用户进程耗尽系统资源。omm soft nofile 1000000 omm hard nofile 1000000 omm soft nproc unlimited omm hard nproc unlimited omm soft stack unlimited omm hard stack unlimited依赖包安装使用yum一键安装所需的基础包。不同操作系统版本所需的包名可能有细微差异以下以CentOS 7为例yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel perl gcc gcc-c tar完成上述步骤后强烈建议重启一次服务器。很多内核参数和全局环境变量的修改需要重启才能完全生效不要抱有侥幸心理跳过这一步。重启后再次用sysctl -a | grep shm和ulimit -a以omm用户来验证参数是否已正确应用。3. 软件部署与数据库初始化实战当系统环境这个“地基”打牢固之后我们就可以开始“盖房子”了。这个阶段分为两步首先是部署数据库软件本身然后是创建一个可用的数据库实例。3.1 解压软件包与规划目录结构假设你已经从官方渠道获取了安装包GaussDB_100_1.0.0-REDHAT-64bit.tar.gz并将其上传至服务器/opt/software目录。首先创建数据库专用的管理用户和用户组。使用root用户操作groupadd dbgrp useradd -g dbgrp -m -d /home/omm omm passwd omm # 为omm用户设置一个强密码然后规划两个核心目录软件安装目录/opt/gaussdb/app用于存放可执行程序、库文件等静态内容。数据目录/opt/gaussdb/data用于存放数据库数据文件、日志文件、控制文件等动态内容。创建目录并授权mkdir -p /opt/gaussdb/app /opt/gaussdb/data chown -R omm:dbgrp /opt/gaussdb chmod -R 755 /opt/gaussdb接下来切换到omm用户开始解压和部署su - omm cd /opt/software tar -zxvf GaussDB_100_1.0.0-REDHAT-64bit.tar.gz -C /opt/gaussdb/app解压后/opt/gaussdb/app目录下通常会有一个以版本号命名的子目录例如gaussdb_100。为了方便管理可以创建一个软链接cd /opt/gaussdb/app ln -s gaussdb_100 gaussdb这样我们后续所有的操作都可以基于/opt/gaussdb/app/gaussdb这个固定路径即使未来升级版本也只需更改软链接指向而不用修改一堆配置脚本。3.2 关键配置文件解读与实例初始化初始化数据库实例是让一堆静态的二进制文件“活”起来变成一个可以接受连接、处理SQL的数据库服务。这个过程的核心是一个名为gs_initdb的工具而它的行为则由一个XML格式的配置文件config.xml所控制。在/opt/gaussdb/app/gaussdb目录下你可以找到一个模板配置文件。我们需要复制并修改它cd /opt/gaussdb/app/gaussdb cp config_template.xml config.xml vi config.xml这个配置文件内容很多但初期你只需要关注以下几个核心部分?xml version1.0 encodingUTF-8? ROOT !-- 集群信息单机版这里保持简单 -- CLUSTER PARAM nameclusterName valueSingleNodeCluster/ PARAM namenodeNames value/opt/gaussdb/data/ PARAM namebackIp1s value192.168.1.100/ !-- 替换为你的服务器IP -- PARAM namegaussdbAppPath value/opt/gaussdb/app/gaussdb/ PARAM namegaussdbDataPath value/opt/gaussdb/data/ PARAM namegaussdbLogPath value/opt/gaussdb/data/pg_log/ PARAM nametmpMppdbPath value/opt/gaussdb/data/tmp/ PARAM namegaussdbToolPath value/opt/gaussdb/app/gaussdb/tool/ PARAM namecorePath value/opt/gaussdb/data/corefile/ PARAM nameclusterType valuesingle-inst/ !-- 关键单机实例 -- /CLUSTER !-- 实例节点配置单机就一个 -- DEVICELIST DEVICE sn1000001 PARAM namename value/opt/gaussdb/data/ PARAM nameazName valueAZ1/ PARAM nameazPriority value1/ PARAM namebackIp1 value192.168.1.100/ !-- 数据库端口默认25308 -- PARAM namedataPortBase value25308/ !-- 数据库内部监听IP一般用0.0.0.0 -- PARAM namedataListenIp1 value0.0.0.0/ !-- 数据库内部通信端口 -- PARAM namedataHaIp1 value192.168.1.100/ PARAM namedataHaPort1 value26000/ /DEVICE /DEVICELIST /ROOT提示backIp1和dataHaIp1通常配置为服务器的业务平面IP地址。dataListenIp1设置为0.0.0.0表示监听所有IP方便远程连接但在生产环境建议绑定具体IP以增强安全。配置文件准备好后执行初始化命令。这个过程会创建数据目录结构、生成初始的系统表和数据字典。cd /opt/gaussdb/app/gaussdb/script ./gs_initdb -U omm -D /opt/gaussdb/data --config-file/opt/gaussdb/app/gaussdb/config.xml -w YourDBPassword123这里有几个关键参数-U omm指定初始化的超级管理员用户就是我们之前创建的omm。-D /opt/gaussdb/data指定数据目录路径。--config-file指定我们刚才编辑的配置文件。-w为omm用户设置数据库连接密码。务必设置一个强密码。初始化过程会在屏幕上输出大量日志。如果最终看到“[GAUSS-51600] : The gaussdb init succeeded.”这样的信息恭喜你最核心的一步已经成功了。如果失败请第一时间查看/opt/gaussdb/data/pg_log目录下最新的日志文件错误信息通常非常明确。4. 启动、连接与基础健康检查初始化成功相当于数据库的“躯体”已经塑造完毕但还没有“灵魂”运行中的进程。接下来我们让它运行起来并验证其基本功能是否正常。4.1 启动与停止数据库服务GaussDB 100使用gs_ctl这个工具来管理数据库实例的生命周期。启动服务cd /opt/gaussdb/app/gaussdb ./bin/gs_ctl start -D /opt/gaussdb/data -Z single_node-D指定数据目录路径告诉工具去哪里启动实例。-Z single_node明确指定为单机节点模式。启动成功后会提示“server started”。你可以通过以下命令检查进程是否存在ps -ef | grep gaussdb | grep -v grep你应该能看到一个以omm用户运行的gaussdb主进程。停止服务则使用./bin/gs_ctl stop -D /opt/gaussdb/data在运维中更常用的可能是restart重启和reload重载配置文件不重启服务命令。4.2 首次连接与基础SQL操作服务启动后我们使用GaussDB自带的命令行工具gsql进行连接。这是验证安装是否成功的直接方式。cd /opt/gaussdb/app/gaussdb ./bin/gsql -d postgres -p 25308 -U omm -W输入初始化时设置的密码后你应该会进入gsql的命令行提示符postgres#执行几个简单的SQL命令来感受一下查看版本select version();查看数据库列表\l(这是gsql的元命令注意前面有反斜杠)切换数据库\c template1(切换到模板数据库)创建一个测试库和表CREATE DATABASE mytestdb; \c mytestdb CREATE TABLE test_table (id INT, name VARCHAR(50)); INSERT INTO test_table VALUES (1, GaussDB 100); SELECT * FROM test_table;如果能顺利执行以上操作并看到正确结果那么从功能上讲你的单机版GaussDB 100已经安装成功并且具备了最基本的读写能力。4.3 安装后的必要健康检查清单安装成功并启动只是万里长征第一步。一个健康的数据库实例还需要通过以下几项检查日志检查查看/opt/gaussdb/data/pg_log目录下最新的日志确保没有持续的ERROR或FATAL级别的报错。偶尔的WARNING可以关注但不必过于紧张。端口监听使用netstat -tlnp | grep 25308确认数据库端口25308是否处于LISTEN状态并且进程号与之前查到的gaussdb主进程号一致。基础性能查询在gsql中执行SELECT * FROM pg_stat_activity;查看当前活动连接正常情况下除了你自己的gsql连接应该只有一些后台进程。磁盘空间监控使用df -h和du -sh /opt/gaussdb/data/*命令了解数据目录下各子目录的占用情况建立空间使用的基线印象。5. 避坑指南那些我亲自踩过的“雷”理论流程总是顺畅的但现实往往骨感。下面分享几个我在多次安装过程中遇到的典型问题及其解决方案希望能帮你节省大量排查时间。5.1 初始化失败“Failed to create shared memory segment”这是最常见的问题之一。错误信息通常指向shmget或shmat系统调用失败。根因分析根本原因就是我们在2.2节中调整的内核参数没有生效或者生效的值不足。特别是kernel.shmmax定义单个共享内存段的最大尺寸和kernel.shmall定义系统可分配的共享内存总页数。排查与解决首先以root身份执行sysctl -a | grep shm确认kernel.shmmax和kernel.shmall的值。计算一下shmmax应大于你为数据库配置的共享内存大小在配置文件中有相关参数如shared_buffersshmall应大于shmmax / PAGE_SIZE页大小通常为4096字节。如果值不对编辑/etc/sysctl.conf修正然后执行sysctl -p。最关键的一步如果修改了/etc/sysctl.conf必须重启服务器。仅执行sysctl -p有时无法让某些深层参数完全生效重启是最彻底的方法。还有一种情况是SELinux或AppArmor等安全模块限制了共享内存的创建。可以尝试临时将其设置为宽容模式测试setenforce 0CentOS/RHEL如果问题解决则需要配置相应的安全策略。5.2 启动失败“Lock file already exists”执行gs_ctl start时提示数据目录下的postmaster.pid或lockfile已存在。根因分析这通常意味着上一次数据库服务没有正常关闭比如被kill -9强制杀掉导致锁文件残留。解决方案首先再次确认数据库进程是否真的不存在了ps -ef | grep gaussdb | grep -v grep。如果确认没有进程可以安全地删除锁文件rm -f /opt/gaussdb/data/postmaster.pid文件路径可能在数据目录下。然后再次尝试启动。如果频繁出现此问题需要排查数据库异常退出的原因是内存不足、还是被运维脚本误杀。5.3 远程客户端无法连接本地gsql可以连但使用其他机器上的客户端工具如DBeaver、JDBC连接时超时或拒绝。排查链路检查监听配置确认config.xml中dataListenIp1是否为0.0.0.0或特定的业务IP而不是127.0.0.1。检查防火墙这是最大的“拦路虎”。需要在服务器防火墙开放25308端口。CentOS 7防火墙sudo firewall-cmd --zonepublic --add-port25308/tcp --permanent然后sudo firewall-cmd --reload。或者直接临时关闭防火墙测试仅用于排查systemctl stop firewalld。检查客户端连接串确保连接IP、端口、用户名、密码正确。密码中的特殊字符可能需要转义。检查数据库用户主机权限GaussDB默认可能只允许本地连接。你需要以omm用户登录后修改pg_hba.conf文件位于数据目录下添加允许远程主机连接的规则。例如host all all 192.168.1.0/24 md5这表示允许192.168.1.0/24网段的所有主机以密码方式连接所有数据库。修改后需要执行gs_ctl reload -D /opt/gaussdb/data重载配置无需重启。5.4 安装后运行缓慢简单查询都卡顿可能原因与对策磁盘I/O瓶颈这是首要怀疑对象。使用iostat -x 1命令查看磁盘利用率%util和响应时间await。如果利用率持续接近100%说明磁盘是瓶颈。考虑更换为SSD或检查是否有其他进程在大量读写同一块磁盘。内存不足数据库的shared_buffers等内存参数设置过大导致操作系统可用内存不足引发大量交换swap。使用free -h和top命令查看内存和swap使用情况。如果swap使用量持续增长需要调低数据库内存参数或为服务器增加物理内存。错误的参数配置单机版安装后一些默认参数可能偏保守。例如shared_buffers共享缓冲区默认值可能较小。你可以根据服务器内存大小在postgresql.conf也在数据目录下中进行调整比如设置为物理内存的1/4。注意任何参数修改都需要重启数据库服务才能生效。安装数据库是一个系统工程一次成功的安装是后续所有学习和应用的基础。遵循标准的步骤理解每一步的作用遇到问题时按照“日志-配置-系统环境”的顺序层层排查你就能从容应对大部分挑战。当你看到gsql命令行提示符闪烁并能流畅执行SQL时那种亲手搭建起一个企业级数据库系统的成就感就是技术人最好的回报。

相关新闻

MidiEditor技术解析:开源MIDI编辑解决方案在音乐制作中的应用

MidiEditor技术解析:开源MIDI编辑解决方案在音乐制作中的应用

MidiEditor技术解析:开源MIDI编辑解决方案在音乐制作中的应用 【免费下载链接】midieditor Provides an interface to edit, record, and play Midi data 项目地址: https://gitcode.com/gh_mirrors/mi/midieditor 行业痛点分析 传统MIDI编辑工具在音乐制作…

2026/10/9 19:52:12 阅读更多 →
Ark-Pets桌宠:专业配置与进阶使用指南

Ark-Pets桌宠:专业配置与进阶使用指南

Ark-Pets桌宠:专业配置与进阶使用指南 【免费下载链接】Ark-Pets Arknights Desktop Pets | 明日方舟桌宠 (ArkPets) 项目地址: https://gitcode.com/gh_mirrors/ar/Ark-Pets Ark-Pets是一款开源的《明日方舟》桌宠软件,能够将游戏中的干员模型以…

2026/10/15 17:08:40 阅读更多 →
加密货币钓鱼与钱包劫持攻击分层风险及全域防御体系研究 —— 基于 2026 上半年 110 亿美元资产失窃实证

加密货币钓鱼与钱包劫持攻击分层风险及全域防御体系研究 —— 基于 2026 上半年 110 亿美元资产失窃实证

摘要 2026 年上半年全球加密领域累计发生 212 起钓鱼、钱包洗劫类攻击,用户资产被盗总规模达 11 亿美元,全部安全事故均发生于应用操作层,比特币底层共识协议、椭圆曲线密码体系未出现任何可利用漏洞,协议原生安全框架具备稳定防护…

2026/10/14 2:55:18 阅读更多 →

最新新闻

esp-adf环境搭建-基于vscode插件扩展:把settings.json改到TaoToken统一Key通道

esp-adf环境搭建-基于vscode插件扩展:把settings.json改到TaoToken统一Key通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 16:59:03 阅读更多 →
CLI-Anything:命令行原生智能体范式

CLI-Anything:命令行原生智能体范式

1. 项目概述:CLI-Anything 不是又一个命令行工具,而是一套“命令行原生”的智能体交互范式你有没有过这种体验:在终端里敲下git status,心里却想着“要是它能自动告诉我哪些文件该加进暂存区、哪些可能漏了.gitignore规则就好了”…

2026/10/17 16:59:03 阅读更多 →
AI论文工具实测:从选题到答辩的效率与避坑指南

AI论文工具实测:从选题到答辩的效率与避坑指南

每年到了毕业季,总有人在群里问同一个问题:“有没有好用的AI论文工具?求推荐。”问的人多,踩坑的人更多——有人花了几个月时间试了十来个平台,最后发现生成内容既不能用、引用还是编的;也有人被号称“一键…

2026/10/17 16:59:03 阅读更多 →
Superpowers智能编程工具链:本地化AI开发工作流实战指南

Superpowers智能编程工具链:本地化AI开发工作流实战指南

1. 这不是魔法,是开发者正在用的“超能力”工具链最近在几个技术社区和内部开发群聊里,“superpowers”这个词出现频率高得有点反常——它既不是某个新发布的开源框架,也不是某家大厂的神秘项目代号,而是一整套正在被真实工程团队…

2026/10/17 16:59:03 阅读更多 →
AI电销机器人源码部署全指南:从架构拆解到上线调优

AI电销机器人源码部署全指南:从架构拆解到上线调优

简介:这是一份面向智能电销机器人部署的源码项目包,适合具备基础Linux操作经验、希望快速上手安装自动外呼系统的开发者或运维人员,对想了解服务器部署全流程的新手也颇为友好。压缩包共3个文件,以HTML页面承载部署教程&#xff0…

2026/10/17 16:59:03 阅读更多 →
AI辅助专著写作全流程:从选题到定稿的实操指南

AI辅助专著写作全流程:从选题到定稿的实操指南

写一本专著,对绝大多数人来说,第一反应都是“这事太大了”。从选题、搭框架、找文献、写初稿,到来回改格式、统一术语、核对引用,随便哪一环拎出来都够磨掉几个月。更要命的是,很多内容领域里的资深从业者,…

2026/10/17 16:58:03 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →