前言:在 Linux 运维工作中,Elasticsearch 的部署与运维是高频需求——无论是快速搭建测试环境还是构建生产级集群,选择合适的安装方式(编译安装或 Yum 安装)直接影响后续维护效率。同时,日志的合理切割能避免磁盘空间溢出,而对常见报错的快速定位与解决,则是保障集群稳定运行的核心能力。
本文从实际运维场景出发,详细拆解 编译安装Yum 安装的完整流程(含用户权限、证书配置、单节点/集群参数),提供 log4j2 原生策略Linux logrotate 定时任务 两种日志切割方案,并汇总 Elasticsearch 部署阶段的典型报错(如连接超时、权限不足、内存限制等)及对应解决办法,助力运维人员高效完成 Elasticsearch 从部署到运维的全流程工作。

二、Elasticsearch 编译安装流程

(一)安装准备与解压操作

把 Elasticsearch 压缩包上传到 Linux 服务器后,执行如下命令完成解压与重命名:

tar -zxvf elasticsearch-8.16.0-linux-x86_64.tar.gz
mv elasticsearch-8.16.0 elasticsearch

(二)配置文件修改(elasticsearch.yml )

进入配置目录 /opt/elasticsearch/config ,编辑 elasticsearch.yml ,关键配置内容如下:

# 集群与节点标识配置
cluster.name: test-es-cluster
node.name: test-es-node-01# 网络与访问相关设置
network.host: 0.0.0.0
http.port: 9200
# 单节点模式(必选)
discovery.type: single-node
# 以下为集群模式参数,单节点时无需开启,接入集群时取消注释并配置
# 集群节点发现,配置集群中其他节点的IP或主机名
# discovery.seed_hosts: ["node1.example.com", "node2.example.com"]
# 初始主节点选举,配置符合主节点条件的节点名称
# cluster.initial_master_nodes: ["node-1", "node-2"]# 存储路径配置
path.data: /data1/elasticsearch/data
path.logs: /var/log/elasticsearch# 跨域支持配置(方便前端调试)
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true# 安全配置(启用 SSL 与证书)
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: elastic-certificates.p13  # 自定义证书路径
xpack.security.transport.ssl.truststore.path: elastic-certificates.p13

(三)用户与目录权限配置

为保障 Elasticsearch 安全运行,需创建专用用户并赋予相应权限:

# 创建用户组
groupadd -m elasticsearch  
# 创建用户(禁止登录,关联用户组 )
useradd -g elasticsearch -c "Elasticsearch Service User" -d /nonexistent -s /sbin/nologin elasticsearch  # 创建数据与日志目录
mkdir -p /data1/elasticsearch/data
mkdir -p /var/log/elasticsearch  # 递归赋予权限
chown -R elasticsearch:elasticsearch /data1/elasticsearch/data
chmod -R 750 /data1/elasticsearch/data  
chown elasticsearch:elasticsearch /var/log/elasticsearch
chmod 2770 /var/log/elasticsearch  

(四)证书生成与配置

借助 elasticsearch-certutil 生成证书 elastic-certificates.p13 ,操作步骤如下:

# 进入 Elasticsearch bin 目录
cd /usr/share/elasticsearch/bin  # 生成 PKCS#12 格式证书(可设置密码增强安全性,这里示例设置密码为 TestCertPass123! )
./elasticsearch-certutil cert --out elastic-certificates.p13 --pass "TestCertPass123!"  # 移动证书到配置目录并赋予权限
mv elastic-certificates.p13 /opt/elasticsearch/config/
chown elasticsearch:elasticsearch /opt/elasticsearch/config/elastic-certificates.p13
chmod 600 /opt/elasticsearch/config/elastic-certificates.p13  

(五)服务启动与验证

# 切换至 elasticsearch 用户(避免权限问题 )
su - elasticsearch -s /bin/bash  # 启动服务(前台运行便于调试,生产环境建议后台启动 )
/opt/elasticsearch/bin/elasticsearch  # 验证集群状态(新开终端执行 )
curl -u elastic:your_password http://localhost:9200  # your_password 需替换为实际设置密码

三、Elasticsearch Yum 安装流程(以 8.5.2 版本为例)

(一)Yum 仓库配置

# 导入 Elasticsearch GPG 密钥
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  # 创建 Yum 仓库文件
cat <<EOF > /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF  

(二)安装与基础配置

