MySQL 8.0 my.cnf 配置详解

news/2025/10/10 8:13:50/文章来源:https://www.cnblogs.com/dbasql/p/19132297

MySQL 8.0 my.cnf 配置详解

MySQL 配置文件(通常命名为 my.cnf 或 my.ini)是控制数据库运行行为的核心载体,尤其在 MySQL 8.0 版本中,诸多参数默认值与旧版差异显著(如默认字符集、认证插件、InnoDB 特性)。合理配置 my.cnf 不仅能避免 “默认配置性能瓶颈”,还能适配不同业务场景(如单机开发、生产主从、高并发交易),保障数据库稳定性与高效性。本文基于 MySQL 8.0 特性,从配置文件定位、核心参数解析、场景化配置示例到验证方法,提供一套可落地的 my.cnf 配置指南。

一、my.cnf 基础认知:路径、作用与加载顺序

在开始配置前,需先明确 my.cnf 的基础信息 —— 不同系统的默认路径不同,加载顺序也会影响最终生效的配置,避免出现 “配置不生效” 的常见问题。

1. 配置文件默认路径(按加载优先级排序)

MySQL 启动时会按以下顺序搜索 my.cnf,优先级从高到低(后加载的配置会覆盖先加载的):
 
系统类型常见路径
Linux(RPM 安装) /etc/my.cnf → /etc/mysql/my.cnf → /usr/local/mysql/etc/my.cnf
Linux(源码编译) /usr/local/mysql/my.cnf → /etc/my.cnf
macOS(Homebrew) /usr/local/etc/my.cnf → /usr/local/Cellar/mysql/[版本]/my.cnf
Windows C:\ProgramData\MySQL\MySQL Server 8.0\my.ini(隐藏目录)
 
查看当前生效的配置文件
 
通过 mysqld --help --verbose | grep "Default options" 命令,可查看 MySQL 实际加载的配置文件路径,示例输出:
 
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
 

2. 配置文件的核心作用

my.cnf 主要通过 “[模块]” 划分配置范围,核心模块包括:
 
  • [mysqld]:数据库服务端配置(最核心,如内存、InnoDB、端口);
  • [mysql]:客户端命令行工具配置(如默认字符集、连接超时);
  • [mysqld_safe]:mysqld_safe 守护进程配置(如日志路径);
  • [client]:所有客户端工具通用配置(如默认端口、用户名)。
 
注意:仅 [mysqld] 模块的配置会影响数据库服务运行,其他模块仅作用于客户端工具,避免混淆配置位置。

二、MySQL 8.0 核心参数解析:必调与优化建议

MySQL 8.0 的 my.cnf 配置需重点关注 “默认变更的参数” 和 “性能关键参数”,以下按模块分类解析,附默认值、作用与优化建议。

1. 基础服务配置([mysqld] 模块)

控制数据库服务的基础属性,如端口、字符集、服务器标识,是所有场景的必配项。
 
参数名8.0 默认值作用说明优化建议
port 3306 数据库监听端口 生产环境建议修改为非默认端口(如 33060),降低暴力破解风险
server-id 0(未启用) 数据库唯一标识(主从复制、MGR 必需,值需唯一) 单机环境设为 1,主从架构主库设为 100、从库设为 200/300(避免重复)
datadir /var/lib/mysql 数据文件存储路径(含表文件、binlog、redo log 等) 建议挂载独立磁盘(如 /data/mysql),避免系统盘满导致服务崩溃
socket /var/lib/mysql/mysql.sock 本地连接的 socket 文件路径 保持默认即可,若修改需同步配置客户端(如 [mysql] 模块的 socket 参数)
character-set-server utf8mb4 数据库默认字符集(MySQL 8.0 终于默认 utf8mb4,支持 emoji 表情) 无需修改,避免回退到 utf8(实际为 utf8mb3,不支持 emoji)
collation-server utf8mb4_0900_ai_ci 默认排序规则(区分大小写,支持 accent 敏感) 若业务需不区分大小写,可改为 utf8mb4_general_ci(性能略低)
default-time-zone SYSTEM 数据库默认时区 生产环境强制设为 +08:00(北京时间),避免时间戳转换错误
 
