TiDB v8.5.3 單機集群部署指南

前言

最近在做 TiDB 的恢復演練,需要在單臺 Linux 服務器上部署一套 TiDB 最小的完整拓撲的集群,本文記錄一下安裝過程。

環境準備

開始部署 TiDB 集群前,準備一臺部署主機,確保其軟件滿足需求:

  • 推薦安裝 CentOS 7.3 及以上版本
  • 運行環境可以支持互聯網訪問,用于下載 TiDB 及相關軟件安裝包

注意:TiDB 從 v8.5.1 版本起重新適配 glibc 2.17,恢復了對 CentOS Linux 7 的兼容性支持。

環境信息

最小規模的 TiDB 集群拓撲包含以下實例:

組件數量IP端口配置
PD1192.168.31.792379/2380
TiDB1192.168.31.794000/10080
TiKV3192.168.31.7920160-20162/20180-20182
TiFlash1192.168.31.799000/3930/20170/20292/8234/8123
Prometheus1192.168.31.799090/12020
Grafana1192.168.31.793000

安裝依賴庫

編譯和構建 TiDB 所需的依賴庫:

  • Golang 1.23 及以上版本
  • Rust nightly-2023-12-28 及以上版本
  • LLVM 17.0 及以上版本
  • sshpass 1.06 及以上
  • GCC 7.x(不滿足)
  • glibc 2.28-151.el8 版本(不滿足)

下載所需依賴包:

  • Rust 下載地址:https://forge.rust-lang.org/infra/other-installation-methods.html
  • Golang 下載地址:https://go.dev/dl/
  • sshpass 下載地址:https://sourceforge.net/projects/sshpass/files/latest/download

Golang 安裝:

[root@test soft]# tar -C /usr/local -xf go1.25.0.linux-amd64.tar.gz
[root@test ~]# cat<<-\EOF>>/root/.bash_profile
export PATH=$PATH:/usr/local/go/bin
EOF
[root@test ~]# source /root/.bash_profile
[root@test ~]# go version
go version go1.25.0 linux/amd64

Rust 安裝:

[root@test soft]# tar -xf rust-1.89.0-x86_64-unknown-linux-gnu.tar.tar
[root@test soft]# cd rust-1.89.0-x86_64-unknown-linux-gnu/
[root@test rust-1.89.0-x86_64-unknown-linux-gnu]# ./install.sh
[root@test ~]# rustc --version
rustc 1.89.0 (29483883e 2025-08-04)

sshpass 安裝:

[root@test soft]# tar -xf sshpass-1.10.tar.gz
[root@test soft]# cd sshpass-1.10/
[root@test sshpass-1.10]# ./configure && make && make install
[root@test ~]# sshpass -V
sshpass 1.10

關閉防火墻

[root@test ~]# systemctl stop firewalld.service
[root@test ~]# systemctl disable firewalld.service
[root@test ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)

檢測及關閉 swap

[root@test ~]# echo "vm.swappiness = 0">> /etc/sysctl.conf
[root@test ~]# swapoff -a
[root@test ~]# sysctl -p
vm.swappiness = 0

記得修改 /etc/fstab 配置,注釋掉 swap 分區:

#/dev/mapper/centos-swap swap                    swap    defaults        0 0

檢查和配置操作系統優化參數

[root@test ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@test ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@test ~]# cat<<EOF>>/etc/sysctl.conf
fs.file-max = 1000000
net.core.somaxconn = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_syncookies = 0
vm.overcommit_memory = 1
EOF[root@test ~]# sysctl -p[root@test ~]# cat<<EOF>>/etc/security/limits.conf
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft stack 32768
tidb hard stack 32768
EOF

調整 MaxSessions

由于模擬多機部署,需要通過 root 用戶調大 sshd 服務的連接數限制:

[root@test ~]# vim /etc/ssh/sshd_config
## 調整 MaxSessions 20
[root@test ~]# systemctl restart sshd.service

創建 TiDB 用戶

[root@test ~]# useradd tidb
[root@test ~]# echo "Tidb@123" |passwd tidb --stdin
Changing password for user tidb.
passwd: all authentication tokens updated successfully.
[root@test ~]# cat<<-EOF>>/etc/sudoers
tidb ALL=(ALL) NOPASSWD: ALL
EOF

實施部署

本文是內網環境,不使用官方在線源安裝,使用本地鏡像源進行部署,本地鏡像源部署請參考:TiDB 離線部署 TiUP 組件。

tiup 已部署完成:

[root@test ~]# tiup mirror show
/root/tidb-community-server-v8.5.3-linux-amd64[root@test ~]# tiup --version
1.16.2 tiup
Go Version: go1.21.13
Git Ref: v1.16.2
GitHash: 678c52de0c0ef30634b8ba7302a8376caa95d50d

創建并啟動集群:

[root@test ~]# cat<<-\EOF>topo.yaml
# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:user: "tidb"ssh_port: 11122deploy_dir: "/data/tidb-deploy"data_dir: "/data/tidb-data"# # Monitored variables are applied to all the machines.
monitored:node_exporter_port: 9100blackbox_exporter_port: 9115server_configs:tidb:instance.tidb_slow_log_threshold: 300tikv:readpool.storage.use-unified-pool: falsereadpool.coprocessor.use-unified-pool: truepd:replication.enable-placement-rules: truereplication.location-labels: ["host"]tiflash:logger.level: "info"pd_servers:- host: 192.168.31.79tidb_servers:- host: 192.168.31.79tikv_servers:- host: 192.168.31.79port: 20160status_port: 20180config:server.labels: { host: "logic-host-1" }- host: 192.168.31.79port: 20161status_port: 20181config:server.labels: { host: "logic-host-2" }- host: 192.168.31.79port: 20162status_port: 20182config:server.labels: { host: "logic-host-3" }tiflash_servers:- host: 192.168.31.79monitoring_servers:- host: 192.168.31.79grafana_servers:- host: 192.168.31.79
EOF

安裝前預檢查:

[root@test ~]# tiup cluster check topo.yaml --user root -p
Input SSH password:+ Detect CPU Arch Name- Detecting node 192.168.31.79 Arch info ... Done+ Detect CPU OS Name- Detecting node 192.168.31.79 OS info ... Done
+ Download necessary tools- Downloading check tools for linux/amd64 ... Done
+ Collect basic system information
+ Collect basic system information- Getting system info of 192.168.31.79:11122 ... Done
+ Check time zone- Checking node 192.168.31.79 ... Done
+ Check system requirements
+ Check system requirements
+ Check system requirements
+ Check system requirements- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done- Checking node 192.168.31.79 ... Done
+ Cleanup check files- Cleanup check files on 192.168.31.79:11122 ... Done
Node          Check         Result  Message
----          -----         ------  -------
192.168.31.79  os-version    Fail    CentOS Linux 7 (Core) 7.9.2009 not supported, use version 9 or higher
192.168.31.79  cpu-cores     Pass    number of CPU cores / threads: 4
192.168.31.79  ntp           Warn    The NTPd daemon may be not start
192.168.31.79  disk          Warn    mount point /data does not have 'noatime' option set
192.168.31.79  selinux       Pass    SELinux is disabled
192.168.31.79  thp           Pass    THP is disabled
192.168.31.79  command       Pass    numactl: policy: default
192.168.31.79  cpu-governor  Warn    Unable to determine current CPU frequency governor policy
192.168.31.79  memory        Pass    memory size is 8192MB
192.168.31.79  network       Pass    network speed of ens192 is 10000MB
192.168.31.79  disk          Fail    multiple components tikv:/data/tidb-data/tikv-20160,tikv:/data/tidb-data/tikv-20161,tikv:/data/tidb-data/tikv-20162,tiflash:/data/tidb-data/tiflash-9000 are using the same partition 192.168.31.79:/data as data dir
192.168.31.79  disk          Fail    mount point /data does not have 'nodelalloc' option set

部署集群:

[root@test ~]# tiup cluster deploy lucifer v8.5.3 topo.yaml --user root -p
Input SSH password:+ Detect CPU Arch Name- Detecting node 192.168.31.79 Arch info ... Done+ Detect CPU OS Name- Detecting node 192.168.31.79 OS info ... Done
Please confirm your topology:
Cluster type:    tidb
Cluster name:    lucifer
Cluster version: v8.5.3
Role        Host          Ports                            OS/Arch       Directories
----        ----          -----                            -------       -----------
pd          192.168.31.79  2379/2380                        linux/x86_64  /data/tidb-deploy/pd-2379,/data/tidb-data/pd-2379
tikv        192.168.31.79  20160/20180                      linux/x86_64  /data/tidb-deploy/tikv-20160,/data/tidb-data/tikv-20160
tikv        192.168.31.79  20161/20181                      linux/x86_64  /data/tidb-deploy/tikv-20161,/data/tidb-data/tikv-20161
tikv        192.168.31.79  20162/20182                      linux/x86_64  /data/tidb-deploy/tikv-20162,/data/tidb-data/tikv-20162
tidb        192.168.31.79  4000/10080                       linux/x86_64  /data/tidb-deploy/tidb-4000
tiflash     192.168.31.79  9000/3930/20170/20292/8234/8123  linux/x86_64  /data/tidb-deploy/tiflash-9000,/data/tidb-data/tiflash-9000
prometheus  192.168.31.79  9090/12020                       linux/x86_64  /data/tidb-deploy/prometheus-9090,/data/tidb-data/prometheus-9090
grafana     192.168.31.79  3000                             linux/x86_64  /data/tidb-deploy/grafana-3000
Attention:1. If the topology is not what you expected, check your yaml file.2. Please confirm there is no port/directory conflicts in same host.
Do you want to continue? [y/N]: (default=N) y
+ Generate SSH keys ... Done
+ Download TiDB components- Download pd:v8.5.3 (linux/amd64) ... Done- Download tikv:v8.5.3 (linux/amd64) ... Done- Download tidb:v8.5.3 (linux/amd64) ... Done- Download tiflash:v8.5.3 (linux/amd64) ... Done- Download prometheus:v8.5.3 (linux/amd64) ... Done- Download grafana:v8.5.3 (linux/amd64) ... Done- Download node_exporter: (linux/amd64) ... Done- Download blackbox_exporter: (linux/amd64) ... Done
+ Initialize target host environments- Prepare 192.168.31.79:11122 ... Done
+ Deploy TiDB instance- Copy pd -> 192.168.31.79 ... Done- Copy tikv -> 192.168.31.79 ... Done- Copy tikv -> 192.168.31.79 ... Done- Copy tikv -> 192.168.31.79 ... Done- Copy tidb -> 192.168.31.79 ... Done- Copy tiflash -> 192.168.31.79 ... Done- Copy prometheus -> 192.168.31.79 ... Done- Copy grafana -> 192.168.31.79 ... Done- Deploy node_exporter -> 192.168.31.79 ... Done- Deploy blackbox_exporter -> 192.168.31.79 ... Done
+ Copy certificate to remote host
+ Init instance configs- Generate config pd -> 192.168.31.79:2379 ... Done- Generate config tikv -> 192.168.31.79:20160 ... Done- Generate config tikv -> 192.168.31.79:20161 ... Done- Generate config tikv -> 192.168.31.79:20162 ... Done- Generate config tidb -> 192.168.31.79:4000 ... Done- Generate config tiflash -> 192.168.31.79:9000 ... Done- Generate config prometheus -> 192.168.31.79:9090 ... Done- Generate config grafana -> 192.168.31.79:3000 ... Done
+ Init monitor configs- Generate config node_exporter -> 192.168.31.79 ... Done- Generate config blackbox_exporter -> 192.168.31.79 ... Done
Enabling component pdEnabling instance 192.168.31.79:2379Enable instance 192.168.31.79:2379 success
Enabling component tikvEnabling instance 192.168.31.79:20162Enabling instance 192.168.31.79:20160Enabling instance 192.168.31.79:20161Enable instance 192.168.31.79:20162 successEnable instance 192.168.31.79:20161 successEnable instance 192.168.31.79:20160 success
Enabling component tidbEnabling instance 192.168.31.79:4000Enable instance 192.168.31.79:4000 success
Enabling component tiflashEnabling instance 192.168.31.79:9000Enable instance 192.168.31.79:9000 success
Enabling component prometheusEnabling instance 192.168.31.79:9090Enable instance 192.168.31.79:9090 success
Enabling component grafanaEnabling instance 192.168.31.79:3000Enable instance 192.168.31.79:3000 success
Enabling component node_exporterEnabling instance 192.168.31.79Enable 192.168.31.79 success
Enabling component blackbox_exporterEnabling instance 192.168.31.79Enable 192.168.31.79 success
Cluster `lucifer` deployed successfully, you can start it with command: `tiup cluster start lucifer --init`

啟動集群:

[root@test ~]# tiup cluster start lucifer --init
Starting cluster lucifer...
+ [ Serial ] - SSHKeySet: privateKey=/root/.tiup/storage/cluster/clusters/lucifer/ssh/id_rsa, publicKey=/root/.tiup/storage/cluster/clusters/lucifer/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [Parallel] - UserSSH: user=tidb, host=192.168.31.79
+ [ Serial ] - StartCluster
Starting component pdStarting instance 192.168.31.79:2379Start instance 192.168.31.79:2379 success
Starting component tikvStarting instance 192.168.31.79:20162Starting instance 192.168.31.79:20160Starting instance 192.168.31.79:20161Start instance 192.168.31.79:20162 successStart instance 192.168.31.79:20161 successStart instance 192.168.31.79:20160 success
Starting component tidbStarting instance 192.168.31.79:4000Start instance 192.168.31.79:4000 success
Starting component tiflashStarting instance 192.168.31.79:9000Start instance 192.168.31.79:9000 success
Starting component prometheusStarting instance 192.168.31.79:9090Start instance 192.168.31.79:9090 success
Starting component grafanaStarting instance 192.168.31.79:3000Start instance 192.168.31.79:3000 success
Starting component node_exporterStarting instance 192.168.31.79Start 192.168.31.79 success
Starting component blackbox_exporterStarting instance 192.168.31.79Start 192.168.31.79 success
+ [ Serial ] - UpdateTopology: cluster=lucifer
Started cluster `lucifer` successfully
The root password of TiDB database has been changed.
The new password is: 'm+92G0Q3eNR4^6cq*@'.
Copy and record it to somewhere safe, it is only displayed once, and will not be stored.
The generated password can NOT be get and shown again.

查看集群:

[root@test ~]# tiup cluster list
Name      User  Version  Path                                           PrivateKey
----      ----  -------  ----                                           ----------
lucifer  tidb  v8.5.3   /root/.tiup/storage/cluster/clusters/lucifer  /root/.tiup/storage/cluster/clusters/lucifer/ssh/id_rsa

檢查集群狀態:

[root@test ~]# tiup cluster display lucifer
Cluster type:       tidb
Cluster name:       lucifer
Cluster version:    v8.5.3
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://192.168.31.79:2379/dashboard
Dashboard URLs:     http://192.168.31.79:2379/dashboard
Grafana URL:        http://192.168.31.79:3000
ID                  Role        Host          Ports                            OS/Arch       Status   Data Dir                         Deploy Dir
--                  ----        ----          -----                            -------       ------   --------                         ----------
192.168.31.79:3000   grafana     192.168.31.79  3000                             linux/x86_64  Up       -                                /data/tidb-deploy/grafana-3000
192.168.31.79:2379   pd          192.168.31.79  2379/2380                        linux/x86_64  Up|L|UI  /data/tidb-data/pd-2379          /data/tidb-deploy/pd-2379
192.168.31.79:9090   prometheus  192.168.31.79  9090/12020                       linux/x86_64  Up       /data/tidb-data/prometheus-9090  /data/tidb-deploy/prometheus-9090
192.168.31.79:4000   tidb        192.168.31.79  4000/10080                       linux/x86_64  Up       -                                /data/tidb-deploy/tidb-4000
192.168.31.79:9000   tiflash     192.168.31.79  9000/3930/20170/20292/8234/8123  linux/x86_64  Up       /data/tidb-data/tiflash-9000     /data/tidb-deploy/tiflash-9000
192.168.31.79:20160  tikv        192.168.31.79  20160/20180                      linux/x86_64  Up       /data/tidb-data/tikv-20160       /data/tidb-deploy/tikv-20160
192.168.31.79:20161  tikv        192.168.31.79  20161/20181                      linux/x86_64  Up       /data/tidb-data/tikv-20161       /data/tidb-deploy/tikv-20161
192.168.31.79:20162  tikv        192.168.31.79  20162/20182                      linux/x86_64  Up       /data/tidb-data/tikv-20162       /data/tidb-deploy/tikv-20162
Total nodes: 8

安裝 MySQL 客戶端

TiDB 兼容 MySQL 協議,故需要 MySQL 客戶端連接,則需安裝 MySQL 客戶端,Linux7 版本的系統默認自帶安裝了 MariaDB,需要先清理:

[root@test ~]# rpm -e --nodeps $(rpm -qa | grep mariadb)

找個有網的環境下載:

[root@lucifer ~]# wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
[root@lucifer ~]# wget http://dev.mysql.com/get/mysql80-community-release-el7-10.noarch.rpm

安裝 MySQL 客戶端:

[root@test ~]# yum -y install mysql80-community-release-el7-10.noarch.rpm
[root@test ~]# rpm --import RPM-GPG-KEY-mysql-2023
[root@test ~]# yum -y install mysql

連接數據庫:

## 這里的 root 初始密碼在 tidb 集群初始化時日志中輸出的密碼 m+92G0Q3eNR4^6cq*@
[root@test ~]# mysql -h 192.168.31.79 -P 4000 -uroot –p
mysql> show databases;