# 安装指定版本
yum install -y elasticsearch-8.5.2  # 编辑配置文件 /etc/elasticsearch/elasticsearch.yml ,默认生成部分配置如下(可结合实际调整):
# 集群与节点标识
cluster.name: test-es-cluster
node.name: test-es-node-01
# 网络与访问
network.host: 0.0.0.0
http.port: 9200
# 单节点模式(必选)
discovery.type: single-node
# 以下为集群模式参数,单节点时无需开启,接入集群时取消注释并配置
# 集群节点发现,配置集群中其他节点的IP或主机名
# discovery.seed_hosts: ["node1.example.com", "node2.example.com"]
# 初始主节点选举,配置符合主节点条件的节点名称
# cluster.initial_master_nodes: ["node-1", "node-2"]
# 存储路径
path.data: /data1/elasticsearch/data
path.logs: /var/log/elasticsearch  
# 跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true  
# 安全配置(使用 Yum 安装默认生成的证书 )
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12  
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12  
xpack.security.http.ssl.enabled: false  # 测试环境简化,生产环境建议启用  

(三)服务启动与密码初始化、重置

# 启动服务
systemctl start elasticsearch  # 初始化内置用户密码(交互模式 )
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive  # 重置密码操作(若需要重置 elastic 用户密码 )
sudo ./elasticsearch-reset-password -u elastic -i  # 验证集群状态
curl -u elastic:your_password http://localhost:9200  # your_password 替换为实际设置密码

四、日志切割配置方案

(一)方案一:基于 log4j2.properties 的独立策略(日志和 JSON 分别保留 )

在这里插入图片描述

1. 配置文件修改(log4j2.properties)
# ==================== 处理 JSON 日志(.json.gz) ====================
# 已有参数(保留默认,无需修改)
appender.json_rolling.type = RollingFile
appender.json_rolling.name = json_rolling
appender.json_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server.json
appender.json_rolling.layout.type = ESJsonLayout# 新增/修改参数(实现 30 天保留)
appender.json_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server-%d{yyyy-MM-dd}-%i.json.gz
# 时间滚动:每天 1 次
appender.json_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.json_rolling.policies.time.interval = 1
appender.json_rolling.policies.time.modulate = true
# 大小滚动(可选):超过 1GB 分割
appender.json_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.json_rolling.policies.size.size = 1GB
# 自动删除:保留 30 天
appender.json_rolling.strategy.type = DefaultRolloverStrategy
appender.json_rolling.strategy.action.type = Delete
appender.json_rolling.strategy.action.condition.type = IfFileName
appender.json_rolling.strategy.action.condition.glob = ${sys:es.logs.cluster.name}_server-*.json.gz
appender.json_rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.json_rolling.strategy.action.condition.nested_condition.age = 30d# ==================== 处理文本日志(.log.gz) ====================
# 已有参数(保留默认,无需修改)
appender.log_rolling.type = RollingFile
appender.log_rolling.name = log_rolling
appender.log_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}.log
appender.log_rolling.layout.type = PatternLayout
appender.log_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1}] %m%n# 新增/修改参数(实现 30 天保留)
appender.log_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}-%d{yyyy-MM-dd}-%i.log.gz
# 时间滚动:每天 1 次
appender.log_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.log_rolling.policies.time.interval = 1
appender.log_rolling.policies.time.modulate = true
# 大小滚动(可选):超过 1GB 分割
appender.log_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.log_rolling.policies.size.size = 1GB
# 自动删除:保留 30 天
appender.log_rolling.strategy.type = DefaultRolloverStrategy
appender.log_rolling.strategy.action.type = Delete
appender.log_rolling.strategy.action.condition.type = IfFileName
appender.log_rolling.strategy.action.condition.glob = ${sys:es.logs.cluster.name}-*.log.gz
appender.log_rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.log_rolling.strategy.action.condition.nested_condition.age = 30d# 引用 Appender(确保已配置)
rootLogger.appenderRef.json_rolling.ref = json_rolling
rootLogger.appenderRef.log_rolling.ref = log_rolling
2. 使配置生效的操作
# 1. 备份原配置
cp /etc/elasticsearch/log4j2.properties /etc/elasticsearch/log4j2.properties.bak_$(date +%F)# 2. 编辑配置文件(替换为上述内容)
vi /etc/elasticsearch/log4j2.properties# 3. 重启 Elasticsearch 服务
systemctl restart elasticsearch# 4. 验证配置是否生效(查看日志是否正常滚动)
tail -f /var/log/elasticsearch/${sys:es.logs.cluster.name}.log  # 替换为实际集群名称