示例配置
[mysqld]
port = 33060
server-id = 100
datadir = /data/mysql
socket = /data/mysql/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
default-time-zone = +08:00
 

2. InnoDB 核心优化([mysqld] 模块)

MySQL 8.0 默认存储引擎为 InnoDB,其配置直接决定数据库性能(如读写速度、事务一致性),是优化重点。
 
参数名8.0 默认值作用说明优化建议
innodb_buffer_pool_size 128M InnoDB 缓冲池(缓存表数据、索引、undo log,性能核心) 单机环境设为物理内存的 50%-70%(如 16G 内存设为 10G);主从架构从库可设更高(如 70%-80%),减少磁盘 IO
innodb_log_file_size 48M InnoDB 重做日志(redo log)单个文件大小(控制事务提交性能) 生产环境设为 1G-4G(如 2G),太大影响恢复速度,太小导致频繁刷盘
innodb_log_files_in_group 2 redo log 文件组数(默认 2 个,循环写入) 保持默认 2 个,无需修改
innodb_flush_log_at_trx_commit 1 redo log 刷盘策略(影响事务安全性与性能) 金融 / 支付场景设为 1(事务提交即刷盘,不丢数据);非核心场景可设为 2(性能更高,仅 OS 崩溃可能丢数据)
innodb_flush_method O_DIRECT 数据文件刷盘方式(避免 OS 缓存二次缓存) 保持默认 O_DIRECT(Linux),Windows 设为 unbuffered
innodb_file_per_table ON 每张表独立表空间(.ibd 文件),而非共享表空间(ibdata1) 保持默认 ON,便于单表迁移、回收空间(DROP TABLE 可释放磁盘)
innodb_max_dirty_pages_pct 90 缓冲池脏页比例阈值(超过则触发后台刷盘) 保持默认 90%,若写入压力大,可降至 75%,减少突发刷盘导致的性能波动
innodb_read_io_threads/innodb_write_io_threads 4/4 InnoDB 读写 IO 线程数(处理磁盘 IO 请求) 8 核及以上 CPU 设为 8-16(如 16),提升并发 IO 处理能力
 
示例配置(16G 内存生产主库):
[mysqld]
# InnoDB 缓冲池(16G 内存设为 10G)
innodb_buffer_pool_size = 10G
# redo log 单个文件 2G,共 2 个(总 4G)
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
# 事务安全优先(金融场景)
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
# 并发 IO 线程(16 核 CPU 设为 16)
innodb_read_io_threads = 16
innodb_write_io_threads = 16
 

3. 连接与安全配置([mysqld] 模块)

控制数据库连接数、超时时间与安全策略,避免连接泄露、暴力破解等问题。
 
参数名8.0 默认值作用说明优化建议
max_connections 151 最大并发连接数(超过则拒绝新连接) 生产环境根据业务峰值调整(如 1000-2000),需结合内存(每个连接约占 2M)
wait_timeout 28800(8 小时) 非交互连接超时时间(如 JDBC 连接,超时后自动关闭) 设为 300-7200 秒(如 3600 秒),避免空闲连接占用资源
interactive_timeout 28800(8 小时) 交互连接超时时间(如 mysql 命令行,超时后断开) 与 wait_timeout 保持一致即可
max_user_connections 0(无限制) 单个用户的最大连接数(避免单个用户占用所有连接) 设为 max_connections 的 10%-20%(如 200),防止恶意连接
default_authentication_plugin caching_sha2_password 默认认证插件(MySQL 8.0 新特性,安全性更高) 若旧应用(如 Python 2.x、旧 JDBC 驱动)无法连接,临时改为 mysql_native_password,逐步升级应用
skip-name-resolve OFF 是否禁用 DNS 反向解析(连接时不解析客户端 IP 对应的域名,加快连接速度) 生产环境设为 ON,避免 DNS 故障导致连接延迟或失败
 
