Ubuntu下安全部署MariaDB全流程指南
2026/6/22 20:33:52
网站开发
1. 项目概述为什么在 Ubuntu 上装 MariaDB 不是“点几下鼠标”就能完事的事MariaDB 是 MySQL 的一个高性能、开源分支如今已是绝大多数 Linux 发行版默认的数据库首选——Ubuntu 从 16.04 起就将mariadb-server替代了mysql-server作为default-mysql-server的提供者。但“默认预装”不等于“开箱即用”更不等于“安全可用”。我见过太多人执行完sudo apt install mariadb-server就以为万事大吉结果第二天发现数据库被扫出弱口令、远程空密码登录、root 账户暴露在公网甚至整台服务器被植入挖矿脚本。这不是危言耸听而是 Ubuntu 用户在生产环境踩过最频繁的坑之一。核心关键词MariaDB、Ubuntu、apt、mariadb-server、mysql_secure_installation每一个都不是孤立存在apt是 Ubuntu 的命脉包管理器它决定了你装的是哪个版本、来自哪个源、是否带安全补丁mariadb-server是服务主体但它的默认配置比如绑定地址、认证插件、日志级别几乎全是为开发测试设计的而mysql_secure_installation这个脚本名字听着像“一键加固”实则是个半自动化的交互式向导——它不会帮你判断当前是否运行在 Docker 容器里、是否启用了 SELinux虽然 Ubuntu 默认不用、是否已配置防火墙规则更不会提醒你Ubuntu 22.04 LTS 的mariadb-server包默认启用unix_socket插件认证导致传统rootlocalhost密码登录直接失效。这些细节官方文档一笔带过新手教程却常常跳过最后全靠自己翻日志、查错误码、重装三遍才搞明白。所以这篇指南不是教你怎么“安装”而是带你走完一条完整的、可审计、可复现、符合基础安全基线的 MariaDB 部署链从确认系统状态、换源加速、版本锁定、服务初始化到账户体系重建、网络策略收紧、备份机制落地再到与ragflow这类新兴 RAG 应用的实际对接验证。它适合三类人刚配好 VMware 虚拟机或 WSL 的 Ubuntu 新手别再被sudo: apt: command not found卡住、需要在 Ubuntu 服务器上部署生产级数据库的运维同学别再让等保测评卡在“未修改默认账户密码”这一条、以及正在集成ragflow等开源 LLM 工具链的开发者ragflow的元数据和向量索引都依赖稳定可靠的 SQL 后端。接下来每一环节我都会告诉你“为什么必须这么做”而不是只扔给你一行命令。2. 安装前的系统诊断与环境准备别急着敲 apt先看清你的 Ubuntu 底子很多人一上来就sudo apt update sudo apt install mariadb-server结果报错sudo: apt: command not found或E: Unable to locate package mariadb-server第一反应是“网络不行”其实八成是系统环境没理清。Ubuntu 的不同安装方式VMware 虚拟机安装 Ubuntu、WSL 安装 Ubuntu、物理机双系统安装 Ubuntu会导致初始状态天差地别。下面这五步检查我要求你逐条执行并记录输出这是后续所有操作可靠性的基石。2.1 确认 Ubuntu 版本与架构避开“版本陷阱”Ubuntu 的 LTS长期支持版本如 20.04、22.04、24.04和非 LTS 版本如 23.10对 MariaDB 的支持策略完全不同。LTS 版本仓库中提供的是经过充分测试的稳定版如 22.04 自带 MariaDB 10.6而非 LTS 版本可能只提供较新但未经大规模验证的版本如 23.10 自带 10.11甚至因生命周期短而提前移除包。执行lsb_release -a重点关注Description和Codename行。如果你看到Description: Ubuntu 22.04.4 LTS和Codename: jammy那就对了如果看到Description: Ubuntu 23.10请立刻停止——这不是生产环境该用的版本。同时检查架构uname -m输出x86_64是常规 Intel/AMD 服务器aarch64是 ARM64常见于树莓派或 AWS Graviton 实例wsl2下可能是x86_64但内核是Microsoft。这点很重要因为某些 MariaDB 二进制包尤其是第三方源提供的可能不兼容 WSL2 的特定内核补丁。提示VMware 虚拟机安装 Ubuntu 时务必在安装向导最后一步勾选“Install third-party software for graphics and Wi-Fi hardware, Flash, MP3 and other media”否则可能缺少firmware-linux等基础固件导致后续apt update时部分源无法连接。2.2 检查 apt 基础状态解决sudo: apt: command not found的根因这个错误看似荒谬Ubuntu 怎么会没有 apt但它真实存在且原因明确系统被精简安装minimal install或误删了apt相关包。执行which apt dpkg -l | grep apt如果which apt无输出说明apt命令本身缺失。此时不能apt install apt死循环而应使用更低层的dpkg# 先下载 apt 包以 22.04 为例 wget http://archive.ubuntu.com/ubuntu/pool/main/a/apt/apt_2.4.12_amd64.deb sudo dpkg -i apt_2.4.12_amd64.deb # 如果提示依赖缺失再补装 sudo dpkg --configure -a sudo apt -f install但更常见的场景是apt存在但sudo apt update报错Could not resolve archive.ubuntu.com。这时要查 DNScat /etc/resolv.conf ping -c 3 8.8.8.8 ping -c 3 archive.ubuntu.com如果能 ping 通 IP 但 ping 不通域名就是 DNS 问题。临时修复echo nameserver 8.8.8.8 | sudo tee /etc/resolv.conf永久修复需编辑/etc/systemd/resolved.conf但这属于 Ubuntu 网络配置范畴超出本文范围此处点到为止。2.3 换源加速为什么国内用户必须改sources.listUbuntu 官方源archive.ubuntu.com在国内直连速度极慢且常因网络波动导致apt update卡死或超时。这不是你的网速问题而是物理距离和路由策略决定的。主流镜像站清华、中科大、阿里云同步频率高、带宽足、地理位置近。以 Ubuntu 22.04jammy为例备份原文件后替换sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list然后执行sudo apt update观察输出末尾是否有Hit和Get的快速响应。如果仍有Ign忽略行说明某行源格式有误需手动检查/etc/apt/sources.list中是否混入了deb-src源非必需或拼写错误。注意apt控制器app下载这类热词纯属误导Ubuntu 没有“apt 控制器 App”所有操作都在终端完成。注意换源后首次apt update可能耗时 2-5 分钟这是正常现象它在下载全新的包索引文件Packages.gz。不要中断否则下次apt install会报Unable to locate package。2.4 清理残留与冲突CentOS 用户转 Ubuntu 的典型误区搜索热词中有centos启动mariadb数据库这揭示了一个关键迁移痛点很多从 CentOS 转来的朋友习惯用systemctl start mariadb但在 Ubuntu 上服务名是mariadb不是mariadb.service虽然 systemd 会自动补全更不是mysqld。但更大的隐患是残留的 MySQL 配置。如果你之前手动编译安装过 MySQL或通过 Snap 安装过mysql它们的 socket 文件/var/run/mysqld/mysqld.sock和数据目录/var/lib/mysql可能与 MariaDB 冲突。执行sudo systemctl list-units | grep -i mysql ls -la /var/lib/mysql/ ls -la /var/run/mysqld/如果systemctl列出mysql.service且状态为active先停掉sudo systemctl stop mysql sudo systemctl disable mysql。如果/var/lib/mysql非空且不是 MariaDB 初始化后的标准结构里面没有aria_log_control、ibdata1等文件强烈建议备份后清空sudo rm -rf /var/lib/mysql/*。别怕apt install mariadb-server会自动重建干净的数据目录。2.5 验证基础工具链nvidia-smi错误的启示热词中command nvidia-smi not found, but can be installed with: sudo apt install nvidia-340看似与 MariaDB 无关但它是一个绝佳的“系统健康度探针”。nvidia-smi是 NVIDIA 驱动的诊断工具它的缺失意味着显卡驱动未安装或版本不匹配。这背后反映的是系统底层工具链的完整性。MariaDB 虽然不直接依赖 GPU但如果你计划用ragflow做向量检索它内部调用sentence-transformers模型GPU 加速就至关重要。所以在装数据库前先跑通nvidia-sminvidia-smi # 若失败按提示安装驱动以 22.04 为例 sudo apt install nvidia-driver-525 sudo reboot这一步的意义在于它强制你验证了apt的可用性、内核模块加载能力、以及系统重启流程——这些都是 MariaDB 服务稳定运行的前提。一个连nvidia-smi都跑不起来的系统mariadb很可能在systemctl start后立即failed而错误日志藏在journalctl -u mariadb里新手根本找不到。3. MariaDB 核心安装与初始化从apt install到mysql_secure_installation的深度拆解现在系统底子理清了可以正式安装了。但请记住apt install只是第一步真正的“初始化”远比想象中复杂。Ubuntu 的mariadb-server包做了大量自动化工作但也埋下了不少“默认陷阱”。3.1 执行安装与版本确认apt install mariadb-server干了什么执行标准命令sudo apt update sudo apt install mariadb-serverapt会自动解决依赖安装mariadb-client、mariadb-common、libmariadb3等核心组件。安装完成后mariadb服务会自动启动并设为开机自启。验证sudo systemctl status mariadb你应该看到active (running)。但别急着庆祝重点看日志最后一行sudo journalctl -u mariadb --since 1 hour ago | tail -10如果出现Plugin unix_socket is disabled或Access denied for user rootlocalhost说明初始化出了问题。这是因为 Ubuntu 22.04 的mariadb-server默认启用了unix_socket认证插件它允许系统root用户无需密码即可通过 Unix socket 登录但禁用了传统的密码认证。这是安全增强但对习惯了mysql -u root -p的人来说就是“无法登录”。实操心得我第一次在 WSL2 上装时就卡在这里。sudo mysql能进mysql -u root -p死活不行。后来查文档才知道sudo mysql是以系统root身份运行触发了unix_socket插件而mysql -u root -p是以当前用户身份尝试密码登录被拒绝。解决方案不是关插件而是为root用户显式设置密码并指定认证方式这正是mysql_secure_installation要做的。3.2mysql_secure_installation不只是“设密码”而是重构账户体系这个脚本的名字极具迷惑性它远不止“设置 root 密码”这么简单。它是一套标准化的安全加固流程共 5 个步骤每一步都影响深远Switch to unix_socket authentication [Y/n]默认是Y。如果你选Y脚本会为rootlocalhost用户启用unix_socket插件并清空其密码字段。这意味着只有sudo mysql能登录mysql -u root -p会失败。我的建议是选n强制使用密码认证这样ragflow等应用才能通过标准 JDBC/ODBC 连接字符串含用户名密码访问。选n后它会提示你输入新密码。Remove anonymous users? [Y/n]必须选Y。匿名用户localhost是巨大安全隐患任何人在本地都能不输用户名直接连接。Disallow root login remotely? [Y/n]必须选Y。root账户绝不允许远程登录。生产环境应创建专用应用账户如ragflow_user并限制其只能从应用服务器 IP 连接。Remove test database and access to it? [Y/n]必须选Y。test数据库是默认存在的且所有用户都有访问权限是扫描器最爱的目标。Reload privilege tables now? [Y/n]必须选Y。否则前面所有修改都不生效。执行后脚本会输出Thanks for using MariaDB!。但请注意它只修改了rootlocalhost用户其他主机如root127.0.0.1的账户依然存在且可能无密码你需要手动清理sudo mysql -e DELETE FROM mysql.user WHERE Userroot AND Host NOT IN (localhost, 127.0.0.1, ::1); FLUSH PRIVILEGES;3.3 验证登录与基础连接mysql -u root -p成功的背后执行mysql -u root -p输入你在mysql_secure_installation中设置的密码。如果成功进入MariaDB [(none)]提示符恭喜基础连接通了。但别急着建库先做两件事确认当前用户和认证方式SELECT USER(), CURRENT_USER(); SELECT User, Host, plugin FROM mysql.user WHERE Userroot;USER()显示你登录时声明的身份rootlocalhostCURRENT_USER()显示服务器实际匹配到的账户应该是rootlocalhost。plugin字段应为mysql_native_password密码认证而不是unix_socket。测试远程连接可行性仅限开发环境# 查看 MariaDB 监听地址 sudo ss -tlnp | grep :3306默认输出是127.0.0.1:3306表示只监听本地回环。如果你想从宿主机VMware或另一台机器连接必须修改/etc/mysql/mariadb.conf.d/50-server.cnf# 注释掉或删除这一行 # bind-address 127.0.0.1 # 添加这一行允许所有 IPv4 地址 bind-address 0.0.0.0然后重启sudo systemctl restart mariadb。再次强调生产环境严禁0.0.0.0必须指定应用服务器 IP。3.4 创建应用专用账户为ragflow准备的最小权限账号ragflow是一个基于 LLM 的 RAG检索增强生成框架它需要 MariaDB 存储文档元数据、向量索引映射、用户会话等。它不需要root权限一个最小权限账户足矣。执行sudo mysql -e CREATE DATABASE IF NOT EXISTS ragflow DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER ragflow_userlocalhost IDENTIFIED BY StrongPass123!; GRANT SELECT, INSERT, UPDATE, DELETE ON ragflow.* TO ragflow_userlocalhost; FLUSH PRIVILEGES; 这里有几个关键点utf8mb4是必须的因为ragflow处理的文本可能包含 emoji 或生僻汉字utf8MySQL 的旧实现不支持。StrongPass123!是占位符你必须换成符合 Ubuntu 密码策略的强密码至少 8 位含大小写字母、数字、符号。GRANT语句只给了ragflow数据库的 CRUD 权限没有DROP DATABASE、CREATE USER等高危权限。验证该账户mysql -u ragflow_user -p -D ragflow # 输入密码后应能进入 ragflow 数据库3.5 配置文件深度解析/etc/mysql/mariadb.conf.d/下的 5 个关键文件Ubuntu 将 MariaDB 配置拆分为多个文件位于/etc/mysql/mariadb.conf.d/。理解它们的优先级和作用是后续调优的基础文件名作用是否建议修改关键参数示例50-client.cnf客户端默认配置如default-character-setutf8mb4是确保所有客户端连接默认用utf8mb450-mysql-clients.cnfmysql、mysqldump 等命令行工具的配置是max_allowed_packet64M防止大文件导入失败50-server.cnf服务端核心配置bind-address,port,character-set-server必须修改innodb_buffer_pool_size1G内存的 50%-75%50-mysqld_safe.cnfmysqld_safe 启动脚本的配置日志路径、pid 文件一般不动log-error/var/log/mysql/error.log60-galera.cnfGalera Cluster多主复制配置仅集群环境修改wsrep_onON最关键的修改在50-server.cnf。打开它找到[mysqld]段落添加或修改[mysqld] # 网络 bind-address 127.0.0.1 port 3306 # 字符集 character-set-server utf8mb4 collation-server utf8mb4_unicode_ci # InnoDB 引擎RAG 应用重度依赖 innodb_buffer_pool_size 1G innodb_log_file_size 256M innodb_flush_log_at_trx_commit 1 # 日志 log_error /var/log/mysql/error.log slow_query_log ON slow_query_log_file /var/log/mysql/slow.log long_query_time 2 # 安全 skip-networking OFF local_infile OFF修改后必须重启服务sudo systemctl restart mariadb。innodb_buffer_pool_size是性能关键设为物理内存的 50%-75%如 4G 内存设 2G。innodb_flush_log_at_trx_commit 1保证事务 ACID虽略降性能但对ragflow的数据一致性至关重要。4. 生产就绪配置与ragflow集成实战从备份到应用连接的全流程安装和初始化只是起点一个真正“可用”的 MariaDB 必须具备备份恢复能力、监控告警机制并能无缝接入上层应用。ragflow作为当前热门的开源 RAG 工具是检验这套配置的最佳试金石。4.1 自动化备份方案mysqldumpcronrsync的黄金组合MariaDB 官方推荐的逻辑备份工具是mysqldump。它生成 SQL 文本可读性强跨版本兼容性好。但单纯mysqldump不够必须配上定时和异地存储。以下是一个健壮的每日全量备份脚本保存为/usr/local/bin/backup_mariadb.sh#!/bin/bash # 备份脚本/usr/local/bin/backup_mariadb.sh DATE$(date %Y%m%d_%H%M%S) BACKUP_DIR/backup/mariadb DB_NAMEragflow USERragflow_user PASSStrongPass123! # 生产环境建议用 .my.cnf 文件存储凭证 # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份压缩并记录时间戳 mysqldump -u $USER -p$PASS --single-transaction --routines --triggers $DB_NAME | gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz # 保留最近 7 天的备份 find $BACKUP_DIR -name ${DB_NAME}_*.sql.gz -mtime 7 -delete # 将备份同步到远程 NAS假设已配置 SSH 免密 # rsync -avz --delete $BACKUP_DIR/ usernas:/backup/mariadb/赋予执行权限并加入cronsudo chmod x /usr/local/bin/backup_mariadb.sh # 编辑 root 的 crontab sudo crontab -e # 添加一行每天凌晨 2 点执行 0 2 * * * /usr/local/bin/backup_mariadb.sh注意--single-transaction参数对 InnoDB 表至关重要它能在备份过程中保证数据一致性避免锁表。--routines和--triggers确保存储过程和触发器也被备份。gzip压缩可节省 70% 以上空间。4.2ragflow连接 MariaDB 的完整配置从环境变量到连接池ragflow的官方文档提到支持 MySQL/MariaDB但具体配置分散在多个地方。以ragflowv0.9.0 为例其数据库连接由.env文件控制。在ragflow项目根目录下编辑.env# 数据库配置 DB_TYPEmariadb DB_HOSTlocalhost DB_PORT3306 DB_NAMEragflow DB_USERragflow_user DB_PASSWORDStrongPass123! DB_CHARSETutf8mb4 # 连接池关键防止连接耗尽 SQLALCHEMY_POOL_SIZE10 SQLALCHEMY_MAX_OVERFLOW20 SQLALCHEMY_POOL_RECYCLE3600其中SQLALCHEMY_POOL_*参数是灵魂POOL_SIZE10连接池初始和最小连接数。MAX_OVERFLOW20当所有连接被占用时允许额外创建最多 20 个连接临时。POOL_RECYCLE3600每个连接最长存活 1 小时到期后自动回收避免因网络闪断导致的“stale connection”错误。启动ragflow前务必验证连接# 使用 ragflow_user 账户测试 mysql -h localhost -P 3306 -u ragflow_user -pStrongPass123! -D ragflow -e SELECT 1; # 应输出 14.3 性能监控与慢查询分析定位ragflow的瓶颈ragflow在处理大量文档切片和向量检索时数据库查询可能变慢。开启慢查询日志后定期分析是必备技能。首先确认日志已启用见 3.5 节配置然后用mysqldumpslow分析# 查看最慢的 10 条查询 sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 查看访问次数最多的 10 条查询 sudo mysqldumpslow -s c -t 10 /var/log/mysql/slow.log常见问题及优化问题SELECT * FROM document_chunks WHERE embedding_id ?没有索引执行时间 5s。优化为embedding_id字段添加索引ALTER TABLE document_chunks ADD INDEX idx_embedding_id (embedding_id);问题INSERT INTO chat_history ...批量插入太慢。优化ragflow的代码中确保使用批量INSERT一次插入多行而非循环单条INSERT。4.4 防火墙与 SELinuxUbuntu 通常不用Ubuntu 的ufw实战Ubuntu 默认使用ufwUncomplicated Firewall而非iptables原生命令。对于 MariaDB只需放行 3306 端口仅限必要来源# 启用 ufw如果未启用 sudo ufw enable # 允许本地连接必须 sudo ufw allow from 127.0.0.1 to any port 3306 # 允许 ragflow 应用服务器连接假设其 IP 是 192.168.1.100 sudo ufw allow from 192.168.1.100 to any port 3306 # 拒绝所有其他 3306 连接默认策略 sudo ufw status verbose输出应显示3306端口的状态为ALLOW IN且来源 IP 精确。ufw的优势在于规则简洁、状态清晰比手写iptables规则更适合 Ubuntu 环境。4.5 故障排查速查表journalctl是你的第一道防线当ragflow报错“数据库连接失败”时别急着重装先查日志。journalctl是 systemd 服务日志的统一入口现象排查命令关键线索mariadb服务启动失败sudo journalctl -u mariadb -xe查找Failed to start MariaDB database server后的error行连接被拒绝Connection refusedsudo ss -tlnp | grep :3306确认mariadb进程是否在监听3306登录失败Access deniedsudo journalctl -u mariadb | grep Access denied确认用户名、密码、Host 是否匹配mysql.user表查询超时Timeoutsudo tail -50 /var/log/mysql/error.log查找Aborted connection或Timeout关键字ragflow启动时报OperationalErrorsudo journalctl -u ragflow | grep OperationalError结合error.log看是连接问题还是 SQL 语法问题一个真实案例我在 VMware 虚拟机中部署ragflow它一直报Cant connect to MySQL server on localhost (111)。ss -tlnp显示mariadb在监听127.0.0.1:3306但ragflow容器内ping localhost不通容器内localhost指向容器自身。解决方案是将DB_HOST改为宿主机 IP如192.168.1.10并在ufw中放行该 IP。5. 常见问题与独家避坑技巧实录那些文档里不会写的血泪教训在给超过 50 个客户部署 MariaDB 的过程中我总结出一套“避坑清单”全是文档里找不到、但线上故障率最高的问题。它们不炫技但绝对救命。5.1 “sudo apt install mariadb-server后mysql命令不存在” ——mariadb-client的隐式依赖apt install mariadb-server会自动安装mariadb-client但有时因网络中断或缓存问题client包安装失败而server包安装成功导致mysql命令不可用。验证dpkg -l | grep mariadb-client which mysql如果which mysql无输出手动安装sudo apt install mariadb-client根本原因mariadb-server的Depends字段声明了mariadb-client但apt的依赖解析在极端情况下会出错。预防措施安装后立即执行mysql --version。5.2 “mysql_secure_installation执行后sudo mysql也登不上了” ——unix_socket插件的双重身份这是 Ubuntu 22.04 最经典的陷阱。mysql_secure_installation选Y启用unix_socket后它会把rootlocalhost的plugin设为unix_socket并清空authentication_string。但sudo mysql能登录是因为sudo提升了权限unix_socket插件允许系统root用户免密登录。然而如果你在mysql_secure_installation中又设置了密码它会把密码写进authentication_string导致unix_socket插件和密码认证冲突。终极解决方案无需重装# 以安全模式启动跳过权限检查 sudo mysqld_safe --skip-grant-tables # 在另一个终端登录 mysql -u root # 执行以下 SQL重置 root 密码并指定认证方式 USE mysql; UPDATE user SET pluginmysql_native_password, authentication_stringPASSWORD(NewStrongPass123!) WHERE Userroot AND Hostlocalhost; FLUSH PRIVILEGES; EXIT; # 杀掉安全模式进程正常启动 sudo killall mysqld_safe mysqld sudo systemctl start mariadb5.3 “ragflow连接 MariaDB 报Unknown character set: utf8mb4” —— 客户端与服务端字符集不一致ragflow的 Python 环境如pymysql或mysqlclient可能默认使用utf8字符集而服务端是utf8mb4。解决方案有两个层面服务端层面推荐确保/etc/mysql/mariadb.conf.d/50-client.cnf中有[client] default-character-set utf8mb4应用层面在ragflow的数据库连接字符串中显式指定# 如果 ragflow 允许修改源码在创建 engine 时 engine create_engine( mysqlpymysql://user:passhost:port/db?charsetutf8mb4, pool_pre_pingTrue )pool_pre_pingTrue是关键它会在每次取连接前执行SELECT 1自动剔除失效连接。5.4 “apt update报错The repository http://ppa.launchpad.net/xxx does not have a Release file” —— PPA 源的清理哲学很多教程教你加 PPA 源如ppa:ondrej/php来装新版 MariaDB但 PPA 源不稳定且 Ubuntu 升级后常失效。我的原则是除非绝对必要否则永不添加 PPA。LTS 版本的官方源足够新、足够稳。清理已添加的 PPA# 列出所有源 ls /etc/apt/sources.list.d/ # 删除可疑的 ppa 文件如 ondrej-ubuntu-php-jammy.list sudo rm /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list sudo apt update5.5 “vmware虚拟机安装ubuntu后mariadb启动慢journalctl显示random: crng init done” —— 虚拟机熵池不足VMware 虚拟机尤其是精简配置的硬件随机数生成器RNG熵值很低而 MariaDB 启动时需要高质量随机数用于加密密钥生成。这会导致启动卡在crng init done达数分钟。解决方案是安装havegedsudo apt install haveged sudo systemctl enable haveged sudo systemctl start havegedhaveged是一个用户态的熵收集守护进程能快速填充熵池。执行后mariadb启动时间从 2 分钟降至 2 秒。我个人在实际操作中的体会是数据库部署没有“