Ubuntu 22.04 二进制安装单节点 MySQL
Ubuntu 22.04 二进制安装 MySQL LTS(长期支持版)完整教程
MySQL LTS 版本选择:
目前 MySQL 8.4.4 是长期支持(LTS)版本,持续更新并保持稳定。
下载版本:
你也可以在 MySQL 官方网站确认最新稳定 LTS 版本。
安装步骤
1. 卸载已有的 MySQL(如果已安装)
首先,确保系统中没有已安装的 MySQL,避免冲突。
停止 MySQL 服务(如果存在)
sudo systemctl stop mysql
删除 MySQL
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* -y
删除残留文件
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
清理系统
sudo apt autoremove -y
sudo apt autoclean
2. 下载 MySQL 二进制包
访问 MySQL 官方下载页面 或直接通过 wget
下载最新稳定版本(以 8.0.33 为例):
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.4-linux-glibc2.28-x86_64.tar.xz
3. 解压二进制包并移动到安装目录
-
解压下载的 MySQL 压缩包:
tar -xvf mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
-
移动解压的 MySQL 文件夹到
/usr/local/mysql
:sudo mv mysql-8.4.4-linux-glibc2.28-x86_64 /usr/local/mysql
-
创建符号链接(方便管理):
sudo ln -s /usr/local/mysql /usr/local/mysql-lts
4. 创建用户和目录
-
创建 MySQL 用户和用户组:
- 创建一个 MySQL 用户,以更安全的方式运行 MySQL。
sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
创建数据目录并更改权限:
sudo mkdir -p /usr/local/mysql/data sudo chown -R mysql:mysql /usr/local/mysql sudo chmod -R 755 /usr/local/mysql
5. 初始化数据库
初始化数据库的步骤
- 数据目录创建和文件生成:初始化操作会根据你提供的
--datadir
参数创建数据目录,并生成 MySQL 必须的表、索引和配置文件。 - 临时密码生成:初始化后,MySQL 会为 root 用户生成一个临时密码,用户需要使用该密码首次登录数据库。
- 权限表创建:MySQL 创建权限表,用于管理用户、权限、角色等。
- 创建系统数据库:如
mysql
、information_schema
、performance_schema
等。
切换到 MySQL 安装目录并初始化数据目录:
cd /XXXXXXX/mysql
sudo bin/mysqld --initialize --user=XXXX --basedir=/XXXXXXXXXX/mysql --datadir=/XXXXXXXX/data
输出结果中会生成一个 临时 root 密码(请保存下来,后面登录时会用到)。
mysqld --initialize
命令的作用
在 MySQL 中,mysqld --initialize
命令用于初始化 MySQL 数据库实例。这是部署 MySQL 数据库的关键步骤,主要是对数据库进行初步配置和创建相关文件,以便能够启动和使用 MySQL 服务。
具体作用:
-
创建数据库系统文件:
该命令会在指定的数据目录(--datadir
)中创建 MySQL 系统所需的数据库和表。例如,系统数据库(如mysql
数据库)以及用于存储表结构、用户权限等数据的表将被初始化。 -
初始化数据目录:
mysqld --initialize
会检查指定的数据目录(--datadir
)是否存在,如果不存在则会创建,并且会生成一系列的系统文件和目录,以供 MySQL 使用。 -
创建系统数据库:
- MySQL 启动时会使用这些系统数据库。典型的系统数据库包括
information_schema
、performance_schema
、mysql
等。 - 其中
mysql
数据库是一个关键的系统数据库,存储了 MySQL 用户和权限信息。
- MySQL 启动时会使用这些系统数据库。典型的系统数据库包括
-
生成临时 root 密码:
当你运行mysqld --initialize
命令时,它会生成一个临时的 root 密码(该密码在命令的输出中显示)。这是初始化数据库后第一次使用 root 用户登录时所需要的密码。 -
初始化权限表:
MySQL 需要权限表来进行用户认证和权限控制,--initialize
命令会创建这些表并为 root 用户分配默认的权限。 -
其他内部数据库:
mysqld --initialize
还会创建一些其他的数据库和表,比如:performance_schema
:用于收集性能数据。information_schema
:存储数据库的元数据信息(例如表结构、索引、列信息等)。
--initialize
命令中的参数作用
1. --user=mysql
- 作用:指定
mysqld
进程将以mysql
用户身份运行。 - 原因:出于安全考虑,MySQL 的进程应该以一个低权限用户运行,而不是
root
。该参数确保 MySQL 数据库不会以 root 用户权限运行,从而降低了潜在的安全风险。 - 默认值:如果没有指定此参数,MySQL 会默认使用当前系统的用户。
2. --basedir=/usr/local/src/mysql_demo/mysql-8.4.4
- 作用:指定 MySQL 安装的基本目录路径。
- 说明:
basedir
参数告诉 MySQL 安装程序 MySQL 文件的根目录,通常包含了二进制文件、配置文件和共享库等。 - 例子:如果你的 MySQL 安装目录是
/usr/local/mysql
,则该参数应该指向这个目录。这样,MySQL 在初始化过程中会根据该目录配置路径。
3. --datadir=/usr/local/src/mysql_demo/standalone/data
- 作用:指定 MySQL 数据文件存储的位置。
- 说明:
datadir
是 MySQL 存储数据库实际数据文件(如表文件、日志文件等)的目录。所有用户数据库和系统数据库都会存储在该目录中。 - 建议:为保证 MySQL 性能和安全,通常会将数据目录放在一个专用的磁盘分区上,避免和系统文件混合。
- 例子:在此命令中,
--datadir
被设置为/usr/local/mysql/data
,意味着所有数据库的数据文件将会被存储在此目录。
常见问题与注意事项
- 权限问题:确保你提供的
datadir
路径具有正确的权限,mysql
用户需要有读写权限。 - 临时密码:初次登录后,请务必尽快更改 root 密码,因为初始化生成的密码通常是随机的并且安全性较低。
- 路径错误:确保
basedir
和datadir
指向正确的路径,否则 MySQL 初始化过程中可能会失败。
通过运行 mysqld --initialize
命令,MySQL 完成了所有数据库的初始化工作,使得你可以开始使用 MySQL 数据库并进行配置。
6. 配置 MySQL
创建配置文件 my.cnf
:
sudo nano /usr/local/src/mysql_demo/standalone/configFile/my.cnf
添加以下内容:
[mysqld]
# MySQL 主配置段,用于指定 MySQL 服务器的配置项# MySQL 安装的根目录,包含了 MySQL 的二进制文件、库、配置文件等。
# 在这里,所有 MySQL 执行的命令都会基于该目录。
basedir=/usr/local/src/mysql_demo/mysql-8.4.4# MySQL 数据库存储目录,即 MySQL 的所有数据库数据文件存放的位置。
# 例如,数据库表文件、日志文件、索引文件等都存储在此目录下。
datadir=/usr/local/src/mysql_demo/standalone/data# MySQL 服务监听的端口号。默认情况下,MySQL 使用端口 3306。
# 你可以根据需求修改此端口,以避免与其他服务冲突。
port=3306# MySQL 使用的 Unix 套接字文件的路径,客户端和服务器之间的通信通常使用此文件。
# 如果你使用的是基于 TCP/IP 的连接方式,则不需要设置此项,但如果使用的是本地 Unix 套接字通信,它就很重要。
socket=/usr/local/src/mysql_demo/mysql-8.4.4/mysql.sock# 指定 MySQL 进程运行的系统用户。通常建议使用 `普通用户` 用户来提高安全性。
# 如果 MySQL 以 root 用户运行,可能会带来潜在的安全隐患。
user=user01# 指定 MySQL 错误日志文件的路径。该日志文件记录 MySQL 服务器的启动、运行过程中的错误和警告信息。
# 错误日志对于排查 MySQL 问题非常重要。
log-error=/usr/local/src/mysql_demo/standalone/logs/mysql-error.log# 慢查询日志的位置。用于记录执行时间超过设定阈值的查询。
slow-query-log-file=/usr/local/src/mysql_demo/standalone/logs/mysql-slow.log# 二进制日志的位置,用于记录所有更改数据库内容的操作。
# 二进制日志对于数据库的备份、恢复以及复制功能非常重要。
log-bin=/usr/local/src/mysql_demo/standalone/logs/mysql-bin.log# 查询日志的位置,用于记录所有客户端发送的 SQL 查询。
# 查询日志对于诊断性能问题以及分析客户端查询行为很有帮助。
general-log-file=/usr/local/src/mysql_demo/standalone/logs/mysql-general.log# MySQL 进程 ID 文件的路径,记录 MySQL 服务器进程的 ID。
# 该文件的作用是便于管理员管理 MySQL 服务,比如停止或启动 MySQL 时使用。
pid-file=/usr/local/src/mysql_demo/standalone/data/mysql.pid# 以下是为生产环境优化性能的可选配置# 设置 MySQL 服务器允许的最大连接数。
# 如果有更多的并发用户连接 MySQL,增大此值可以避免连接数不足的问题。
# 该值应该根据服务器的硬件资源和并发需求来调整。
max_connections=200# 设置 SQL 模式,用于控制 MySQL 的行为和查询的严格性。
# - `STRICT_TRANS_TABLES`: 使得 MySQL 在处理数据时对类型不匹配的操作进行严格检查。
# - `NO_ENGINE_SUBSTITUTION`: 当指定的存储引擎不可用时,MySQL 不会自动使用默认引擎。
# 该设置有助于提高数据一致性和查询的可靠性。
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
保存并退出。
7. 设置环境变量(可选)
编辑 .bashrc
文件,添加 MySQL 命令到环境变量:
sudo nano ~/.bashrc
在文件末尾添加:
export PATH=$PATH:/usr/local/mysql/bin
使环境变量生效:
source ~/.bashrc
8. 创建 systemd 服务(便于使用 systemctl 管理 MySQL)
-
创建 MySQL 服务文件:
sudo nano /etc/systemd/system/mysql.service
-
添加以下内容:
[Unit]
Description=MySQL Server # 描述该服务为 MySQL 数据库服务器
After=network.target # 定义启动顺序,确保网络服务就绪后再启动 MySQL 服务[Service]
Type=forking # 定义服务类型为 forking,表示服务启动时会产生子进程
User=user01 # 指定运行 MySQL 服务的用户为 user01,提升安全性
Group=user01 # 指定服务运行时所属的用户组为 user01,增强权限管理
ExecStart=/usr/local/src/mysql_demo/mysql-8.4.4/bin/mysqld --defaults-file=/usr/local/src/mysql_demo/standalone/configFile/my.cnf # 定义启动命令及配置文件路径
ExecStop=/usr/local/src/mysql_demo/mysql-8.4.4/bin/mysqladmin -u root -p shutdown # 定义停止命令,使用 mysqladmin 管理工具优雅关闭 MySQL 服务
LimitNOFILE=5000 # 提升文件描述符限制为 5000,增强 MySQL 在高并发场景下的性能[Install]
WantedBy=multi-user.target # 定义服务目标,当系统进入 multi-user 模式时,该服务会自动启动
这是一个 systemd 服务单元文件,用于定义如何启动、停止和管理 MySQL 服务器进程。下面我将逐行详细解释这个文件的内容,并注释每一项配置的含义。
这个 systemd 单元文件使管理员能够轻松管理 MySQL 服务,包括自动启动、手动启动、停止以及配置权限和资源限制等。同时,它提升了 MySQL 运行时的安全性和稳定性,通过限制用户权限和提高文件描述符数量来优化系统运行表现。
[Unit] 部分
[Unit]
Description=MySQL Server
After=network.target
解释:
- [Unit]:这是 systemd 单元文件的基本部分,用于描述服务单元的元数据信息,以及定义启动顺序和依赖关系。
- Description=MySQL Server:描述该服务的功能,这一行用来告诉用户或管理员,这个服务是用于管理 MySQL 服务器的。
- After=network.target:表示此服务需要在网络功能就绪后启动。
network.target
代表网络目标,确保 MySQL 在网络服务初始化完成后再启动。
[Service] 部分
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
LimitNOFILE=5000
解释:
-
[Service]:定义与该服务启动、运行、停止相关的配置。
-
Type=forking:表示该服务为 “forking”类型,即 MySQL 服务在启动时,会生成一个父进程,然后将主要的工作交给子进程处理。
forking
通常用于后台运行的守护进程。 -
User=mysql:指定运行该服务的用户为
mysql
,这是一种安全机制,防止使用 root 用户运行数据库服务,从而降低系统被攻击的风险。 -
Group=mysql:指定运行该服务时所属的用户组为
mysql
,进一步细化权限管理,确保只有mysql
用户组成员可以访问相关资源。 -
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf:
- 定义启动命令。
/usr/local/mysql/bin/mysqld
是 MySQL 的主服务器程序路径,执行该程序以启动 MySQL 服务。--defaults-file=/etc/my.cnf
表示启动时使用配置文件/etc/my.cnf
。这个配置文件中包含了 MySQL 的详细参数设置(如端口、数据目录、日志路径等)。
-
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown:
- 定义停止命令。
/usr/local/mysql/bin/mysqladmin
是 MySQL 的管理工具,用于关闭或管理 MySQL 服务。-u root
指定使用root
用户登录数据库。-p
提示用户在停止服务时输入密码,确保安全性。shutdown
是命令参数,用于优雅地关闭 MySQL 服务,确保数据在关闭时不会丢失或损坏。
-
LimitNOFILE=5000:
- 设置文件描述符限制,即允许 MySQL 打开的最大文件数为 5000。
- 默认情况下,Linux 系统可能限制每个进程只能打开 1024 个文件,但对于数据库服务来说,这可能不够,因为 MySQL 可能同时处理多个连接、文件、日志等。
- 提升这个限制可以增强 MySQL 的性能,尤其在高并发场景中。
[Install] 部分
[Install]
WantedBy=multi-user.target
解释:
- [Install]:用于定义该服务在安装(即
systemctl enable
)时的行为。 - WantedBy=multi-user.target:
- 表示该服务应该在 multi-user.target 目标下启用。
multi-user.target
是系统启动模式的一部分,它类似于传统的 Linux 运行级别 3,即一个没有图形界面的多用户环境。- 这意味着,当系统进入多用户模式时(如开机完成、进入登录界面),MySQL 服务将自动启动。
-
保存并退出。
-
重新加载 systemd 配置并启动 MySQL 服务:
sudo systemctl daemon-reload sudo systemctl start mysql sudo systemctl enable mysql
9. 修改 root 密码并允许远程访问
-
登录 MySQL(使用初始化时生成的临时密码):
mysql -u root -p
-
修改 root 密码为 123456:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
-
允许远程访问(如果需要):
ALTER USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
-
更改配置文件,允许所有 IP 连接(如果需要远程访问):
编辑/etc/my.cnf
:sudo nano /etc/my.cnf
修改
bind-address
:bind-address = 0.0.0.0
-
重启 MySQL:
sudo systemctl restart mysql
10. 验证安装
-
检查 MySQL 服务是否正常运行:
sudo systemctl status mysql
-
查看 MySQL 版本:
mysql --version
-
登录数据库并确认连接成功:
mysql -u root -p
二进制安装的文件目录结构
安装完成后,你的 MySQL 文件分布大致如下:
- MySQL 程序文件:
/usr/local/mysql/
- 数据存储目录:
/usr/local/mysql/data/
- 配置文件:
/etc/my.cnf
- 日志文件:
/usr/local/mysql/data/mysql-error.log
相关文章:
Ubuntu 22.04 二进制安装单节点 MySQL
Ubuntu 22.04 二进制安装 MySQL LTS(长期支持版)完整教程 MySQL LTS 版本选择: 目前 MySQL 8.4.4 是长期支持(LTS)版本,持续更新并保持稳定。 下载版本: 你也可以在 MySQL 官方网站确认最新稳…...
python处理音频相关的库
1 音频信号采集与播放 pyaudio import sys import pyaudio import wave import timeCHUNK 1024 FORMAT pyaudio.paInt16 CHANNELS 1#仅支持单声道 RATE 16000 RECORD_SECONDS 3#更改录音时长#录音函数,生成wav文件 def record(file_name):try:os.close(file_…...
python+ffmpeg给音频添加背景音乐
说明: 我希望用python,将name.mp3这段录音文件,添加背景音乐,bg.mp3,然后生成新的文件 step1: 添加依赖 pip install pydubstep2:下载ffmpeg 1.打开windows powershell ,管理员运行 2.winget install ff…...
《TypeScript 面试八股:高频考点与核心知识点详解》
“你好啊!能把那天没唱的歌再唱给我听吗? ” 前言 因为主包还是主要学习js,ts浅浅的学习了一下,在简历中我也只会写了解,所以我写一些比较基础的八股,如果是想要更深入的八股的话还是建议找别人的。 Ts基…...
鸡生蛋还是蛋生鸡? 基于python的CCM因果关系计算
文章目录 前言一、安装二、代码1.全部代码2.结果展示总结前言 因果推断在科学研究中起着重要的作用,尤其是在复杂系统中,例如生态学、气候学、经济学等领域。在这些领域中,了解变量之间的因果关系可以帮助我们更好地理解系统的动态行为和相互作用。传统的相关性分析并不足以…...
PyBluez2 的详细介绍、安装指南、使用方法及配置说明
PyBluez2:Python 蓝牙开发的核心库 一、PyBluez2 简介 PyBluez2 是 Python 的开源蓝牙编程库,支持蓝牙 2.0、BLE(低功耗蓝牙)和传统蓝牙协议栈的开发。它提供了对蓝牙硬件适配器的底层控制,适用于设备发现、配对、数…...
鸿蒙HarmonyOS NEXT之无感监听
鸿蒙中存在一些无感监听,这些监听经过系统API封装使用很简单,但是对实际业务开发中有很重要,例如埋点业务、数据统计、行为上报、切面拦截等。 Navigation的页面切换 在鸿蒙中Navigation被用来作为路由栈进行页面跳转,如果你想知…...
质检LIMS系统在食品生产加工企业的应用 如何保证食品生产企业的安全
在食品生产加工领域,质量安全是贯穿全产业链的生命线。随着《食品安全法》对全过程追溯要求的深化,传统实验室管理模式已难以满足高效、精准的质量管控需求。质检实验室信息管理系统(LIMS)作为数字化升级的核心工具,正…...
linux中如何获取其他进程的退出状态
进程的退出状态至关重要,用wait系列函数,父进程可以捕捉到子进程的退出状态,若给定任意进程,其父进程已经确定,无法改变,自己如何获取到其退出状态呢。 可以用ptrace系统api attach到相应的进程,…...
【android】补充
3.3 常用布局 本节介绍常见的几种布局用法,包括在某个方向上顺序排列的线性布局,参照其他视图的位置相对排列的相对布局,像表格那样分行分列显示的网格布局,以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…...
Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战
Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战 引言 在分布式系统和本地服务通信中,进程间通信(IPC)与远程过程调用(RPC)是核心能力。本文将深入剖析 Unix Domain Socket(UDS)、IPC、RP…...
从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?
小T导读:TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务,轻松应对海量功率、电能及输入输出数据的实时统计与分析,并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外,taosX 强大的 transform 功能帮助用…...
华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )
最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处…...
Zerotier虚拟局域网在树莓派的应用和Syncthing配合Zerotier实现端到端文件同步
一、Zerotier的部署 1、官网注册账号 https://my.zerotier.com/i 2、选择linux系统,执行安装Zerotier curl -s https://install.zerotier.com | sudo bash3、将树莓派网络加入Zerotier zerotier-cli join DB62228FEDF6CE55DB62228FEDF6CE55 为你的Zerotier IP 需…...
C++设计模式-桥梁模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
一、桥梁模式基本介绍 桥梁模式(Bridge Pattern)是一种结构型设计模式,又叫桥接模式,其核心思想是将抽象部分与实现部分分离,使它们可以独立变化。这种模式通过组合代替继承,有效解决了多层继承导致的类爆…...
系统转换、系统维护、净室软件工程、构件软件工程(高软51)
系列文章目录 系统转换、系统维护、净室软件工程、构件软件工程 文章目录 系列文章目录前言一、系统转换二、系统维护三、净室软件工程四、基于构件的软件工程总结 前言 本节讲明遗留系统的系统转换、系统维护、净室软件工程、基于构件软件工程相关知识。 一、系统转换 就是讲…...
自然语言处理(13:RNN的实现)
系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设,共现矩阵,向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...
Docker镜像迁移方案
Docker镜像迁移方案 文章目录 Docker镜像迁移方案一:背景二:操作方式三:异常原因参考: 一:背景 比如机器上已经有先有的容器,但是docker pull的时候是失败的二:操作方式 1、停止正在运行的容器…...
深度学习框架PyTorch——从入门到精通(10)PyTorch张量简介
这部分是 PyTorch介绍——YouTube系列的内容,每一节都对应一个youtube视频。(可能跟之前的有一定的重复) 创建张量随机张量和种子张量形状张量数据类型 使用PyTorch张量进行数学与逻辑运算简单介绍——张量广播关于张量更多的数学操作原地修改…...
Springboot 集成 Flowable 6.8.0
1. 创建 Spring Boot 项目 通过 Spring Initializr(https://start.spring.io/ )创建一个基础的 Spring Boot 项目,添加以下依赖: Spring WebSpring Data JPAMySQL DriverLombok(可选,用于简化代码&#x…...
Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出
Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档(带图片),预览、导出安装插件docx 模板文件内容完整代码…...
实验一、Linux环境下实现进度条小程序:深入解析核心实现与关键技术细节
目录 引言:为什么需要进度条?环境准备与项目结构分析原理剖析:从终端输出到动态刷新代码逐行解析(附完整代码) 4.1 头文件与宏定义4.2 进度条的动态构建逻辑4.3 关键转义字符:\r与\n的深度对比4.4 缓冲机制…...
生活电子常识——cmd不能使用anaconda的python环境,导致输入python打开应用商店
前言 电脑已经安装了anaconda,从自带的Anaconda Prompt (Anaconda3)中是可以识别python环境的,然而切换到cmd时,突然发现cmd中无法识别anaconda的python环境,竟然打开了应用商店让我安装Python,这当然是不对的。 解决 这是因为…...
TypeScript中的声明合并:与JavaScript的对比与实践指南
引言 在大型项目开发中,代码的可维护性和可扩展性至关重要。TypeScript作为JavaScript的超集,通过静态类型系统带来了更强大的代码组织能力。其中声明合并(Declaration Merging) 是TypeScript独有的重要特性,本文将深…...
数据结构初阶-二叉树链式
目录 1.概念与结构 2.二叉数链式的实现 2.1遍历规则 2.2申请内存空间 2.3手动构建一棵二叉树 2.4二叉树结点的个数 2.5二叉树叶子结点的个数 2.6二叉树第K层结点个数 2.7二叉树的高度 2.8二叉树中查找值为x的结点 2.9二叉树的销毁 3.层序遍历 3.1概念 3.2层序遍历…...
2024年认证杯SPSSPRO杯数学建模B题(第二阶段)神经外科手术的定位与导航全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现: 人的大脑结构非常复杂,内部交织密布着神经和血管,所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术,通常需要…...
Linux程序性能分析
为什么程序会慢? 在深入工具和方法之前,我们先来聊聊为什么程序会慢。一个程序主要在三个方面消耗资源: CPU时间 - 计算太多、算法效率低 内存使用 - 内存泄漏、频繁申请释放内存 I/O操作 - 文件读写、网络通信太频繁 今天我们主要聚焦C…...
【开题报告+论文+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现
项目背景与意义 在全球范围内,安全与急救知识的普及已成为提升公众安全素养、减少意外伤害发生率、提高突发事件应对能力的重要举措。尤其是在当今社会,人们面临的生活、工作环境日益复杂,交通事故、火灾、溺水、突发疾病等各种意外事件的发生…...
Linux shift 命令使用详解
简介 在 Bash 脚本中,shift 命令用于将命令行参数向左移动,有效地丢弃第一个参数并将其他参数向下移动。 基础语法 shift [N]N(可选)→ 要移动的位置数。默认值为 1 示例用法 移动参数 #!/bin/bash echo "Before shift…...
【C++网络编程】第5篇:UDP与广播通信
一、UDP协议核心特性 1. UDP vs TCP 特性 UDPTCP连接方式无连接面向连接(三次握手)可靠性不保证数据到达或顺序可靠传输(超时重传、顺序控制)传输效率低延迟,高吞吐相对较低(因握手和确认机制&…...
C++11QT复习 (五)
文章目录 **Day6-2 成员访问运算符重载(2025.03.25)****1. 复习****2. 成员访问运算符重载****2.1 箭头运算符 (->) 重载****(1) 语法** **2.2 解引用运算符 (*) 重载****(1) 语法** **3. 代码分析****3.1 代码结构****3.2 代码解析****(1) Data 类**…...
Python项目-基于Python的网络爬虫与数据可视化系统
1. 项目简介 在当今数据驱动的时代,网络爬虫和数据可视化已成为获取、分析和展示信息的重要工具。本文将详细介绍如何使用Python构建一个完整的网络爬虫与数据可视化系统,该系统能够自动从互联网收集数据,进行处理分析,并通过直观…...
SpringCloud Zuul 使用教程
SpringCloud Zuul 使用教程 目录 Zuul 简介环境准备搭建 Zuul 网关 • 3.1 Maven 依赖 • 3.2 配置文件 • 3.3 启动类注解基本路由配置 • 4.1 简单路由 • 4.2 基于路径的路由 • 4.3 基于服务的路由Zuul 高级配置 • 5.1 过滤器配置 • 5.2 限流与熔断 • 5.3 负载均衡 •…...
介绍一款基于MinerU的PDF翻译工具
一。简介 Fast pdf translate是一款pdf翻译软件,基于MinerU实现pdf转markdown的功能,接着对markdown进行分割, 送给大模型翻译,最后组装翻译结果并由pypandoc生成结果pdf。 git地址: https://github.com/kv1830/fast…...
轻量级TLS反向代理工具TLS-reverse-proxy:打造安全通信桥梁
在数字化浪潮席卷全球的今天,数据隐私与传输安全已成为企业及个人的核心关切。TLS(传输层安全协议)作为互联网通信的"隐形卫士",承担着保护数据在传输过程中不被窃取或篡改的重要使命。然而,对于许多传统服务…...
SQL问题分析与诊断(8)——前提
8.1. 前提 与其他关系库类似,SQL Server中,当我们对存在性能问题的SQL语句进行分析和诊断时,除了获取该SQL语句本身外,还需要获取SQL语句相应的查询计划及其相关的数据环境。这里,所谓数据环境,具体是指SQ…...
关于cmd中出现无法识别某某指令的问题
今天来解决以下这个比较常见的问题,安装各种软件都可能会发生,一般是安装时没勾选注册环境变量,导致cmd无法识别该指令。例如mysql,git等,一般初学者可能不太清楚。 解决这类问题最主要的是了解环境变量的概念&#x…...
如何处理不同输入类型(例如邮箱、电话号码)的验证?
处理不同输入类型(如邮箱、电话号码)的验证可以通过多种方法实现,包括使用 HTML5 内置验证、JavaScript/jQuery 自定义验证和正则表达式。以下是一些常用的验证方法和示例。 1. 使用 HTML5 内置验证 HTML5 提供了一些内置的输入类型,可以自动处理基本的验证。 示例 <…...
Redis集群哨兵相关面试题
目录 1.Redis 主从复制的实现原理是什么? 详解 补充增量同步 replication buffer repl backlog buffer 2.Redis 主从复制的常见拓扑结构有哪些? 3.Redis 复制延迟的常见原因有哪些? 4.Redis 的哨兵机制是什么? 主观下线和客观下线 哨兵leader如何选出来的&#x…...
【CXX-Qt】4.1 extern “RustQt“
QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心,用于声明 Rust 类型和签名,使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...
当 0 编程基础,用 ChatGPT 和 Cursor 开发同一应用时… |AI 开发初体验
求人不如求己。 事情是这样的,前段时间,我看了本书,书里介绍了款应用,能计算财富自由价格,还能制定退休计划。 结果,我迫不及待去下载这个应用时,发现这应用功能残缺,完全不可用。 …...
如何排查C++程序的CPU占用过高的问题
文章目录 可能的原因程序设计的BUG系统资源问题恶意软件硬件问题 通常步骤一个简单的问题代码在windows平台上如何排查Windows Process ExplorerWinDBG 在Linux平台如何排查使用TOP GDBPerf 可能的原因 程序设计的BUG 有死循环低效算法与数据结构滥用自旋锁频繁的系统调用&a…...
数据库练习
完善t_hero表 -- 添加作者字段 alter table t_hero add author varchar(100);-- 更新数据update t_hero set author "曹雪芹" where id 1; update t_hero set author "曹雪芹" where id 2; update t_hero set author "曹雪芹" where id…...
nodejs-原型污染链
还是老规矩,边写边学,先分享两篇文章 深入理解 JavaScript Prototype 污染攻击 | 离别歌 《JavaScript百炼成仙》 全书知识点整理-CSDN博客 Ctfshow web入门 nodejs篇 web334-web344_web334 ctfshow-CSDN博客 334-js审计 var express require(expr…...
无人机与AI技术结合的突破性应用场景
1. 自主导航与动态避障 技术栈:SLAM 强化学习 (PPO算法) 代码示例(Python PyTorch): import torch class DronePPO(torch.nn.Module):def __init__(self):super().__init__()self.actor torch.nn.Sequential(torch.nn.Linear…...
jsBridge在vue中使用
创建jsBridge.js /* eslint-disable */ function connectWebViewJavascriptBridge (callback) {if (window.WebViewJavascriptBridge) {callback(window.WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady, function () { callback(wi…...
Windows下docker使用教程
docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的,后面的内容其实不变 …...
iOS:GCD信号量、同步、异步的使用方法
信号量的详细用法,可以用此方法进行队列管理 -(void)dispatchSignal{//crate的value表示,最多几个资源可访问dispatch_semaphore_t semaphore dispatch_semaphore_create(3);dispatch_queue_t quene dispatch_get_global_queue(DISPATCH_QUEUE_PRIORI…...
Nginx相关漏洞解析
一、CRLF注入漏洞 原理:Nginx将传入的url进行解码,对其中的%0a%0d替换成换行符,导致后面的数据注入至头部,造成CRLF 注入漏洞 1、开环境 2、访问网站,并抓包 3、构造请求头 %0ASet-cookie:JSPSESSID%3D1 这样就可以…...
SpringCloud构建一个服务步骤
Spring Cloud是一个用于构建分布式系统的开源框架,可以帮助开发者快速构建各种云原生应用。下面是一个简单的步骤,展示如何使用Spring Cloud构建一个服务: 创建一个Spring Boot项目:首先需要创建一个Spring Boot项目作为基础。可以…...