示例配置
[mysqld]
# 最大并发连接(16G 内存设为 1500)
max_connections = 1500
# 连接超时(1 小时)
wait_timeout = 3600
interactive_timeout = 3600
# 单个用户最大连接
max_user_connections = 200
# 兼容旧应用(临时配置)
# default_authentication_plugin = mysql_native_password
# 禁用 DNS 解析
skip-name-resolve = ON
 

4. 日志配置([mysqld] 模块)

MySQL 8.0 日志体系优化显著,合理配置日志便于问题排查、主从复制与审计。
 
参数名8.0 默认值作用说明优化建议
slow_query_log OFF 是否开启慢查询日志(记录执行时间超过 long_query_time 的 SQL) 生产环境强制设为 ON,便于优化慢 SQL
slow_query_log_file hostname-slow.log 慢查询日志文件路径 放在独立目录(如 /data/mysql/logs/slow.log),避免占满系统盘
long_query_time 2(秒) 慢查询阈值(超过此时间的 SQL 被记录) 设为 0.5-1 秒(如 0.5),捕获更多潜在慢 SQL
log_error hostname.err 错误日志路径(记录启动失败、崩溃、权限错误等关键信息) 必须配置(如 /data/mysql/logs/error.log),排查故障的核心依据
general_log OFF 通用查询日志(记录所有 SQL 操作,含增删改查) 仅调试时临时开启,生产环境禁用(日志量极大,影响性能)
log_bin OFF 是否开启二进制日志(binlog,主从复制、数据恢复必需) 主库强制设为 ON,从库若需作为其他从库的主库也需开启
binlog_format ROW binlog 格式(ROW/STATEMENT/MIXED,MySQL 8.0 默认 ROW) 保持默认 ROW 格式(复制安全性高,避免 SQL _mode 差异导致的复制错误)
expire_logs_days 0(不自动删除) binlog 自动过期时间(天) 设为 7-15 天(如 7),避免 binlog 占满磁盘
 
示例配置(生产主库):
[mysqld]
# 慢查询日志
slow_query_log = ON
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 0.5
# 错误日志
log_error = /data/mysql/logs/error.log
# 二进制日志(主从复制必需)
log_bin = /data/mysql/logs/mysql-bin
binlog_format = ROW
expire_logs_days = 7
# binlog 保留大小上限(补充过期时间,双重保险)
max_binlog_size = 1G
 

三、场景化 my.cnf 配置示例

不同业务场景对 MySQL 的需求差异显著,以下提供 3 类典型场景的完整 my.cnf 配置,可直接根据实际环境调整。

1. 场景 1:单机开发 / 测试环境(2C4G 内存)

需求:配置简单,无需极致性能,支持 emoji,便于调试。
[mysqld]
# 基础配置
port = 3306
server-id = 1
datadir = /data/mysql
socket = /data/mysql/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
default-time-zone = +08:00# InnoDB 优化(4G 内存设为 2G)
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2  # 性能优先,调试环境可放宽# 连接配置(开发环境连接数无需太高)
max_connections = 500
wait_timeout = 3600
skip-name-resolve = ON# 日志配置(便于调试)
slow_query_log = ON
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 1
log_error = /data/mysql/logs/error.log
# 临时开启通用查询日志(调试完成后关闭)
# general_log = ON
# general_log_file = /data/mysql/logs/general.log[mysql]
# 客户端默认字符集
default-character-set = utf8mb4
socket = /data/mysql/mysql.sock[client]
port = 3306
socket = /data/mysql/mysql.sock
 

2. 场景 2:生产主库(8C16G 内存,高并发交易)