(二)方案二:合并策略(同时保留日志和 JSON 文件 1 个月 )

1. 配置文件修改(log4j2.properties)
# ==================== 合并滚动与删除策略 ====================
# 以文本日志 Appender 为例(JSON 日志可复用此策略)
appender.rolling.type = RollingFile
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}.log
appender.rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}-%d{yyyy-MM-dd}-%i.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1}] %m%n# 时间滚动:每天 1 次
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
# 大小滚动(可选):超过 1GB 分割
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 1GB# 合并删除策略(同时处理 .log.gz 和 .json.gz)
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.condition.type = IfFileName
# 匹配两种格式的日志文件
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster.name}-*.log.gz, ${sys:es.logs.cluster.name}_server-*.json.gz
# 保留 30 天
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.rolling.strategy.action.condition.nested_condition.age = 30d# JSON 日志 Appender(复用上述删除策略,仅需配置基础输出)
appender.json_rolling.type = RollingFile
appender.json_rolling.name = json_rolling
appender.json_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server.json
appender.json_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster.name}_server-%d{yyyy-MM-dd}-%i.json.gz
appender.json_rolling.layout.type = ESJsonLayout
# 复用滚动策略(时间和大小参数与文本日志一致)
appender.json_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.json_rolling.policies.time.interval = 1
appender.json_rolling.policies.time.modulate = true
appender.json_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.json_rolling.policies.size.size = 1GB# 引用 Appender
rootLogger.appenderRef.rolling.ref = rolling
rootLogger.appenderRef.json_rolling.ref = json_rolling
2. 生效操作

和方案一类似,修改配置后重启 Elasticsearch 服务进行验证即可。

(三)方案三:Linux logrotate 定时任务

1. 创建 logrotate 配置文件
vi /etc/logrotate.d/elasticsearch  

添加如下内容:

/var/log/elasticsearch/*.log /var/log/elasticsearch/*.json {daily                   # 每天进行轮转操作rotate 30               # 保留 30 天的文件compress                # 压缩为 .gz 格式delaycompress           # 延迟压缩missingok               # 忽略不存在的文件notifempty              # 空文件不进行轮转create 0640 elasticsearch elasticsearch  # 新建文件的权限与属主设置su elasticsearch elasticsearch  # 以 elasticsearch 用户身份执行  
}  
2. 生效操作
# 验证配置语法是否正确
logrotate -d /etc/logrotate.d/elasticsearch  # 手动执行一次轮转操作
logrotate -f /etc/logrotate.d/elasticsearch  # 检查定时任务(系统默认每天执行 )
cat /etc/cron.daily/logrotate  

五、典型报错处理

(一)报错场景 1:curl: (52) Empty reply from server

1. 报错场景复现

使用默认生成的配置启动 Elasticsearch 后,执行 curl http://172.20.0.3:9200 出现报错:

curl: (52) Empty reply from server  
2. 原因分析
  • 安全配置冲突:默认生成的配置里,xpack.security.http.ssl.enabled: true 启用了 HTTP 层 SSL,但未正确配置证书或者客户端未使用 HTTPS 访问,进而导致连接被拒绝。
  • 服务未正常启动:Elasticsearch 由于权限、路径或者配置错误,未能正常启动,无法返回响应。
3. 解决方案(修改为合理配置后恢复)
(1)调整安全配置(关闭 HTTP 层 SSL,简化测试环境)

elasticsearch.yml 中添加如下配置:

xpack.security.http.ssl.enabled: false  
(2)重启服务并验证
systemctl restart elasticsearch  
curl -u elastic:your_password http://172.20.0.3:9200  # your_password 替换为实际密码
(3)关键对比(默认配置 vs 修改后配置)
配置项默认生成(报错情况)修改后(恢复正常)
xpack.security.http.ssl.enabledtrue(启用 HTTP 层 SSL)false(关闭 HTTP 层 SSL)
访问方式需用 https:// 且携带证书直接用 http:// 加账号密码

(二)报错场景 2:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

1. 报错场景复现

启动 Elasticsearch 时,日志中出现如下报错:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
2. 原因分析

Elasticsearch 需要较大的虚拟内存映射区域来存储索引数据,Linux 系统默认的 vm.max_map_count(虚拟内存映射数量上限)为 65530,无法满足 Elasticsearch 的运行要求(至少需要 262144)。

3. 解决方案
(1)临时调整(立即生效,重启后失效)
sudo sysctl -w vm.max_map_count=262144
(2)永久调整(重启系统后仍生效)
# 编辑系统配置文件
sudo vi /etc/sysctl.conf# 添加以下内容
vm.max_map_count=262144# 使配置生效
sudo sysctl -p
(3)验证配置
sysctl vm.max_map_count
# 输出 "vm.max_map_count = 262144" 即生效
(4)重启 Elasticsearch
systemctl restart elasticsearch

(三)报错场景 3:ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/data1/elasticsearch/data]

1. 报错场景复现

启动 Elasticsearch 时,日志中出现权限相关报错:

ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/data1/elasticsearch/data]
2. 原因分析

Elasticsearch 运行用户(通常为 elasticsearch)对数据目录(如 /data1/elasticsearch/data)没有读写权限,导致无法绑定服务并初始化数据存储。

3. 解决方案
(1)检查目录权限
ls -ld /data1/elasticsearch/data
# 若输出的所有者/组不是 elasticsearch,需执行以下命令
(2)赋予目录权限
# 递归修改目录所有者为 elasticsearch 用户和组
sudo chown -R elasticsearch:elasticsearch /data1/elasticsearch/data# 赋予读写执行权限(用户可读写执行,组内可读执行,其他无权限)
sudo chmod -R 750 /data1/elasticsearch/data
(3)重启 Elasticsearch
systemctl restart elasticsearch

(四)报错场景 4:curl: (6) Could not resolve host: localhost; Name or service not known

1. 报错场景复现

执行 curl http://localhost:9200 验证集群时,出现主机解析报错:

curl: (6) Could not resolve host: localhost; Name or service not known
2. 原因分析

系统 hosts 文件中未配置 localhost127.0.0.1 的映射关系,导致无法解析 localhost 主机名。

3. 解决方案
(1)编辑 hosts 文件
sudo vi /etc/hosts
(2)添加映射关系

在文件中添加以下内容:

127.0.0.1   localhost
(3)验证解析
ping localhost
# 若能正常 ping 通,说明解析生效
(4)重新验证 Elasticsearch
curl -u elastic:your_password http://localhost:9200

(五)报错场景 5:Cluster health status is red (all shards down)

1. 报错场景复现

执行集群健康检查时,状态为红色:

curl -u elastic:your_password http://localhost:9200/_cluster/health
# 输出中包含 "status" : "red"
2. 原因分析

红色状态表示至少有一个主分片未分配(可能因节点故障、索引损坏或磁盘空间不足导致)。单节点环境中,若索引分片未正常初始化,也可能出现此问题。

3. 解决方案
(1)检查磁盘空间
df -h /data1/elasticsearch/data
# 若磁盘使用率接近 100%,需清理空间
(2)查看未分配分片原因
curl -u elastic:your_password "http://localhost:9200/_cluster/allocation/explain?pretty"
(3)单节点环境特殊处理(仅测试环境)

若为单节点且无需高可用,可调整索引默认分片配置(新建索引生效):

# 创建索引模板,设置主分片为 1,副本分片为 0(单节点无法分配副本)
curl -u elastic:your_password -XPUT "http://localhost:9200/_index_template/default_template" -H "Content-Type: application/json" -d '
{"index_patterns": ["*"],"template": {"settings": {"number_of_shards": 1,"number_of_replicas": 0}}
}'
(4)重启集群(必要时)
systemctl restart elasticsearch

Elasticsearch 报错多与 配置冲突、权限不足、系统参数限制资源不足 相关。排查时可优先查看日志文件(如 /var/log/elasticsearch/test-es-cluster.log),根据具体报错信息定位原因,再通过调整配置、权限或系统参数解决。对于集群状态类问题,可结合 _cluster/health_cluster/allocation/explain 等 API 深入分析。

六、总结

本文全面对比了 Elasticsearch 编译安装与 Yum 安装的流程,提供了三种日志切割方案(log4j2 独立策略、合并策略、logrotate 定时任务 ),并深入分析了典型报错的原因与解决方法。通过灵活选用安装方式和日志管理策略,结合精准的报错排查,能够高效搭建稳定、安全的 Elasticsearch 集群,满足不同环境的部署需求。希望这份内容能帮助大家清晰梳理 Elasticsearch 部署全流程,若有更多细节需求或实践疑问,欢迎进一步交流探讨!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916245.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916245.shtml
英文地址,请注明出处:http://en.pswp.cn/news/916245.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript 配置参数详解 (tsconfig.json)

文章目录前言核心配置基本选项严格类型检查选项模块解析选项Source Map 选项实验性选项其他选项文件包含/排除选项详细用法示例最佳实践建议前言 tsconfig.json 是 TypeScript 项目的配置文件&#xff0c;用于指定编译选项和文件包含规则。以下是所有主要配置参数的中文详解&a…

Java经典笔试题

1.计算机网络传输层有哪些协议&#xff1f;分别适用于什么场景&#xff1f; TCP&#xff1a;面向连接、可靠传输&#xff08;重传机制&#xff09;&#xff0c;适用于对数据完整性要求高的场景&#xff0c;如文件传输 &#xff08;FTP&#xff09;、HTTP 通信、邮件发送&…

如何序列化和反序列化动态 XmlElement ?

有如下XML&#xff0c;Index_0-Index_N为动态的&#xff0c;N为可变数&#xff0c;如何将对象NoneXML序列化为XML&#xff0c;以及如何将XML内容反序列化为对象NoneXML&#xff1f;1、XML内容<NoneXML><Index_0><UseInSummary>0</UseInSummary><Beg…

分布式高可用ELK平台搭建及使用保姆级教程指南 (附安装包网盘免费下载)

1 ELK 简介 1.1 ELK 是什么 ​ ELK是一套开源免费且功能强大的日志分析管理系统,由 Elasticsearch、Logstash、Kibana 三部分组成,是三个软件产品的首字母缩写,简称ELK。这三款软件都是开源软件,通常是配合使用,且归于 Elastic.co 公司名下,所以被简称为 ELK。 ​ ELK…

MySQL索引背后的B+树奥秘

MySQL 索引实现机制深度解析 MySQL 索引的核心数据结构是 B树。这种设计是数据库领域数十年优化的结果&#xff0c;完美平衡了磁盘 I/O 效率、范围查询性能和存储利用率。以下是关键要点&#xff1a;一、为什么选择 B树而非其他结构&#xff1f;数据结构劣势B树优势二叉搜索树深…

k8s通过NUMA亲和分配GPU和VF接口

问题 一般情况下&#xff0c;sriov插件和gpu分配插件是单独工作的&#xff0c;网卡和GPU没有根据连接关系分配 如果一个节点起了多个容器&#xff0c;会造成GPU和网卡的通信瓶颈 修改 如果一个点起两个容器&#xff0c;可以按照NUMA亲和来分配 修改kubelet配置文件/var/lib/kub…

qemu-img 扩容虚拟机磁盘后扩容文件系统

在给磁盘映像扩容前需要关闭虚拟机1. 关闭虚拟机 [rootkvm1 opt]# virsh shutdown centos7.9 [rootkvm1 opt]# virsh list --allId Name State ----------------------------- centos7.9 shut off[rootkvm1 opt]# qemu-img info /var/lib/libvirt/images/centos…

Winwos上编译opencv的GPU版本推理yolov8

1.工具 VS2019 opencv4.7.0 opencv_contrib4.7.0 Cmake3.27.0 cudnn-windows-x86_64-8.5.0.96_cuda11-archive 2.具体流程 1.配置路径和编译器后点击configure 2.提前下载相关的包&#xff0c;如下图所示 3.第一次configure完成后&#xff0c;需要再配置编译选项 在编译…

C语言案例《猜拳游戏》

《猜拳游戏》 游戏说明 一、游戏简介 本游戏为猜拳对战类游戏&#xff0c;玩家可选择不同对手进行石头、剪刀、布的猜拳对决&#xff0c;支持重复游玩&#xff0c;直至玩家选择退出。 二、游戏流程 选择对手 游戏开始后&#xff0c;玩家需从 3 名对手中选择 1 名进行对战&#…

使用python的头文件Matplotlib时plt.show()【标题字体过小】问题根源与解决方案

使用python的头文件Matplotlib时plt.show【标题字体过小】问题根源与解决方案1. 问题复现2. 问题分析3. 解决方案方案一&#xff08;推荐&#xff09;&#xff1a;使用 fig.suptitle 结合 subplots_adjust方案二&#xff1a;以保存文件函数plt.savefig为准方案三&#xff1a;不…

全面解析MySQL(3)——CRUD进阶与数据库约束:构建健壮数据系统的基石

> 本文将带你深入探索MySQL的进阶CRUD操作与核心约束机制,用设计原则的视角揭示数据库如何保障数据世界的秩序。 ### 一、进阶CRUD:数据操作的精密工具 #### 1. 精准筛选:WHERE子句的深度运用 ```sql -- 基础筛选:价格大于50的菜品 SELECT * FROM dishes WHERE pric…

使用Redis实现MySQL的数据缓存

使用Redis来实现/mySQL的数据缓存的架构1&#xff1a;目标数据从mySQL读取数据或者从Redis读取数据 2&#xff1a;使用cannal监控mySQL&#xff1a;canal-server可以对mysql的blog实行拉取&#xff0c;可以拉去blog里面的(增&#xff0c;删&#xff0c;改等操作&#xff0c;查询…

linux配置ntp时间同步

目录 1.设置时区 2.安装chrony时间同步工具 3.修改chrony配置文件,添加阿里云NTP服务器作为时钟源 4.重启chrony服务&#xff0c;并查看同步结果 1.设置时区 timedatectl set-timezone Asia/Shanghai 2.安装chrony时间同步工具 apt install chrony -y&#xff08;dnf ins…

powershell 实现批量把文件夹下的bmp文件转换为jpg

以下是一个使用PowerShell将BMP图像批量转换为JPG&#xff08;质量85&#xff09;的脚本&#xff1a; <# .SYNOPSIS批量将BMP图像转换为JPG格式&#xff08;质量85&#xff09; .DESCRIPTION此脚本会遍历指定文件夹中的所有BMP文件&#xff0c;并将它们转换为JPG格式&#x…

星图云开发者平台新功能速递 | 页面编辑器:全场景编辑器,提供系统全面的解决方案

在数字化转型的浪潮下&#xff0c;高效的低代码开发工具成为企业和开发者的刚需&#xff0c;其需要针对Web、APP、H5等不同终端快速构建应用。但不同场景的开发往往需要不同的工具和技术栈&#xff0c;导致开发效率低、协作成本高。星图云开发者平台创新推出多类型页面专用编辑…

激活函数Focal Loss 详解​

Focal Loss 详解​1. 背景​Focal Loss 是由 Lin et al. (2017) 在论文 《Focal Loss for Dense Object Detection》 中提出的一种损失函数&#xff0c;主要用于解决 目标检测&#xff08;Object Detection&#xff09; 中的 类别不平衡问题&#xff0c;特别是在 One-Stage 检测…

Python 链接各种中间件[Mysql\redis\mssql\tdengine]

文章目录链接参数设置logger 日志redis 链接mysql 链接emqx 链接mssql 链接tdengine 链接采集OPCUA的点表的配置信息设备点表OPCUA 采集 数据程序数据采集逻辑链接参数 import randomtdengine_connection_params {username: root,password: taosdata,host: 127.0.0.1,port: 6…

C Primer Plus 第6版 编程练习——第11章(上)

本章共16题&#xff0c;分上中下三篇1.设计并测试一个函数&#xff0c;从输入中获取n个字符&#xff08;包括空白、制表符、换行符)&#xff0c;把结果存储在一个数组里&#xff0c;它的地址被传递作为一个参数。int get_n_char(char arr[], int n) {int i 0;char ch;while (i…

Java开发岗面试记录合集

一、Java 核心1. 基础语法final关键字的作用修饰类&#xff1a;类不可被继承&#xff08;如String类&#xff09;&#xff0c;保证类的稳定性和安全性。修饰方法&#xff1a;方法不可被重写&#xff08;防止子类篡改父类核心逻辑&#xff0c;如工具类方法&#xff09;。修饰变量…

Linux 系统时间设置(date 和 ntpdate)-linux028

date 命令&#xff1a;查看或设置系统时间1. 查看当前时间date示例输出&#xff1a;Tue Mar 4 01:36:45 CST 20142. 设置时间&#xff08;不设置日期&#xff09;date -s 09:38:40设置后输出&#xff1a;Tue Mar 4 09:38:40 CST 20143. 设置完整日期和时间&#xff08;推荐格…