修改初始 root 密碼:

mysql> use mysql
mysql> alter user 'root'@'%' identified by 'tidb';

集群監控:

  • Dashboard:http://192.168.31.79:2379/dashboard (使用 root/tidb 登錄)
  • Grafana:http://192.168.31.79:3000 (默認密碼:admin/admin)

寫在最后

至此,TiDB 單機集群部署完成,可用于開發測試和學習研究。生產環境建議參考官方推薦的多機部署方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95441.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ClickHouse常見問題——ClickHouseKeeper配置listen_host后不生效

ClickHouseKeeper配置listen_host后不生效ClickHouseKeeper配置listen_host后不生效ClickHouseKeeper配置listen_host后不生效 3節點部署ClickHouse集群后&#xff0c;ClickHouse Server執行報錯&#xff1a; Poco::Exception. Code: 1000, e.code() 111, Connection refuse…

《Python × MongoDB 實戰指南:從連接到查詢,構建高效數據操作流程》

《Python MongoDB 實戰指南:從連接到查詢,構建高效數據操作流程》 一、引言:當 Python 遇上 MongoDB 在當今數據驅動的開發世界里,MongoDB 以其靈活的文檔結構、強大的查詢能力和良好的擴展性,成為 NoSQL 數據庫中的佼佼者。而 Python,作為一門簡潔優雅、生態豐富的編…

【Flask + Vue3 前后端分離管理系統】

Flask Vue3 前后端分離管理系統 項目概述 本項目是一個基于 Flask 后端和 Vue3 前端的前后端分離管理系統。項目實現了用戶管理、角色管理、菜單管理、權限控制等完整的后臺管理功能。 技術棧 后端技術棧&#xff1a; Flask 3.0.0 - Python Web框架Flask-SQLAlchemy 3.1.1 - O…

51c視覺~3D~合集5

自己的原文哦~ https://blog.51cto.com/whaosoft/14165531 #AnimateAnyMesh 文本驅動通用網格動畫新范式&#xff0c;實現高效高質量4D內容生成 4D 內容生成&#xff0c;即包含時間維度信息的 3D 內容創建&#xff0c;在 VR/AR、游戲等領域具有廣闊的應用前景。…

開悟篇Docker從零到實戰一篇文章搞定

目錄 一:概述 1:why docker 2:Docker是什么? 3:Docker核心概念 二:初步體驗 1:Docker核心架構圖 2:準備工作 1:服務器 2:Docker安裝 3:阿里云docker安裝 4:鏡像加速 三:Docker命令和幫助文檔的使用 1:幫助文檔 2:鏡像的基本操作 1:查看本地…

LINUX驅動篇(二)驅動開發

系列文章目錄 文章目錄系列文章目錄總結介紹字符設備驅動工作原理驅動框架加載卸載注冊注銷設備號詳解打開關閉等操作實例分析led驅動編寫地址映射LED驅動改進驅動方式總結自動注冊注銷設備號自動創建設備節點設備樹設備樹LED驅動實驗pinctrl和gpio并發和競爭原子操作自旋鎖塊設…

【工具】開源大屏設計器 自用整理

【工具】開源大屏設計器 自用整理 GoView低代碼數據可視化 GoView 說明文檔 | 低代碼數據可視化開發平臺 JimuReport積木報表(免費報表工具) https://github.com/jeecgboot/JimuReport 「數據可視化&#xff1a;報表、大屏、數據看板」積木報表是一款類Excel操作風格&#xf…

.NetCore MVC

這個是我自己記得筆記&#xff0c;最好有點基礎看我的。 html 輔助標簽 Html.DropList 分布視圖 使用 RenderPartialAsync 呈現分部視圖。 此方法不返回 IHtmlContent。 它將呈現的輸出直接流式傳輸到響應。 因為該方法不返回結果&#xff0c;所以必須在 Razor 代碼塊內調用它…

@GitLab 介紹部署使用詳細指南

文章目錄**GitLab 介紹&部署&使用詳細指南****1. GitLab 介紹與核心概念****1.1 什么是 GitLab&#xff1f;****1.2 核心特性****1.3 版本區別****2. 部署指南 (以 Ubuntu 22.04 LTS 為例)****2.1 環境準備****2.2 安裝步驟****2.3 重要配置文件****3. 基本使用入門***…

如何通過 AI IDE 集成開發工具快速生成簡易留言板系統