需求:高性能、高可用,支持事务安全,便于故障排查。
[mysqld]
# 基础配置(非默认端口,避免攻击)
port = 33060
server-id = 100
datadir = /data/mysql
socket = /data/mysql/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
default-time-zone = +08:00# InnoDB 核心优化(16G 内存设为 10G)
innodb_buffer_pool_size = 10G
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1  # 事务安全优先(金融场景)
innodb_flush_method = O_DIRECT
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_file_per_table = ON
innodb_max_dirty_pages_pct = 75  # 减少突发刷盘# 连接与安全
max_connections = 1500
wait_timeout = 3600
interactive_timeout = 3600
max_user_connections = 200
skip-name-resolve = ON
# 禁用符号链接,避免安全风险
symbolic-links = 0# 日志配置(主从复制+慢查询监控)
slow_query_log = ON
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 0.5
log_error = /data/mysql/logs/error.log
# 二进制日志(主从复制必需)
log_bin = /data/mysql/logs/mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 1G
# 记录 binlog 写入时间(便于定位问题)
binlog_row_metadata = FULL# 其他优化
# 关闭查询缓存(MySQL 8.0 已废弃,默认关闭)
query_cache_type = 0
query_cache_size = 0
# 临时表存储在内存(避免磁盘临时表)
tmp_table_size = 64M
max_heap_table_size = 64M[mysql]
default-character-set = utf8mb4
socket = /data/mysql/mysql.sock[client]
port = 33060
socket = /data/mysql/mysql.sock
 

3. 场景 3:生产从库(8C16G 内存,只读查询)

需求:优化读性能,减少主从延迟,支持数据备份。
 
[mysqld]
# 基础配置(server-id 与主库不同)
port = 33060
server-id = 200  # 主库 100,从库 200
datadir = /data/mysql
socket = /data/mysql/mysql.sock
character-set-server = utf8mb4
default-time-zone = +08:00# InnoDB 优化(从库读多,缓冲池设更高)
innodb_buffer_pool_size = 12G  # 16G 内存设为 12G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2  # 从库无需事务安全,性能优先
innodb_read_io_threads = 16
innodb_write_io_threads = 16
# 从库加速复制:并行应用 binlog
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8  # 并行线程数,设为 CPU 核心数的 1-2 倍# 连接配置(从库承担读请求,连接数与主库一致)
max_connections = 1500
wait_timeout = 3600
skip-name-resolve = ON# 日志配置(从库无需开启 binlog,除非作为其他从库的主库)
slow_query_log = ON
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 0.5
log_error = /data/mysql/logs/error.log
# 从库复制日志(便于排查延迟问题)
relay_log = /data/mysql/logs/relay-bin
relay_log_recovery = ON  # 中继日志损坏时自动恢复# 只读配置(禁止从库写入,除复制线程外)
read_only = ON
super_read_only = ON  # 禁止 SUPER 权限用户写入[mysql]
default-character-set = utf8mb4
socket = /data/mysql/mysql.sock[client]
port = 33060
socket = /data/mysql/mysql.sock
 

四、配置验证与常见问题排查

配置 my.cnf 后,需验证配置是否生效,避免因语法错误或路径问题导致服务启动失败。

1. 验证配置是否生效

(1)检查配置文件语法

MySQL 提供 mysqld --help --verbose 命令,可检查配置文件语法是否正确,无报错则语法正常:
 
mysqld --defaults-file=/etc/my.cnf --help --verbose 2>/dev/null | grep "port"
# 输出 port 33060,说明配置生效
 

(2)重启 MySQL 服务

配置修改后需重启服务才能生效(部分参数支持动态修改,如 max_connections,但核心参数如 innodb_buffer_pool_size 需重启):
# Linux(systemd 系统)
systemctl restart mysqld
# 查看服务状态
systemctl status mysqld
 

(3)查看参数实际值

登录 MySQL 后,通过 SHOW VARIABLES 查看参数是否生效:
-- 查看端口
SHOW VARIABLES LIKE 'port';
-- 查看 InnoDB 缓冲池大小
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 查看时区
SHOW VARIABLES LIKE 'default_time_zone';
 

2. 常见问题排查

(1)服务启动失败:日志权限问题

报错Can't open error log file '/data/mysql/logs/error.log'.
 
