如何恢复极狐GitLab?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有:
- 极狐GitLab 中文文档
- 极狐GitLab 中文论坛
- 极狐GitLab 官网
恢复极狐GitLab (BASIC SELF)
极狐GitLab 提供了一个命令行界面来恢复整个安装,足够灵活以满足您的需求。
恢复先决条件部分 包含关键信息。在尝试在生产环境中执行之前,请务必至少阅读和测试完整的恢复过程一次。
恢复先决条件
目标极狐GitLab 实例必须已经在工作
您需要有一个正在运行的极狐GitLab 安装才能进行恢复。这是因为执行恢复操作的系统用户(git)通常不被允许创建或删除导入数据所需的 SQL 数据库(gitlabhq_production)。所有现有数据要么被删除(SQL),要么被移动到单独的目录(例如存储库和上传)。恢复 SQL 数据跳过 PostgreSQL 扩展拥有的视图。
目标极狐GitLab 实例必须具有完全相同的版本
您只能将备份恢复到创建它的极狐GitLab 的完全相同版本和类型(基础版或企业版)。例如,基础版 15.1.4。
如果您的备份版本与当前安装版本不同,则必须在恢复备份之前降级或升级您的极狐GitLab 安装。
极狐GitLab 密钥必须恢复
要恢复备份,您还必须恢复极狐GitLab 密钥。这些包括数据库加密密钥,CI/CD 变量,以及用于双因素认证的变量。如果没有这些密钥,会发生多个问题,包括启用双因素认证的用户无法访问,以及极狐GitLab Runner 无法登录。
恢复:
-
/etc/gitlab/gitlab-secrets.json(Linux 软件包安装)
-
/home/git/gitlab/.secret(自编译安装)
-
恢复密钥(云原生极狐GitLab)
- 如果需要,极狐GitLab Helm chart 密钥可以转换为 Linux 软件包格式。
某些极狐GitLab 配置必须与原始备份环境匹配
您可能还希望恢复之前的 /etc/gitlab/gitlab.rb(对于 Linux 软件包安装)或 /home/git/gitlab/config/gitlab.yml(对于自编译安装)以及任何 TLS 密钥、证书(/etc/gitlab/ssl,/etc/gitlab/trusted-certs),或 SSH 主机密钥。
某些配置与 PostgreSQL 中的数据相关。例如:
- 如果原始环境有三个存储库存储(例如,default、my-storage-1 和 my-storage-2),那么目标环境也必须至少在配置中定义这些存储名称。
- 从使用本地存储的环境恢复备份,即使目标环境使用对象存储,仍会恢复到本地存储。迁移到对象存储必须在恢复之前或之后完成。
恢复作为挂载点的目录
如果您要恢复到作为挂载点的目录中,则必须确保这些目录在尝试恢复之前是空的。否则,极狐GitLab 会在恢复新数据之前尝试移动这些目录,从而导致错误。
关于配置 NFS 挂载的信息。
Linux 软件包安装的恢复
该过程假设:
- 您已安装了极狐GitLab 的完全相同版本和类型(基础版/企业版),备份就是使用该版本创建的。
- 您至少运行过一次 sudo gitlab-ctl reconfigure。
- 极狐GitLab 正在运行。如果没有,请使用 sudo gitlab-ctl start 启动它。
首先确保您的备份 tar 文件位于 gitlab.rb 配置中描述的备份目录中 gitlab_rails[‘backup_path’]。默认路径是 /var/opt/gitlab/backups。备份文件需要由 git 用户拥有。
sudo cp 11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar /var/opt/gitlab/backups/
sudo chown git:git /var/opt/gitlab/backups/11493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar
停止连接到数据库的进程。让极狐GitLab 的其他部分继续运行:
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# 验证
sudo gitlab-ctl status
接下来,确保您已完成 恢复先决条件 步骤,并在从原始安装复制极狐GitLab 密钥文件后运行 gitlab-ctl reconfigure。
接下来,恢复备份,指定您要恢复的备份的 ID:
WARNING:
以下命令会覆盖您的极狐GitLab 数据库的内容!
# NOTE: "_gitlab_backup.tar" 是省略的名称
sudo gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
如果您的备份 tar 文件和安装的极狐GitLab 版本之间存在版本不匹配,恢复命令会以错误消息中止:
极狐GitLab 版本不匹配:您当前的极狐GitLab 版本(16.5.0-ee)与备份中的极狐GitLab 版本不同!请切换到以下版本并重试:version: 16.4.3-ee
安装正确的极狐GitLab 版本,然后重试。
WARNING:
恢复命令需要附加参数,当您的安装使用 PgBouncer 时,出于性能原因或与 Patroni 集群一起使用时。
接下来,重启并检查极狐GitLab:
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true
验证数据库值是否可以解密,特别是如果 /etc/gitlab/gitlab-secrets.json 已恢复,或如果不同的服务器是恢复目标。
sudo gitlab-rake gitlab:doctor:secrets
为增加保证,您可以对上传文件执行完整性检查:
sudo gitlab-rake gitlab:artifacts:check
sudo gitlab-rake gitlab:lfs:check
sudo gitlab-rake gitlab:uploads:check
恢复完成后,建议生成数据库统计数据以提高数据库性能并避免 UI 中的不一致:
1.进入数据库控制台。
2.运行以下命令:
SET STATEMENT_TIMEOUT=0 ; ANALYZE VERBOSE;
Docker 镜像和极狐GitLab Helm chart 安装的恢复
对于在 Kubernetes 集群上使用 Docker 镜像或极狐GitLab Helm chart 的极狐GitLab 安装,恢复任务期望恢复目录是空的。然而,使用 Docker 和 Kubernetes 卷挂载时,可能会在卷根目录创建一些系统级目录,例如在 Linux 操作系统中发现的 lost+found 目录。这些目录通常由 root 拥有,这可能导致访问权限错误,因为恢复 Rake 任务以 git 用户身份运行。要恢复极狐GitLab 安装,用户必须确认恢复目标目录是空的。
对于这两种安装类型,备份 tarball 必须可用于备份位置(默认位置是 /var/opt/gitlab/backups)。
Helm chart 安装的恢复
极狐GitLab Helm chart 使用恢复极狐GitLab Helm chart 安装中记录的过程。
Docker 镜像安装的恢复
如果您使用 Docker Swarm,容器可能会在恢复过程中重启,因为 Puma 被关闭,导致容器健康检查失败。为了解决这个问题,暂时禁用健康检查机制。
1.编辑 docker-compose.yml:
healthcheck:
disable: true
2.部署堆栈:
docker stack deploy --compose-file docker-compose.yml mystack可以从主机运行恢复任务:# 停止连接到数据库的进程
docker exec -it <name of container> gitlab-ctl stop puma
docker exec -it <name of container> gitlab-ctl stop sidekiq# 在继续之前验证所有进程都已关闭
docker exec -it <name of container> gitlab-ctl status# 运行恢复。NOTE: "_gitlab_backup.tar" 是省略的名称
docker exec -it <name of container> gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce# 重启极狐GitLab 容器
docker restart <name of container># 检查极狐GitLab
docker exec -it <name of container> gitlab-rake gitlab:check SANITIZE=true
自编译安装的恢复
首先,确保您的备份 tar 文件位于 gitlab.yml 配置中描述的备份目录中:
## 备份设置
backup:path: "tmp/backups" # 相对路径相对于 Rails.root(默认:tmp/backups/)
默认路径是 /home/git/gitlab/tmp/backups,并且需要由 git 用户拥有。现在,您可以开始备份过程:
# 停止连接到数据库的进程
sudo service gitlab stopsudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production
示例输出:
解压备份... [完成]
恢复数据库表:
-- create_table("events", {:force=>true})-> 0.2231s
[...]
- 加载固定事件...[完成]
- 加载固定议题...[完成]
- 加载固定密钥...[跳过]
- 加载固定合并请求...[完成]
- 加载固定里程碑...[完成]
- 加载固定命名空间...[完成]
- 加载固定备注...[完成]
- 加载固定项目...[完成]
- 加载固定受保护分支...[跳过]
- 加载固定 schema_migrations...[完成]
- 加载固定服务...[跳过]
- 加载固定代码片段...[跳过]
- 加载固定标记...[跳过]
- 加载固定标签...[跳过]
- 加载固定用户...[完成]
- 加载固定用户项目...[完成]
- 加载固定 web_hooks...[跳过]
- 加载固定 wiki...[跳过]
恢复存储库:
- 恢复存储库 abcd... [完成]
- 对象池 1 ...
删除临时目录...[完成]
接下来,如果需要恢复 /home/git/gitlab/.secret,如前所述。
重启极狐GitLab:
sudo service gitlab restart
从备份中仅恢复一个或几个项目或组
虽然用于恢复极狐GitLab 实例的 Rake 任务不支持恢复单个项目或组,但您可以通过将备份恢复到单独的临时极狐GitLab 实例,然后从那里导出项目或组来使用一种解决方法:
1.安装一个新的极狐GitLab 实例,版本与您要恢复的备份实例相同。
2.将备份恢复到这个新实例,然后导出您的项目或组。有关导出的内容和未导出的内容的更多信息,请参阅导出功能的文档。
3.导出完成后,转到旧实例,然后导入它。
4.完成您想要的项目或组导入后,您可以删除新的临时极狐GitLab 实例。
恢复增量存储库备份
每个备份档案都包含一个完整的自包含备份,包括通过增量存储库备份过程创建的备份。要恢复增量存储库备份,请使用与恢复任何其他常规备份档案相同的说明。
恢复选项
极狐GitLab 提供的命令行工具可以接受更多选项来从备份中恢复。
在存在多个备份时指定恢复的备份
备份文件使用以备份 ID 开头的命名方案 starting with a backup ID。当存在多个备份时,您必须通过设置环境变量 BACKUP= 来指定要恢复的 _gitlab_backup.tar 文件。
在恢复期间禁用提示
在从备份恢复期间,恢复脚本会提示确认:
- 如果启用了 Write to authorized_keys 设置,则在恢复脚本删除并重建 authorized_keys 文件之前。
- 在恢复数据库时,在恢复脚本删除所有现有表之前。
- 在恢复数据库后,如果恢复架构时出现错误,则在继续之前,因为可能会出现进一步的问题。
要禁用这些提示,请将 GITLAB_ASSUME_YES 环境变量设置为 1。
- Linux 软件包安装:
sudo GITLAB_ASSUME_YES=1 gitlab-backup restore
- 自编译安装:
sudo -u git -H GITLAB_ASSUME_YES=1 bundle exec rake gitlab:backup:restore RAILS_ENV=production
force=yes 环境变量也会禁用这些提示。
在恢复时排除任务
您可以通过添加环境变量 SKIP 来排除恢复时的特定任务,其值是以下选项的逗号分隔列表:
-
db(数据库)
-
uploads(附件)
-
builds(CI 作业输出日志)
-
artifacts(CI 作业制品)
-
lfs(LFS 对象)
-
terraform_state(Terraform 状态)
-
registry(容器注册表镜像)
-
pages(Pages 内容)
-
repositories(Git 存储库数据)
-
packages(软件包)
要排除特定任务:
- Linux 软件包安装:
sudo gitlab-backup restore BACKUP=<backup-id> SKIP=db,uploads
- 自编译安装:
sudo -u git -H bundle exec rake gitlab:backup:restore BACKUP=<backup-id> SKIP=db,uploads RAILS_ENV=production
恢复特定存储库存储
- 引入于极狐GitLab 15.0。
WARNING:
极狐GitLab 17.1 及更早版本受竞争条件影响,可能导致数据丢失。该问题影响了已被 fork 并使用极狐GitLab 对象池的存储库。为了避免数据丢失,仅使用极狐GitLab 17.2 或更高版本恢复备份。
当使用多个存储库存储时,可以使用 REPOSITORIES_STORAGES 选项单独恢复特定存储库存储的存储库。该选项接受逗号分隔的存储名称列表。
例如:
- Linux 软件包安装:
sudo gitlab-backup restore BACKUP=<backup-id> REPOSITORIES_STORAGES=storage1,storage2
- 自编译安装:
sudo -u git -H bundle exec rake gitlab:backup:restore BACKUP=<backup-id> REPOSITORIES_STORAGES=storage1,storage2
恢复特定存储库
- 引入于极狐GitLab 15.1。
WARNING:
极狐GitLab 17.1 及更早版本受竞争条件影响,可能导致数据丢失。该问题影响了已被 fork 并使用极狐GitLab 对象池的存储库。为了避免数据丢失,仅使用极狐GitLab 17.2 或更高版本恢复备份。
您可以使用 REPOSITORIES_PATHS 和 SKIP_REPOSITORIES_PATHS 选项恢复特定存储库。这两个选项都接受项目和组路径的逗号分隔列表。如果您指定了组路径,则所有项目中的所有存储库以及子组中的存储库都被包括在内或跳过,具体取决于您使用的选项。这些组和项目必须存在于指定的备份或目标实例中。
NOTE:
REPOSITORIES_PATHS 和 SKIP_REPOSITORIES_PATHS 选项仅适用于 Git 存储库。它们不适用于项目或组数据库条目。如果您使用 SKIP=db 创建了存储库备份,单独它不能用于将特定存储库恢复到新实例。
例如,要恢复 群组 A(group-a)中所有项目的所有存储库,群组 B 中 项目 C(group-b/project-c)的存储库,并跳过 群组 A 中的 项目 D(group-a/project-d):
- Linux 软件包安装:
sudo gitlab-backup restore BACKUP=<backup-id> REPOSITORIES_PATHS=group-a,group-b/project-c SKIP_REPOSITORIES_PATHS=group-a/project-d
- 自编译安装:
sudo -u git -H bundle exec rake gitlab:backup:restore BACKUP=<backup-id> REPOSITORIES_PATHS=group-a,group-b/project-c SKIP_REPOSITORIES_PATHS=group-a/project-d
恢复未打包的备份
如果发现未打包的备份(使用 SKIP=tar 创建),并且没有使用 BACKUP= 选择备份,则使用未打包的备份。
例如:
- Linux 软件包安装:
sudo gitlab-backup restore
- 自编译安装:
sudo -u git -H bundle exec rake gitlab:backup:restore
故障排除
以下是您可能遇到的问题以及潜在的解决方案。
使用 Linux 软件包安装时输出警告恢复数据库备份
如果您使用备份恢复程序,可能会遇到以下警告消息:
ERROR: 必须是扩展 pg_trgm 的所有者
ERROR: 必须是扩展 btree_gist 的所有者
ERROR: 必须是扩展 plpgsql 的所有者
WARNING: "public" 没有权限可以撤销(出现两次)
WARNING: "public" 没有权限被授予(出现两次)
请注意,备份已成功恢复,尽管有这些警告消息。
Rake 任务以 gitlab 用户身份运行,该用户没有数据库的超级用户访问权限。当恢复启动时,它也以 gitlab 用户身份运行,但它也尝试改变它没有访问权限的对象。这些对象对数据库备份或恢复没有影响,但显示警告消息。
有关更多信息,请参阅:
-
PostgreSQL 问题跟踪:
- 不是超级用户。
- 具有不同所有者。
由于 Git 服务器钩子导致恢复失败
在备份恢复期间,如果以下条件为真,您可能会遇到错误:
- 使用极狐GitLab 版本 15.10 及更早版本的方法配置了 Git 服务器钩子(custom_hook)
- 您的极狐GitLab 版本是版本 15.11 及更高版本
- 您创建了指向极狐GitLab 管理位置之外的目录的符号链接
错误看起来像:
{"level":"fatal","msg":"restore: pipeline: 1 failures encountered:\n - @hashed/path/to/hashed_repository.git (path/to_project): manager: restore custom hooks, \"@hashed/path/to/hashed_repository/<BackupID>_<GitLabVersion>-ee/001.custom_hooks.tar\": rpc error: code = Internal desc = setting custom hooks: generating prepared vote: walking directory: copying file to hash: read /mnt/gitlab-app/git-data/repositories/+gitaly/tmp/default-repositories.old.<timestamp>.<temporaryfolder>/custom_hooks/compliance-triggers.d: is a directory\n","pid":3256017,"time":"2023-08-10T20:09:44.395Z"}
要解决此问题,可以更新极狐GitLab 版本 15.11 及更高版本的 Git 服务器钩子,并创建新的备份。
使用 fapolicyd 时恢复成功但存储库显示为空
使用 fapolicyd 增强安全性时,极狐GitLab 可以报告恢复成功,但存储库显示为空。有关更多故障排除帮助,请参阅Gitaly 故障排除文档。
相关文章:
如何恢复极狐GitLab?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 恢复极狐GitLab (BASIC SELF) 极狐GitLab 提供了一个命令行界面来恢复整个安装,足够灵活以满足您的需求。 恢复…...
基于X86/Nvidia+FPGA大模型具身智能机器人控制器解决方案,同时拥有算力与实时的便利
2025年成为人形机器人产业化元年,行业已突破早期实验室研发阶段,进入"场景验证量产爬坡"新周期,预计2031年具身智能市场规模有望突破万亿元。这一进程的背后,是硬件算力、实时控制、环境适应等底层技术的系统性突破——…...
MATLAB项目实战(一)
题目: 某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:km)及水泥日用量d(t)由下表给出.目前有两个临时料场位于A(5,1),B(2,7),日储…...
PyCharm Flask 使用 Tailwind CSS 配置
使用 Tailwind CSS 步骤 1:初始化项目 在 PyCharm 终端运行:npm init -y安装 Tailwind CSS:npm install -D tailwindcss postcss autoprefixer初始化 Tailwind 配置文件:npx tailwindcss init这会生成 tailwind.config.js。 步…...
Mybtis和Mybatis-Plus区别
MyBatis 和 MyBatis-Plus 是 Java 中常用的持久层框架,MyBatis-Plus 是在 MyBatis 基础上增强的工具包,让开发更便捷、高效。下面是两者主要的区别: ✅ 核心区别总结: 特性MyBatisMyBatis-Plus配置复杂度需要手写大量 XML 或注解…...
《Learning Langchain》阅读笔记2-基于 Gemini 的 Langchain PromptTemplate 实现方式
本文将使用Gemini实现《Learning Langchain》中的PromptTemplate 实现方式,替代书中的调用openai API,白嫖太香了! 调试步骤 我们首先还是先在本地调试是否可以调用Gemini API: import getpass import osif "GOOGLE_API_K…...
LVS+keepalived搭建高可用架构
背景:最近在搭建LVSkeepalived的高可用架构,中间遇到了一些坑比较让人头疼,此处重要就安装部署的步骤进行记录,特别是遇到坑进行说明,希望能对有需要的同学提供给帮助! 坑点1: 在部署LVSkeepalived并且使用…...
【天梯赛练习】L2-035 完全二叉树的层序遍历
后序遍历转层序遍历 后序遍历:左——右——根层序遍历:数组形式存储的完全二叉树的顺序遍历序列其实就正好是其层序遍历序列。 子树根若是 i d id id,左子树 i d ∗ 2 id*2 id∗2,右子树 2 ∗ i d 1 2*id1 2∗id1 所以就是dfs递…...
2025.4.20机器学习笔记:文献阅读
2025.4.20周报 题目信息摘要创新点网络架构实验生成性能对比预测性能对比 结论不足以及展望 题目信息 题目: A novel flood forecasting model based on TimeGAN for data-sparse basins期刊: Stochastic Environmental Research and Risk Assessment作…...
Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】
1.题目基本信息 1.1.题目描述 给定一个大小为 m x n 的二维矩阵 grid。同时给定一个 非负整数 k。 返回满足下列条件的 grid 的子矩阵数量: 子矩阵中最大的元素 小于等于 k。 子矩阵的每一行都以 非递增 顺序排序。 矩阵的子矩阵 (x1, y1, x2, y2) 是通过选择…...
Redis面试——事务
一、Redis原子性是什么? (1)单个命令的原子性 原子性是指一组操作,要么全部执行成功,要么全部失败。Redis 中的单个命令是天然原子性的,因为 Redis 的命令执行采用单线程模型,同一时间只会执行…...
【远程管理绿联NAS】家庭云存储无公网IP解决方案:绿联NAS安装内网穿透
文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好,今天要带给大家一个超级酷炫的技能——如何让绿联NAS秒变‘千里眼’,通过简单的几步操作就能轻松实现内网穿透。想象一下,无论你身处何地&a…...
AI写程序:用 AI 实现一个递归批量转化 GBK/GB2312 转 UTF-8 工具:轻松解决文本编码转换难题
用 AI 实现一个递归批量转化 GBK/GB2312 转 UTF-8 工具 在处理历史文件或与不同系统交互时,我们经常会遇到 GBK 或 GB2312 编码的文本文件。虽然现在 UTF-8 是主流,但手动转换这些旧编码文件既繁琐又容易出错。为了解决这个问题,我开发了一个…...
首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析
以下是**首席人工智能官(Chief Artificial Intelligence Officer,CAIO)**的详细解析: 1. 职责与核心职能 制定AI战略 制定公司AI技术的长期战略,明确AI在业务中的应用场景和优先级,推动AI与核心业务的深度…...
uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱
解决思路 重新计算布局信息:在弹窗显示后重新调用 init 方法来计算组件的布局信息。使用 nextTick:保证在视图更新之后再进行布局信息的计算。 <u-tabs ref"tabsRef" ></u-tabs> makeClick(){this.makeShowtruethis.$nextTick…...
私人笔记:动手学大模型应用开发llm-universe项目环境创建
项目代码:datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程,在线阅读地址:https://datawhalechina.github.io/llm-universe/ 项目书:动手学大模型应用开发 一、初始化项目 uv init llm-universe-te…...
基于Django框架的图书索引智能排序系统设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,图书管理系统当然不能排除在外。图书索引智能排序系统是在实际应用和软件工程的开发原理之上,运用Python语言以及Django框架进…...
网络类型学习
网络类型的分类依据-----基于二层(数据链路层)使用的协议不同而导致数据包的封装方式不同,工作方式也不同。 OSPF协议根据链路层协议类型将网络分为四种类型:广播型网络(BMA)、非广播多路访问(…...
ubuntu24.04离线安装deb格式的mysql-community-8.4.4
1,下载解压 参考: https://blog.csdn.net/2202_76101487/article/details/145967039 下载: wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-server_8.4.4-1ubuntu24.04_amd64.deb-bundle.tar 建议个目录mysql8然后把安装包移过去&…...
电控---printf重定向输出
在嵌入式系统开发中,printf 重定向输出是将标准输出(stdout)从默认设备(如主机终端)重新映射到嵌入式设备的特定硬件接口(如串口、LCD、USB等)的过程。 一、核心原理:标准IO库的底层…...
uniapp使用createSelectorQuery,boundingClientRect获取宽度和高度不准确的可用的解决方案
场景展示: uniapp使用createSelectorQuery,boundingClientRect获取宽度和高度不准确的可用的解决方案,正常来说,使用下面的代码是可以正确获得宽高的,但是里面含有图片,在图片没有加载完的情况下,我们可以…...
DSO:牛津大学推出的物理一致性3D模型优化框架
在数字内容创作和制造领域,将2D图像转换为高质量、物理上稳定的3D模型一直是一个挑战。传统的3D建模方法往往需要大量的手动调整以确保生成的物体不仅美观而且符合物理定律,能够在现实世界中稳定存在。牛津大学近期推出了一款名为DSO(Direct Sparse Odometry)的项目,它不仅…...
Delphi Ini文件对UTF8支持不爽的极简替代方案
如题,没太多废话,直接复制走即可。 unit uConfig;interfaceuses classes, Sysutils;typeTConfig class privateFFileName: String;FConfig:TStringList; protectedpublicconstructor Create(ConfigFile:String);destructor Destroy;property FileName…...
Windows平台使用Docker部署Neo4j
✅ Docker 安装 Neo4j 前提条件:安装docker 打开docker desktop docker run \--name neo4j \-p7474:7474 -p7687:7687 \-d \-e NEO4J_AUTHneo4j/password123 \neo4j:5默认用户名是 neo4j,密码是你设置的,比如上面是 password123 ✅用 Pyt…...
FreeRTOS二值信号量详解与实战教程
FreeRTOS二值信号量详解与实战教程 📚 作者推荐:想系统学习FreeRTOS嵌入式开发?请访问我的FreeRTOS开源学习库,内含从入门到精通的完整教程和实例代码! 1. 二值信号量核心概念解析 二值信号量(Binary Semaphore)是Fre…...
数据结构与算法[零基础]---6.算法概况
六、算法概述 (一)算法的概述 任何解决问题的过程都是由一定的步骤组成的,把解决问题的方法和有限的步骤称作算法 (二)算法的基本特征 1.有穷性 算法必须在执行有限个操作之后终止,且每一步都可在有限时间内完成。 2.确定性 算…...
STL简介(了解)
1.什么是STL STL(standard template libaray)是标准模板库,它是C标准库的一部分。C标准库中还有一些其它东西,比如之前用的IO流。它主要是数据结构和算法的库。 2.STL的版本 C3.0出来后就有了模板,此时大家已经深受没有数据结构算法库的痛苦…...
使用 Oh My Posh 自定义 PowerShell 提示符
使用 Oh My Posh 自定义 PowerShell 提示符 由于ai生图,ai视频这方面mac太差了,买N卡,转windows了,这里也记录一下 PowerShell 配置Oh My Posh 先上效果图 一、下载 PowerShell7 默认的 PowerShell5 太差了,下载地…...
4月17号
//1.编码 String str "ai你哟"; byte[] bytes1 str.getBytes(); System.out.println(Arrays.toString(bytes1)); byte[] bytes2 str.getBytes(charsetName: "GBK"); System.out.println(Arrays.toString(bytes2));//2.解码 String str2 new String(byt…...
react-native搭建开发环境过程记录
主要参考:官网的教程 https://reactnative.cn/docs/environment-setup 环境介绍:macos ios npm - 已装node18 - 已装,通过nvm进行版本控制Homebrew- 已装yarn - 已装ruby - macos系统自带的2.2版本。watchman - 正常安装Xcode - 正常安装和…...
自然语言处理(NLP)技术。
自然语言处理(NLP)技术可以应用于多个领域,以下是一些示例: 情感分析:NLP可以用来分析文本中包含的情感,帮助企业了解用户对他们产品或服务的感受。例如,社交媒体平台可以利用情感分析技术来监测…...
Ubuntu 安装WPS Office
文章目录 Ubuntu 安装WPS Office下载安装文件安装WPS问题1.下载缺失字体文件2.安装缺失字体 Ubuntu 安装WPS Office 下载安装文件 需要到 WPS官网 下载最新软件,比如wps-office_12.1.0.17900_amd64.deb 安装WPS 执行命令进行安装 sudo dpkg -i wps-office_12.1…...
【WPF】 自定义控件的自定义属性
文章目录 前言一、自定义控件部分二、在页面中使用总结 前言 在一个页面,重复用到同一个自定义控件时,该如何对控件分别进行数据绑定呢?这时候可以赋予控件一个自定义的属性,来完成此操作。 一、自定义控件部分 为自定以控件设置…...
Unity URP Moblie AR示例工程,真机打包出来,没阴影
效果: unity ar示例演示 现象: 真机打包测试私活没有阴影 Unity版本:2022.3.4f1c1 分析原因: Prefab :ARFeatheredPlane中也有材质,一个用于环境遮挡,一个用于阴影接受。 按理说有啊。 urp …...
如何删除word中的长横线(由三个减号---自动生成/由三个等号===自动生成/由三个###自动生成)_word三个减号回车的横线怎么删除-CSDN博客
方法1、选中前后行ctrlX剪切掉 方法2:如果文件中没有表格就非常简单,直接CtrlA全选整个文档,然后在表格边框里面选择“无框线”OK,如果有表格的话,就从横线的下行开始向上随意选取一部分,同样在表格边框中选…...
函数返回const引用,使用const修饰变量接收
函数返回const引用,使用const修饰变量接收 1、背景 想获取红绿灯时长数组并添加新的值。有个函数是返回红绿灯时长数组的。函数返回类型为const引用,我使用无修饰的变量接收。但是感觉有些问题,并且之前看到const变量变成非const还需要使用…...
在激烈竞争下B端HMI设计怎样打造独特用户体验?
在当今数字化高度发展的时代,B 端市场竞争愈发激烈。对于 B 端 HMI(人机界面)设计而言,打造独特的用户体验已成为在竞争中脱颖而出的关键因素。B 端用户在复杂的工作场景中,对 HMI 设计有着独特的需求和期望࿰…...
数理逻辑(Mathematical Logic)综论与跨学科应用
李升伟 整理 数理逻辑(Mathematical Logic)是现代逻辑学与数学交叉的核心学科,以严格的数学方法研究逻辑推理的形式与规律。其发展深刻影响了数学基础、计算机科学、语言哲学等领域。以下从多个维度综论数理逻辑: 1. 核心分支 命…...
4.17---实现商铺和缓存与数据库双写一致以及宕机处理
实现商铺和缓存与数据库双写一致(以及强双写一致策略) redis点评项目采用的是延时双删策略 双删: 我们更新完数据库之后删除缓存,这样即使有线程并发进来查询,会发现缓存中没有数据,从而会去mysql中查找…...
qt与html通信
**Cef视图(CefView)**是指在使用Chromium Embedded Framework(CEF)时,嵌入到应用程序中的浏览器视图。CEF是一个开源项目,它基于Google的Chromium浏览器,允许开发者将Web浏览器功能嵌入到自己的…...
【从零实现高并发内存池】thread cache、central cache 和 page cache 回收策略详解
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
算法5-16 对二进制字符串解码
输入样例: 5 a 4 b 3 c 2 w 1 z 1 100001110101101101100111输出样例: baaacabwbzc ac代码: #include<iostream> #include<queue> #include<map> using namespace std; const int N10010; int idx; int a[N][2]; char b…...
[MySQL数据库] InnoDB存储引擎(三): 内存结构详解
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
TDengine 存储引擎剖析:数据文件与索引设计(一)
TDengine 存储引擎简介 在物联网、工业互联网等快速发展的今天,时间序列数据呈爆发式增长。这些数据具有产生频率高、依赖采集时间、测点多信息量大等特点,对数据存储和处理提出了极高要求。TDengine 作为一款高性能、分布式、支持 SQL 的时序数据库&am…...
CentOS更换yum源
CentOS更换yum源 视频教程: https://www.bilibili.com/video/BV1yWaSepE6z/?spm_id_from333.1007.top_right_bar_window_history.content.click 步骤: 第一步: cd /etc/yum.repos.d第二步:cp CentOS-Base.repo CentOS-Base.repo…...
【Kubernetes基础--持久化存储原理】--查阅笔记5
目录 持久化存储机制PV 详解PV 关键配置参数PV 生命周期的各个阶段 PVC 详解PVC 关键配置参数PV 和 PVC 的生命周期 StorageClass 详解StorageClass 关键配置参数设置默认的 StorageClass 持久化存储机制 k8s 对于有状态的容器应用或对数据需要持久化的应用,不仅需…...
数据库子查询实验全解析
目录 一、验证性实验:夯实基础(一)查询同班学生信息(二)查询成绩相关信息(三)查询课程选课人数(四)相关子查询(五)EXISTS嵌套子查询(六…...
HTML:表格数据展示区
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人员信息表</title><link rel"styl…...
webgl入门实例-08索引缓冲区的基本概念
WebGL 索引缓冲区 (Index Buffer) 索引缓冲区(也称为元素数组缓冲区)是WebGL中一种优化渲染性能的重要机制,它允许您重用顶点数据来绘制复杂的几何图形。 基本概念 索引缓冲区的工作原理: 您创建一个顶点缓冲区(包含所有顶点数据)然后创建一个索引缓…...
大数据应用开发——大数据平台集群部署
目录 前言 目录 基础环境 安装虚拟机 基础环境 VMware Workstation 虚拟机版本 : centos7 主机名 ip 用户名 密码 master192.168.245.100root123456slave1192.168.245.101root123456slave2192.168.245.102root123456 安装虚拟机 安装 名称、路径自己改 我有16核&…...