如果你搜到这篇《MySQL 8.0 完整安装与配置教程(纯文字版)》,大概率是和我一样:手头有台服务器,要么想搭一套数据库环境,要么正被 Zabbix、PHP 项目之类的事情卡住,必须先搞定 MySQL 8.0。我特意把内容写成纯文字,不带截图,因为命令和配置文件才是真正能直接复现的东西。这篇会从安装方式选择开始,讲 Linux 和 Windows 两套完整链路,覆盖初始化、权限、常见配置调优,并把部署 Zabbix 7.0 LTS 时和 MySQL 8.0 配合的坑单独拎出来说。
适合看这篇的人有三类:第一次装数据库、想快速搭开发环境的新手;已经装了 MySQL 但被密码、远程登录、服务启动折磨到怀疑人生的老哥;以及正在给监控平台、Web 应用准备后端数据库,需要一份能直接照着执行的清单的运维同学。全文以命令和实际操作为主,不会绕弯子,你照着敲就能跑。
1. 装之前必须分清的三件事:版本、环境与安装方式
1.1 为什么“别用 8.0”已经是过时的说法
MySQL 8.0 刚发布那几年,确实有不少人劝退,理由无非是默认认证插件变了、部分老客户端连不上、5.7 到 8.0 的升级路径有坑。但放到现在,这些理由基本都不成立了。MySQL 8.0 已经是非常成熟的长期支持版本,官方在 2023 年后对 5.7 的更新支持已经停止,新项目再开 5.7 的坑,等于把一个生命周期快到头的数据库放进生产环境。
相比 5.7,8.0 最核心的变化是:默认字符集变成了 utf8mb4,数据字典改用 InnoDB 管理,支持窗口函数和公共表表达式,JSON 查询能力大幅增强,性能也比 5.7 有明显提升。更重要的一点是,很多监控、运维、BI 工具的新版本都在围绕 8.0 做适配,比如 Zabbix 7.0 LTS 官方推荐的就是 MySQL 8.0 系列。所以现在装库,直接用 8.0,不要犹豫。
1.2 平台选择决定了后面所有步骤
安装 MySQL 8.0 之前,先想清楚你在什么系统上装,因为后续步骤完全不同:
- Linux 服务器:这是生产环境最主流的场景。推荐用官方 Yum/Apt 仓库安装,原因后面会说。CentOS、Rocky Linux、AlmaLinux 这类 RHEL 系系统,走 rpm 路线;Ubuntu、Debian 走 apt 路线。
- Windows 桌面或开发机:适合本地开发、测试、学习。有两套方案,一是官方 Installer 图形界面,二是 ZIP 压缩包手动安装。我建议开发机用官方 Installer,但如果你想练一下对 MySQL 目录和服务的掌控能力,ZIP 方案值得走一遍。
- Docker 容器:适合快速拉起一个临时数据库,或者跑自动化测试。不过生产环境用 Docker 跑 MySQL 需要额外考虑数据卷、权限、网络模式的问题,不建议新手一上来就容器化部署,先把常规安装链路走通再说。
1.3 安装方式对比
很多人上来就问“我该下载哪个包”,这里先给一张对比表,你看着选就行:
| 安装方式 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 官方 Yum/Apt 仓库 | 安装简单、升级方便、依赖自动处理 | 需要联网拉取仓库 | Linux 生产/开发环境 |
| 通用二进制包 | 可自定义目录、适合内网离线部署 | 初始化和服务脚本要手动处理 | 有一定经验的管理员 |
| 源码编译 | 可定制编译参数 | 耗时、依赖多、维护成本高 | 极少见,除非有特殊需求 |
| Docker | 启动快、环境隔离 | 数据持久化、权限处理复杂 | 开发测试、临时环境 |
我个人的建议很直接:Linux 上优先官方仓库,Windows 上优先官方 Installer,离线内网才考虑二进制包。源码编译我不推荐,除非你确实需要定制某些底层功能,否则纯属浪费时间。
2. 在Rocky/CentOS上用官方仓库安装MySQL 8.0
2.1 先清场:处理系统自带的 MariaDB
很多 RHEL 系系统默认带着 MariaDB 的库文件,如果不清理,后面装 MySQL 时会出现冲突,或者mysql命令被 MariaDB 的客户端占住。先检查一下:
rpm -qa | grep -i mysql rpm -qa | grep -i mariadb如果有输出,先移除:
sudo yum remove -y mariadb-libs注意:有些系统组件(比如 Postfix)依赖 mariadb-libs,直接卸载可能会连带卸载掉一些组件,所以卸载后建议跑一下sudo yum check或者干脆把 Postfix 这类不重要的组件也一并处理掉。我遇到过一次,卸载 mariadb-libs 后 Postfix 被自动移除,结果邮件告警功能失效,排查了半天才发现是这个原因。
2.2 添加官方 Yum 源并安装
这里不推荐用系统自带的 AppStream 里的 mysql 模块,因为版本通常不是最新的 8.0 小版本。官方 Yum 仓库的好处是版本新、依赖全、后续yum update可以直接升级。
先安装仓库 rpm 包:
sudo rpm -ivh https://repo.mysql.com/mysql80-community-release-el9-5.noarch.rpm如果你用的是 CentOS 8、Rocky 8、AlmaLinux 8,就把链接里的el9换成el8。安装完后检查仓库是否生效:
yum repolist all | grep mysql然后安装 server 包:
sudo yum install -y mysql-community-server这一步会自动拉取客户端、共享库、libaio 等依赖。装完后验证版本:
mysql --version正常情况下会输出类似mysql Ver 8.0.xx for Linux on x86_64的信息。
2.3 启动服务并拿到初始临时密码
MySQL 8.0 装完不会让你直接设置密码,而是把初始密码写进日志。先启动服务:
sudo systemctl start mysqld sudo systemctl enable mysqld然后去日志里找临时密码:
sudo grep 'temporary password' /var/log/mysqld.log输出会类似这样:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: xxxxxxxx把这串密码复制下来,这是你第一次登录用的。登录命令:
mysql -uroot -p输入临时密码后,系统会强制你修改 root 密码,否则什么都干不了:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Your_New_Password@2024';这里要注意密码强度。8.0 默认装了 validate_password 组件,要求密码至少 8 位,并且包含大小写字母、数字和特殊字符。如果不想用这么强的策略,后面我会讲怎么调。
2.4 初始化之前就把数据目录规划好:datadir 迁移
很多人的习惯是装完就直接用,等数据量大了才发现/var/lib/mysql所在分区不够用,然后被迫迁移数据目录。迁移虽然可以做,但会有一段时间的停机,业务方不会开心。所以我强烈建议:在初始化之前,就决定好数据目录放在哪。
如果你有独立数据盘(比如/data),先把目录建好:
sudo mkdir -p /data/mysql sudo chown mysql:mysql /data/mysql sudo chmod 750 /data/mysql然后把/etc/my.cnf里的datadir改成你规划的路径:
[mysqld] datadir=/data/mysql注意:如果服务已经启动过、/var/lib/mysql下已经有数据了,再去改datadir会导致启动失败。正确的顺序是:装完包之后,先别systemctl start mysqld,直接改配置文件,再启动。MySQL 8.0 在服务启动时发现datadir是空目录,会自动完成初始化。如果你用的是全新系统数据盘,我建议顺序是:分区挂载 -> 创建目录 -> chown -> 改 my.cnf -> 启动服务。
3. Windows 安装中容易踩的三个细节
3.1 用官方 Installer 还是 ZIP 压缩包
Windows 上安装 MySQL 8.0 有两条路:
官方 Installer(mysql-installer-community-8.0.xx.msi)适合大多数用户。它会引导你选择安装类型,我建议在安装时选择 Server only,不要勾选 MySQL Workbench、MySQL Shell 以外的一堆插件,保持环境干净。Installer 会自动处理服务注册和 my.ini 生成,很适合开发机。
ZIP 压缩包(mysql-8.0.xx-winx64.zip)适合想完全掌控目录结构的人。下载后解压到你想要的路径,比如D:\mysql-8.0.xx,然后在目录下手动创建my.ini:
[mysqld] basedir=D:/mysql-8.0.xx datadir=D:/mysql-8.0.xx/data port=3306 character-set-server=utf8mb4这里有个坑:路径里的分隔符建议用正斜杠/,因为反斜杠在配置解析里会被转义,容易出幺蛾子。我见过有人写成D:\mysql\data,结果服务起不来,日志里全是路径错误。
3.2 手动初始化时 --initialize 和 --initialize-insecure 怎么选
ZIP 包不会自动初始化,需要你手动执行:
mysqld --initialize --console这个命令会在 data 目录生成初始化数据,并随机生成 root 密码,输出在控制台上,务必保存。另一种方式是:
mysqld --initialize-insecure --console这个会生成一个 root@localhost 且密码为空的账户,登录后需要立刻设置密码。
我的建议是:本地开发想省事,用 --initialize-insecure,登录后立刻改密码;想贴近生产习惯,就用 --initialize,体验一遍“临时密码 -> 修改密码”的流程。注意,命令必须在你自己的basedir目录下执行,而且 data 目录必须不存在或者是空目录,否则会报错。
3.3 注册 Windows 服务与常见启动失败
初始化完成后,把 mysqld 注册成系统服务:
mysqld --install MySQL80 --defaults-file=D:/mysql-8.0.xx/my.ini然后启动:
net start MySQL80如果启动失败,先看错误日志,Windows 下日志默认在datadir目录下,文件名是主机名.err。最常见的失败原因有三个:
my.ini里路径写错或者文件编码不对,保存时必须用 ANSI 或 UTF-8(无 BOM)编码,不要用 UTF-8 with BOM。- data 目录权限不对,或者被杀毒软件拦截了 mysqld 进程。
- 3306 端口被其他程序占用,比如你电脑上装过旧的 MySQL 或 MariaDB。
端口排查用系统命令:
netstat -ano | findstr 3306有输出就看 PID 对应什么进程,必要时改配置里的端口,或者停掉占用程序。
4. 初始化安全与权限配置:能连上才算装完
4.1 mysql_secure_installation 到底替你做了哪些事
Linux 上装完后,官方推荐的下一步是跑一遍mysql_secure_installation:
sudo mysql_secure_installation它会按顺序问你几个问题:
- 是否修改 root 密码
- 是否移除匿名用户
- 是否禁止 root 远程登录
- 是否删除 test 数据库
- 是否刷新权限表
我每次装完都会跑一遍,因为移除匿名用户和清理 test 库这两件事,手动做很容易漏掉。尤其 test 库,默认情况下任何用户都能访问,虽然数据不重要,但作为一个隐患不值得留。
4.2 远程访问用户创建与 localhost/% 区分
root 账号默认只能从本机登录,这是好事,生产环境千万不要开 root 远程访问。你需要的是为业务单独创建用户。
比如要创建一个用户,仅允许从应用服务器192.168.1.10连接,可以这样:
CREATE USER 'app'@'192.168.1.10' IDENTIFIED BY 'StrongPassword@2024'; GRANT ALL PRIVILEGES ON app_db.* TO 'app'@'192.168.1.10';如果应用服务器 IP 不固定,或者你只想图省事,也可以允许任意主机:
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPassword@2024'; GRANT ALL PRIVILEGES ON app_db.* TO 'app'@'%';这里的%表示除 localhost 外的任意地址。注意:app@localhost和app@%是两个不同的账号,如果你只创建了app@%,在数据库本机用mysql -uapp -p登录时会匹配到app@localhost,然后提示找不到用户。这是一个非常容易踩的坑。
修改权限后,如果是通过 GRANT 语句授权的,不需要刷新权限表;如果你是手动INSERT INTO mysql.user改的,才需要FLUSH PRIVILEGES;。
4.3 caching_sha2_password 带来的“老客户端连不上”问题
MySQL 8.0 默认的认证插件是caching_sha2_password,相比老版的mysql_native_password安全性更高,但问题在于:早期版本的 PHP 7.1 以下、Navicat 旧版、部分 Java 老驱动都不支持这个新插件,会直接报Authentication plugin 'caching_sha2_password' cannot be loaded之类的错。
解决方法有两种:
第一种,升级客户端到最新版,这也是官方推荐的做法。PHP 7.4+、Navicat 16+、较新的 JDBC 驱动都支持。
第二种,如果你确实没办法升级客户端,比如被生产环境的 PHP 版本锁死,就只能把特定用户的认证插件改回旧的:
ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPassword@2024';这里我多说一句:能用新协议就用新协议,改回旧插件只是权宜之计。MySQL 8.4 开始已经默认移除mysql_native_password,你迟早要面对升级。
4.4 root 密码丢失后的两种思路
忘记 root 密码是每个人都会经历的尴尬时刻,处理思路分两种。
第一种,临时跳过授权表。先编辑/etc/my.cnf,在[mysqld]下加一行:
skip-grant-tables然后重启服务:
sudo systemctl restart mysqld mysql -uroot登录后先刷新权限再改密码,因为跳过授权表时,很多操作会被拒绝:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword@2024';然后删掉skip-grant-tables配置,重启服务。注意:skip-grant-tables 状态下不校验任何密码,等于裸奔,只允许在本地操作,并且处理完必须立刻删掉配置。
第二种更干净的方式,是用init-file参数。在/etc/my.cnf中指定一个含 SQL 语句的文件:
[mysqld] init-file=/tmp/mysql-init.sql然后在/tmp/mysql-init.sql里写:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword@2024';重启服务时会自动执行这条 SQL,执行完后立刻删除该文件和配置项。这种方式的好处是可以审计,也不会有裸奔窗口。
5. my.cnf 里值得调整的几个核心参数
5.1 配置文件读取顺序与分文件管理
Linux 下 MySQL 读取配置文件的顺序大致是:/etc/my.cnf、/etc/mysql/my.cnf、~/.my.cnf,后读的会覆盖先读的。你可以用以下命令查看实际生效的配置文件路径:
mysqld --verbose --help | grep -A 1 'Default options'8.0 的 RPM 包默认在/etc/my.cnf里通过!includedir /etc/my.cnf.d引入目录下的所有.cnf文件。我的习惯是把不同功能的配置拆到不同文件里,比如/etc/my.cnf.d/character-set.cnf、/etc/my.cnf.d/log.cnf、/etc/my.cnf.d/innodb.cnf,这样做的好处是改动某个模块时不会动到主配置,回滚也方便。
5.2 字符集、连接数与 InnoDB 缓冲池
字符集在 8.0 里已经默认是 utf8mb4,不需要特别折腾,但我还是建议在[mysqld]下显式声明一下:
character-set-server=utf8mb4 collation-server=utf8mb4_0900_ai_ciutf8mb4_0900_ai_ci是 8.0 的默认排序规则,比 5.7 常用的utf8mb4_general_ci更准确。如果你要和 5.7 的数据做兼容,可以考虑用utf8mb4_general_ci,否则保持默认即可。
连接数:max_connections不是越大越好。每个连接都要占用线程和内存,盲调到 5000 只会让系统更容易 OOM。简单估算方式:按 256MB 内存支撑约 100 个并发连接来粗算,结合你的应用线程池大小。一般 Web 应用 300 到 500 就够,除非你确实测过连接池上限。
InnoDB 缓冲池:这是 MySQL 性能最关键的一个参数。默认值是 128MB,生产环境必须调。通用经验:专用 MySQL 实例给物理内存的 60% 到 70%。比如 32G 内存的机器:
innodb_buffer_pool_size=20G设置后通过以下命令验证:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests'; SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';如果Innodb_buffer_pool_reads明显偏高,说明大量数据要从磁盘读,缓冲池可能还不够。
5.3 日志、慢查询和二进制日志
生产环境建议把慢查询打开,这是排查 SQL 性能的必备工具:
slow_query_log=1 slow_query_log_file=/var/log/mysql/slow.log long_query_time=1 log_queries_not_using_indexes=1long_query_time=1表示超过 1 秒的 SQL 都会被记录。测试环境你可以设成 0.5 甚至 0.1,生产环境我建议先 1 秒,否则日志刷得太快。
二进制日志是主从复制和数据恢复的基础。如果你是单机,可以在初始化后开启:
server-id=1 log-bin=mysql-bin binlog_expire_logs_seconds=604800binlog_expire_logs_seconds=604800表示二进制日志保留 7 天,单位是秒,这是 8.0 的写法,老版本是expire_logs_days。
还有两个 8.0 特有的参数值得注意:
innodb_redo_log_capacity=1G8.0.30 之后重做日志改用innodb_redo_log_capacity控制大小,官方建议生产环境不要低于 100MB,通常设到 1G 以上可以减少频繁刷盘的性能抖动。
5.4 修改配置后的验证方法
改配置不是改完就好,必须验证。重启服务后用下面几组 SQL 确认:
SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'max_connections'; SHOW VARIABLES LIKE 'slow_query_log';看到的值和你配置的一致,才算真正生效。如果发现没生效,优先级最高的嫌疑是配置文件路径不对,或者参数被后面的配置文件覆盖了。用 5.1 的方法查看实际读取了哪些配置文件,逐层排查。
6. 给部署 Zabbix 7.0 LTS 的人提个醒:MySQL 8.0 配合细节
6.1 建库与建用户,不要漏掉字符集
很多人部署 Zabbix 时会顺手用系统自带的 MariaDB,但 Zabbix 7.0 LTS 官方推荐的是 MySQL 8.0 系列,所以如果你追求官方支持路径,就在装好 MySQL 8.0 之后,单独为 Zabbix 建库建用户。
先登录 MySQL:
mysql -uroot -p然后执行:
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'Zabbix_Password@2024'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';这里有两个重点。第一个,数据库字符集建议用utf8mb4_bin,因为 Zabbix 官方文档和 schema 里的表默认使用这个排序规则,避免大小写敏感问题导致数据匹配异常。第二个,如果你的 Zabbix server 和 MySQL 不在同一台机器,用户主机部分要写成 Zabbix server 的实际 IP,或者用%,同时确保 MySQL 允许远程连接(bind-address 不是 127.0.0.1 才行)。
6.2 导入 SQL schema 时最常见的三个错误
Zabbix 安装包里有初始化数据库的 SQL 文件,路径一般是/usr/share/zabbix-sql-scripts/mysql/server.sql.gz。导入命令:
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix这一步有三个高频错误:
一是没建库直接导,会报No database selected。必须先建库再导入。
二是用户权限不足,只给了SELECT权限导致导入失败。建用户时直接GRANT ALL就完事,别想着最小化权限,Zabbix schema 会创建表、触发器、存储过程,权限不够必报错。
三是导入过程中中断,比如网络不稳或超时。SQL 文件很大,全量导入可能要几分钟。建议直接在 Zabbix server 本机执行,不要在远程客户端上导,减少中断概率。如果导到一半失败,可以DROP DATABASE zabbix;后重建再导,不要试图“接着导”,因为事务不会完全回滚,数据会处于残缺状态。
导入完成后检查一下表数量是否正常:
USE zabbix; SHOW TABLES;正常会有几十张表,包括hosts、items、triggers这些核心表。
6.3 Zabbix server 连接 MySQL 的常见排查顺序
Zabbix server 的数据库配置在/etc/zabbix/zabbix_server.conf里,改这几个参数:
DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=Zabbix_Password@2024改完重启:
sudo systemctl restart zabbix-server如果日志报错连不上数据库,按顺序排查:
- MySQL 是否在运行:
systemctl status mysqld - 端口是否监听:
ss -lntp | grep 3306 - 账号密码能否手动登录:
mysql -uzabbix -p -h 127.0.0.1 zabbix - 如果前面都通过,再看
/var/log/zabbix_server.log
我遇到最多的问题其实是 DBHost 和登录方式不匹配:Zabbix server 和 MySQL 同机时,DBHost=localhost会用 socket 连接;如果你把DBHost=127.0.0.1,走 TCP 连接,但 Zabbix 用户可能只创建了@localhost的权限,导致 TCP 登录被拒。这个细节很容易被忽略,因为zabbix用户确实存在,只是 host 匹配不上。
另外,Zabbix 前端(PHP 页面)也需要能连 MySQL。如果你是 nginx + php-fpm 的部署方式,先确认 PHP 装了 pdo_mysql 扩展:
php -m | grep pdo_mysql没有的话需要安装对应扩展包。前端页面的数据库配置在/etc/zabbix/web/zabbix.conf.php,改完确保 web 目录可写,否则安装向导写不进去配置文件。
7. 服务起不来、密码连不上、端口不通——三个故障现场复原
7.1 mysqld 启动失败的排查路径
服务启动失败时,第一步永远不是百度,而是看错误日志。Linux 下默认日志位置是/var/log/mysqld.log。用journalctl -u mysqld也行,但日志文件更直接:
sudo tail -50 /var/log/mysqld.log常见原因大致分几类:
目录权限问题。如果报错里出现Permission denied,检查 datadir 属主和 SELinux 上下文:
sudo ls -ld /data/mysql如果属主不是 mysql,执行:
sudo chown -R mysql:mysql /data/mysql如果 SELinux 是 enforcing 状态,即便属主正确也可能被拦截。查看状态:
getenforce临时放行可以这样:
sudo chcon -R -t mysqld_db_t /data/mysql长期方案是把 SELinux 对 MySQL 的相应布尔值打开,或者针对数据目录持久化上下文。如果只是开发机,嫌麻烦也可以把 SELinux 设为 permissive,但生产环境建议保留 enforcing 并正确配置。
磁盘空间满。MySQL 启动时要写临时文件、redo log,磁盘不够会直接起不来:
df -h/var/lib/mysql或数据目录所在分区使用率到 100% 时,先清理,再启动。
配置错误。my.cnf里某个参数写错,或者 datadir 路径指向不存在的目录。用mysqld --validate-config可以快速检查配置项是否合法:
mysqld --defaults-file=/etc/my.cnf --validate-config没有输出说明配置基本没毛病。
7.2 ERROR 1045/2003/2013 的常见原因
这三个报错是连接 MySQL 时最常遇到的,我分别说下。
ERROR 1045 (28000): Access denied for user:账号密码错误,或者授权主机不匹配。先确认密码大小写和特殊字符,再检查用户表里的 Host 字段。常见场景:你用root从远程连,但 root 只允许 localhost;或者你新建的用户app@%在被访问的机器上登录时匹配不到。
ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x':连不上服务,原因通常是服务没监听、端口不对、防火墙拦截。在服务器本机先自测:
mysql -uroot -p -h 127.0.0.1 -P 3306如果本机能连,远程不行,大概率是防火墙问题。
ERROR 2013 (HY000): Lost connection to MySQL server during query:连接建立后中途断开。常见原因有:max_allowed_packet太小,遇到大查询或大数据包直接断开;网络不稳导致超时;MySQL 的wait_timeout太短导致空闲连接被断开。这类问题要结合具体业务场景调参,不一定是配置错误。
7.3 防火墙、SELinux 与 bind-address
远程连不上 MySQL 时,除了账号权限,还有两个系统层面的因素必须排查。
bind-address:MySQL 默认监听 127.0.0.1,只允许本机连接。要让远程机器能访问,在my.cnf里改:
bind-address=0.0.0.0也可以指定具体网卡 IP。改完重启服务,用ss -lntp | grep 3306确认监听地址。
防火墙:CentOS/Rocky 默认用 firewalld:
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-ports这步操作前要确认你对服务器防火墙策略有清楚认知,不要为了省事把整个 zone 设为允许,那样会引入不必要的风险。
最后分享一个我自己的习惯:所有配置改动,我都会在my.cnf里写一行注释,标注修改日期和原因,例如:
# 2025-03-20: 提高并发能力,应用侧连接池确认峰值为300 max_connections=500数据库这东西,慢就是稳,稳就是省心。按照这套链路走完,MySQL 8.0 的安装配置、权限设计、基础调优和故障排查,你基本都能做到心里有数,后面再遇到问题也知道从哪里下手。