在當今快速迭代的軟件開發環境中&#xff0c;AI 輔助編程工具已經成為開發者提高效率的重要手段。本文將詳細介紹如何利用 AI IDE 集成開發工具快速構建一個功能完整的簡易留言板系統&#xff0c;涵蓋從需求分析到部署上線的全過程&#xff0c;并提供完整代碼、流程圖、Prompt …

機器學習:從技術原理到實踐應用的深度解析

目錄引言一.什么是機器學習&#xff08;ML&#xff09;&#xff1f;——從技術本質到核心目標1.與傳統編程的本質區別&#xff1a;規則的“來源不同”2.核心目標&#xff1a;在“偏差-方差權衡”下優化性能指標二.機器學習的核心分類——基于“數據標簽”與“學習范式”的技術劃…

[muduo網絡庫]-muduo庫TcpServer類解析

本貼用于記錄muduo庫的學習過程&#xff0c;以下是關于TcpServer的個人理解。 TcpServer內含Acceptor、threadpool等類&#xff0c;算是把主線程所有要做的事封裝了起來。 重要成員變量 EventLoop *loop_; // baseloop 用戶自定義的loopconst std::string ipPort_;const std…

工作兩年,最后從css轉向tailwind了!

菜鳥上班已經兩年了&#xff0c;從一個對技術充滿熱情的小伙子&#xff0c;變成了一個職場老鳥了。自以為自己在不停的學習&#xff0c;但是其實就是學一些零碎的知識點&#xff0c;比如&#xff1a;vue中什么東西沒見過、js什么特性沒用過、css新出了個啥 …… 菜鳥感覺自己也…

macOS 更新后找不到鑰匙串訪問工具的解決方案

macOS 更新后找不到鑰匙串訪問工具的解決方案 隨著macOS的不斷更新&#xff0c;一些系統工具的位置可能會發生變化&#xff0c;給用戶帶來不便。鑰匙串訪問&#xff08;Keychain Access&#xff09;是macOS中一個非常重要的工具&#xff0c;用于管理密碼、證書等敏感信息。最近…

深入理解Go 與 PHP 在參數傳遞上的核心區別

$run_return_data []; $ret $this->handleData($event_req_info, $run_return_data); public function handleData($event_req_info, &$run_return_data): array {$run_return_data [ //使用引用變量返回數據shop_id > $shop_id,request_id > $request_…

【Dify智能體】2025 最新版Linux部署Dify教程(Ubuntu)

一、前言 Dify 是一款開源的智能體工作流平臺,可以用來快速構建 AI 應用。相比手動搭建復雜的依賴環境,Docker Compose 部署方式更簡單、更快速、更穩定。本文將一步步帶你在 Ubuntu 22.04 + Docker Compose v2 上安裝 Dify,并給出常見問題與優化方案。 ps:如果還沒有安裝…

基礎思想:動態規劃與貪心算法

一、動態規劃核心思想&#xff1a;將復雜問題分解為相互重疊的子問題&#xff0c;通過保存子問題的解來避免重復計算&#xff08;記憶化&#xff09;。動態規劃需要通過子問題的最優解&#xff0c;推導出最終問題的最優解&#xff0c;因此這種方法特別注重子問題之間的轉移關系…

使用生成對抗網絡增強網絡入侵檢測性能

文章目錄前言一、GAN 模型介紹二、研究方法1.數據集選擇與處理2.IDS 基線模型構建3. GAN 模型設計與樣本生成4.生成樣本質量評估三、實驗評估四、總結前言 網絡入侵檢測系統&#xff08;Network Intrusion Detection System, NIDS&#xff09;在保護關鍵數字基礎設施免受網絡威…

VR森林經營模擬體驗帶動旅游經濟發展

將VR森林經營模擬體驗作為一種獨特的旅游項目&#xff0c;正逐漸成為旅游市場的新熱點。游客們無需長途跋涉前往深山老林&#xff0c;只需在旅游景區的VR體驗中心&#xff0c;戴上VR設備&#xff0c;就能開啟一場奇妙的森林之旅。在虛擬森林中&#xff0c;他們可以盡情探索&…

Vue2存量項目國際化改造踩坑

Vue2存量項目國際化改造踩坑 一、背景 在各類業務場景中&#xff0c;國際化作為非常重要的一部分已經有非常多成熟的方案&#xff0c;但對于一些存量項目則存在非常的改造成本&#xff0c;本文將分享一個的Vue2項目國際化改造方案&#xff0c;通過自定義Webpack插件自動提取中文…