Linux安装MySQL最后一步:启动mysqld服务及执行安全脚本

周叙
周叙
发布时间:2026-09-18| 4人浏览过
原创

在 Linux 系统中通过包管理器解包或完成二进制解压,并不代表数据库已经可以直接投入使用。很多人在解包后直接尝试用空密码登录,却往往遭遇连接拒绝或认证失败。安装完成后的收尾阶段包含两项核心任务:拉起后台 mysqld 守护进程以建立监听套接字,以及执行 mysql_secure_installation 交互脚本以消除出厂预设的安全隐患。完成这两步,MySQL 才算真正具备了安全可用的运行基础。

SVG 配图 1
图 1:从底层守护进程启动到安全脚本初始化的核心推进时序

启动 mysqld 守护进程并验证运行状态

在主流现代 Linux 发行版(如 RHEL、Rocky Linux、CentOS、Debian、Ubuntu 等)中,数据库守护进程由 systemd 统一托管。启动服务只需调用 systemctl 命令。根据系统打包约定的不同,服务名可能是 mysqld(RedHat 系列常用)或 mysql(Debian/Ubuntu 系列常用)。

执行以下命令启动实例,并设置开机自动加载:

# 启动 mysqld 服务
sudo systemctl start mysqld

# 设置系统启动时自动加载 mysqld
sudo systemctl enable mysqld

命令执行后终端不会返回任何提示,这符合 Unix “无报错即成功”的设计哲学。为了确认进程已经就绪,需要立即查看其运行上下文:

sudo systemctl status mysqld

终端会输出类似下方的状态文本,关键在于核对 Active: active (running) 状态行与进程 ID(PID):

● mysqld.service - MySQL Server
     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
     Active: active (running) since Thu 2026-09-17 14:20:10 CST; 25s ago
   Main PID: 3412 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 18721)
     Memory: 412.3M
        CPU: 1.120s
     CGroup: /system.slice/mysqld.service
             └─3412 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
排查提醒:如果状态显示为 failed 或 dead,绝大多数原因是数据目录权限异常(如 /var/lib/mysql 属主不是 mysql:mysql)或 3306 端口被旧残留实例占用。此时应首先查阅日志文件 /var/log/mysqld.log。

获取首次启动生成的临时 root 密码

MySQL 5.7 及以后的版本(包括 MySQL 8.0、8.4 LTS)在安装初始化数据目录(data directory)时,出于安全规范,不会再保留空密码,而是在日志中写入一段随机生成的初始密码。

使用 grep 工具在默认日志文件中过滤临时密码:

sudo grep 'temporary password' /var/log/mysqld.log

控制台将返回对应记录,末尾由特殊字符、大小写字母与数字组成的字符串即为初始密码:

2026-09-17T06:20:08.512401Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: pWd;z#kL9-!x
SVG 配图 2
图 2:mysqld.log 中临时密码文本提取位置示意

如果该日志文件为空或提示不存在,通常是因为系统使用的是 Debian/Ubuntu 的官方仓库包,Debian 系列预设使用 auth_socket 插件验证 root 用户。对于这类发行版,可以通过 sudo mysql 绕过密码直接登入,后续脚本中也可以直接通过操作系统 root 身份完成密码重置。

交互执行 mysql_secure_installation 安全加固脚本

直接暴露未经加固的数据库实例存在极大风险:出厂环境通常带有任何人都能接入的 test 测试库、允许外部地址嗅探的匿名账户,以及只设置了临时凭据的管理员账户。官方提供了 mysql_secure_installation 这一封装工具,通过引导式问答逐项落实防护机制。

直接在终端运行加固入口:

sudo mysql_secure_installation

脚本执行期间将连续触发五个核心安全决策节点,每个阶段的应对依据如下:

1. 凭据核验与密码验证组件(VALIDATE PASSWORD COMPONENT)

启动后首先提示输入当前 root 密码。在此处粘贴此前从日志中检索到的临时密钥(输入时不显示字符属于正常机制)。验证通过后,系统会询问是否安装密码强度验证组件:

Securing the MySQL server deployment.

Enter password for user root: [输入临时密码]

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

如果选择 y,系统会要求选择强度级别:0/LOW(长度不小于8)、1/MEDIUM(要求混杂大小写、数字与特殊符号)或 2/STRONG(外加字典比对)。生产环境强烈建议选择 1 或 2,并立即按照策略设定你的高强度密码。

2. 移除匿名账户(Remove anonymous users)

MySQL 默认保留允许无密码、无有效身份也能连入实例的匿名占位用户。这在测试时方便,但在联网环境下是危险的攻击入口:

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

选择依据:输入 y。必须立刻清除所有匿名用户条目。

3. 禁止 root 账户远程登录(Disallow root login remotely)

管理员账户拥有超级访问权限。如果允许其跨公网或局域网远程认证,将使其直接面临暴力破解与凭据嗅探威胁。生产最佳实践是仅允许 root 从本地环回链路(localhost)访问,应用程序则通过专门分配的最小权限子账户连接:

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

选择依据:输入 y。关闭 root 远程访问通道。

4. 删除测试数据库并刷新访问权限(Remove test database)

初始化生成的 test 数据库及其衍生权限,默认开放给所有连接者自由读写:

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.

选择依据:输入 y。删除多余库并清理其绑定的授权表。

5. 立即重新加载权限表(Reload privilege tables now)

前述所有针对 mysql.user 与权限库的结构性修改,仍驻留在磁盘层。必须触发权限表刷新,才能使变更在活跃的内存缓存中即时生效:

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

选择依据:输入 y。确认后看到 All done! 即表明全套加固规则顺利写入生效。

SVG 配图 3
图 3:mysql_secure_installation 脚本内部安全策略建议选择清单

闭环验证与最终可用性测试

完成安全加固后,必须直接使用新设置的正式凭证进行本地终端登入,以确认旧临时密码失效且新配置生效:

mysql -u root -p

在密码提示中输入你刚才设定的正式密码。登录成功后,终端将进入交互提示符:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.36 MySQL Community Server - GPL

mysql> 

通过执行简单的原生查询,确认全局连接与用户权限隔离状态:

SELECT user, host, plugin FROM mysql.user;

输出结果应当只展示明确受信任的内部核心用户(如 mysql.session、mysql.sys、root),且 root 对应的 host 字段仅为 localhost:

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
SVG 配图 4
图 4:MySQL 实例执行安全脚本前后的运行环境对比

核心配置与状态速查

操作目标 命令 / 文件位置 预期结果
拉起后台服务 sudo systemctl start mysqld 后台守护进程就绪,无报错输出
配置开机自启 sudo systemctl enable mysqld 创建 systemd 符号链接,开机自启生效
运行状态检查 sudo systemctl status mysqld 显示 Active: active (running)
检索初始密码 /var/log/mysqld.log 取得形如 pWd;z#kL9-!x 的临时字符串
安全脚本入口 sudo mysql_secure_installation 引导交互式完成口令变更、删除匿名用户与 test 库
终端登录验证 mysql -u root -p 使用新口令成功进入 mysql> 命令行控制台

到这一步,底层后台进程的自愈托管与基础访问层面的防护已经配置完毕。数据库不仅处于持续稳定的运行状态,而且切断了未授权的匿名探测与默认端口的非本地 root 探测,完成了从“解压安装文件”到“实例安全可用”的关键交付。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。