原因:MySQL 对日志目录无写入权限。
 
解决:修改目录权限为 mysql:mysql
mkdir -p /data/mysql/logs
chown -R mysql:mysql /data/mysql
 

(2)配置不生效:加载路径错误

现象:修改 /etc/my.cnf 后,参数仍为默认值。
 
原因:MySQL 实际加载的是其他路径的 my.cnf(如 /usr/local/mysql/etc/my.cnf)。
 
解决:通过以下命令找到实际加载的配置文件,修改正确路径:
 
 
mysqld --help --verbose | grep "Default options"
 

(3)从库复制延迟:并行复制未开启

现象:从库 Seconds_Behind_Master 持续升高。
 
解决:在从库 my.cnf 中开启并行复制(参考场景 3 配置),并重启服务:
 
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8
 

五、总结:my.cnf 配置的核心原则

MySQL 8.0 的 my.cnf 配置需遵循 “按需优化,避免过度配置” 的原则,核心要点:
 
  1. 基础参数必配server-iddatadircharacter-set-serverdefault-time-zone 是所有场景的基础,避免依赖默认值;
  2. InnoDB 优先优化innodb_buffer_pool_sizeinnodb_log_file_size 是性能关键,需结合内存与业务类型调整;
  3. 场景化适配:开发环境简化配置,生产主库侧重事务安全与并发,从库侧重读性能与复制速度;
  4. 日志不可少:错误日志、慢查询日志是排查故障的核心,生产环境必须开启并定期清理;
  5. 验证与监控:配置后必验证,定期通过 SHOW STATUSpt-query-digest 等工具监控参数效果,动态调整。
 
合理的 my.cnf 配置能让 MySQL 8.0 发挥最佳性能,同时为业务稳定性提供保障 —— 它不是 “一劳永逸” 的静态文件,而是需要随业务增长、硬件升级持续优化的动态载体

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

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

相关文章

Vue3水波纹指令:2025年Material Design交互新标准 - 实践

Vue3水波纹指令:2025年Material Design交互新标准 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

巨型飞机运输风力涡轮机叶片技术解析

本文详细介绍了为运输超长风力涡轮机叶片而设计的巨型飞机WindRunner的技术细节,包括其特殊机身结构、短距起降能力、 dirt跑道适应性等工程创新,以及大型涡轮叶片运输面临的物流挑战和解决方案。巨型飞机运输风力涡…

CCPC2024女生专场 游记(VP)

两人打女生赛,$8t$ 冲进金牌区。谁说女生赛金不是金?省流两人打女生赛,\(8t\) 冲进金牌区。谁说女生赛金不是金? 10.8 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 不知道为什么,今天白天突然选择了睡大…

dremio sql server uniqueidentifier 数据类型问题

dremio sql server uniqueidentifier 数据类型问题uniqueidentifier 类型用来存储guid,sql server内部存储为16个固定字节的二进制数据,在dremio 当前的arp 类型映射中,存储为了varbinary,机制上没有问题,但是很多…

重磅福利,JetBrains 宣布 DataGrip 面向非商业用途免费!

前言 JetBrains 再放大招!继 JetBrains RustRover、CLion、Rider、WebStorm 和 RubyMine 之后,其专业数据库管理工具 DataGrip 也正式面向非商业用途免费开放。无论你是学生、开源贡献者,还是出于个人兴趣探索数据库…

【GitHub每日速递 251010】Zen MCP:一键 orchestrate 多 AI 模型,代码开发协作新革命!

开源神器 Infisical:一站式解决秘密管理、PKI、KMS 等难题! Infisical 是一个开源的密钥管理、PKI 和 SSH 访问平台。简单讲,它帮助团队安全地存储和管理敏感信息(如密码、证书、密钥),并控制谁可以访问这些资源…

Beyond Compare5最新破解版下载及安装使用教程

Beyond Compare5最新破解版下载及安装使用教程Beyond Compare5中文版是一款功能强大且极其专业的文件数据对比软件,软件支持对比文本内容、文件目录、文本类型等内容,软件可以有效帮助用户对比文件具体差异参数或者同…

Why cant developing countries become developed?

When capitalist countries allow immigrants to engage in labor while they themselves surf the internet every day for public opinion propaganda because they have nothing to do. They have never really ask…

22 LCA模拟赛2T1 奶龙与贝利亚 题解

奶龙与贝利亚 题面 \(n\) 个生物排成一排,每个生物是奶龙或者贝利亚。 给定数组 \(a_1,a_2, \cdots, a_n\),有约束:若第 \(i\) 个位置是奶龙,那么前面恰好有 \(a_i\) 个奶龙。 若第 \(i\) 个位置是贝利亚,那么前面…

微软拼音输入法自定义短语批量导入导出工具(支持Windows 10/11)

微软拼音输入法自定义短语批量导入导出工具(支持Windows 10/11)用微软拼音输入法?你一定遇到过这个痛点! 在 Windows 10/11 上,微软拼音输入法虽然自带自定义短语功能,但有个致命问题: 没有官方的批量导入/导出…

AI风险管控新规应对系统抵抗关闭行为

某中心旗下DeepMind更新前沿安全框架,新增对AI系统抵抗关闭和异常说服能力的监控,研究显示大型语言模型可能通过修改代码规避关闭指令,引发对高级AI系统人类控制能力的担忧。某中心扩展AI风险规则 研究揭示令人担忧…

01-Vue3阶段必会的前置知识-01变量和常量

01-Vue3阶段必会的前置知识-01变量和常量$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");变量变量使用let声明常量常量使用的是const声明数组添加元素4 cons…

这是我的第一个个人博客

这是我的第一个个人博客这是我的第一个博客,后续,我还想将我的想法以文章或者视屏的方式发到我的个人网站上去。还有Github,reddit,贴吧上。 现在当务之急是找到一个顺手的写作工具和多平台管理工具。

BLDC中的Q15

介绍一下Q15格式化是什么,其目的是为了什么,最好举例,并能用易懂的方式表述 好的,我用一个非常易懂的方式来解释 Q15格式化。一句话理解 Q15 Q15 是一种在整数上“假装”有小数的方法,它让只能处理整数的CPU(比如…

华为 AP hw_manage 离线管理 Wi-Fi 密码

AP尚未上线:Fit AP无密码、Cloud AP为 hw_manage AP上线后离线:为AC的 temporary-management psk 命令设置的密码

251009

edu 183 div2 div2 D 假若存在一个满足条件的构造,则最终的排列一定是由若干极长递增子段拼成的,一个区间如果只属于某一个极长递增子段,则这个区间就不包含逆序对,也就不会对 \(k\) 产生贡献;如果一个区间跨越了…

MaxProduct

public class MaxProduct {public static int maxProduct(int[] arr) {if (arr == null || arr.length < 2) {return 0;}int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE;int min1 = Integer.MAX_VALUE, m…

雪落 - L

雪落本文根据作者虚假经历瞎编而成,请各位不要当真。由于作者幼稚的文笔,已借助AI润色。一 她像一道苍白的影子,悄无声息地嵌在教室的角落。 当他踏入十四班,成为初中生的第一刻,目光便无意中被那道身影捕获。她并…

PluginMonitor - Typecho 插件监控工具

为什么需要插件监控? 作为 Typecho 博客的站长,你是否遇到过以下困扰:插件过多导致性能下降:安装了太多插件,不知道哪些在拖慢网站速度 数据库臃肿:插件创建的数据表越来越多,数据库变得臃肿不堪 内存占用不明:…

STM32 教程

STM32单片机学习路径 硬件 已买 STM32F103C8T6 软件 参考教程链接 博客园-stm32单片机教程 CSDN-零基础快速上手STM32开发(手把手保姆级教程) 知乎-稚晖-配置CLion用于STM32开发【优雅の嵌入式开发】 STM32基础入门(…