Ubuntu上怎么安装并加固MariaDB?

文章导读
MariaDB 是一个开源的关系型数据库管理系统,是 MySQL 的流行直接替代品。由原 MySQL 开发者之一 Michael “Monty” Widenius 创建,MariaDB 在保持与 MySQL 完全兼容的同时,提供性能改进、额外的存储引擎,并承诺保持开源。它通常用作 LAMP(Linux、Apache、MySQL/MariaDB、PHP/Python/Perl)堆栈和 LEMP(Li
📋 目录
  1. 介绍
  2. 关键要点
  3. 先决条件
  4. 步骤 1:安装 MariaDB
  5. 步骤 2:配置 MariaDB
  6. 步骤 3:(可选)创建使用密码认证的管理用户
  7. 步骤 4:测试 MariaDB
  8. 步骤 5:基本的 MariaDB 管理命令
  9. 步骤 6:为生产环境加固 MariaDB
  10. 排查常见 MariaDB 问题
A A

介绍

MariaDB 是一个开源的关系型数据库管理系统,是 MySQL 的流行直接替代品。由原 MySQL 开发者之一 Michael “Monty” Widenius 创建,MariaDB 在保持与 MySQL 完全兼容的同时,提供性能改进、额外的存储引擎,并承诺保持开源。它通常用作 LAMP(Linux、Apache、MySQL/MariaDB、PHP/Python/Perl)堆栈和 LEMP(Linux、Nginx、MySQL/MariaDB、PHP)堆栈的数据库组件。

本教程将指导您在 Ubuntu 服务器上安装 MariaDB,保护安装安全,创建具有密码认证的管理用户,并验证数据库服务器是否正常运行。您还将找到故障排除提示和生产部署的安全最佳实践。

已在 Ubuntu 20.04、22.04 和 24.04 上测试。 本指南中的命令适用于所有当前支持的 Ubuntu LTS 版本。Ubuntu 仓库中的默认 MariaDB 版本因发行版而异:Ubuntu 20.04 提供 MariaDB 10.3,Ubuntu 22.04 提供 MariaDB 10.6,Ubuntu 24.04 提供 MariaDB 10.11。无论 Ubuntu 版本或从默认仓库获取的 MariaDB 版本如何,所有安装和配置步骤均保持相同。

此安装的快速版本包括三个步骤:

  • 使用 apt 更新软件包索引
  • 使用 apt 安装 mariadb-server 软件包。该软件包还会拉取用于与 MariaDB 交互的相关工具
  • 运行包含的 mysql_secure_installation 安全脚本以限制对服务器的访问
  1. sudo apt update
  2. sudo apt install mariadb-server
  3. sudo mysql_secure_installation

关键要点

  • MariaDB 可从 Ubuntu 的默认仓库安装,在 Ubuntu 20.04、22.04 和 24.04 上使用 sudo apt install mariadb-server
  • 安装后始终运行 mysql_secure_installation,以移除匿名用户、禁用远程 root 登录并删除测试数据库。
  • 在 Ubuntu 上,MariaDB 的 root 账户默认使用 unix_socket 认证,这意味着您使用 sudo mariadb 登录,而不是密码。这对本地管理更安全。
  • 为需要基于密码的数据库访问的应用程序或工具(如 phpMyAdmin)创建单独的管理用户,并使用密码认证。
  • 使用 systemctl 命令管理 MariaDB 服务:startstoprestartstatus

先决条件

要完成本教程,您需要一台运行 Ubuntu(20.04、22.04 或 24.04)的服务器。该服务器应具有非 root 管理用户,并配置了使用 UFW 的防火墙。请按照 Ubuntu 的初始服务器设置指南进行设置。

如果您第一次处理防火墙规则,在 Ubuntu 上使用 UFW 设置防火墙 教程涵盖了您所需的一切。

步骤 1:安装 MariaDB

Ubuntu 的默认 APT 仓库包含 MariaDB。版本取决于您的 Ubuntu 发行版:

Ubuntu 版本 默认 MariaDB 版本 支持状态
20.04 LTS MariaDB 10.3 2024 年 6 月 EOL
22.04 LTS MariaDB 10.6 支持至 2026 年 7 月
24.04 LTS MariaDB 10.11 支持至 2028 年 2 月

注意: 如果您需要比 Ubuntu 发行版默认提供的更新的 MariaDB 版本,可以添加适用于您 Ubuntu 版本的官方 MariaDB 仓库。对于大多数使用场景,Ubuntu 默认仓库中的版本就足够好了。

首先,使用 apt 更新服务器上的软件包索引:

  1. sudo apt update

然后安装软件包:

  1. sudo apt install mariadb-server

这将安装 MariaDB server 以及客户端工具(mariadbmysqladminmysqldump 等),您将使用这些工具与数据库交互。

如果 MariaDB 未运行,请启动它:

  1. sudo systemctl start mariadb.service

启用 MariaDB 在启动时自动运行:

  1. sudo systemctl enable mariadb.service

默认配置会让您的 MariaDB 安装没有 root 密码,并带有一些不安全的默认设置。下一步将使用包含的安全脚本来解决这个问题。

步骤 2:配置 MariaDB

对于新安装的 MariaDB,下一步是运行包含的安全脚本。此脚本会更改几个不太安全的默认选项,包括移除远程 root 登录和示例用户。

运行安全脚本:

  1. sudo mysql_secure_installation

这会引导你完成一系列提示,你可以更改 MariaDB 安装的安全选项。第一个提示会询问当前数据库 root 密码。由于你尚未设置密码,请按 ENTER 表示“无密码”。

Output
注意:建议对所有用于生产的 MariaDB 服务器运行此脚本的所有部分! 请仔细阅读每个步骤! 为了登录 MariaDB 以对其进行加固,我们需要 root 用户的当前 密码。如果您刚刚安装了 MariaDB,并且 尚未 set 设置 root 密码,则密码为空, 因此您只需在此处按回车键。 Enter current password for root (enter for none):

下一个提示会询问是否要设置数据库 root 密码。在 Ubuntu 上,MariaDB 的 root 账户与自动化系统维护紧密相关,因此不应更改该账户的配置认证方法。这样做可能会导致软件包更新破坏数据库系统,因为它会移除对管理账户的访问。输入 N 然后按 ENTER

Output
. .. . OK, successfully used password, moving on... 设置 root 密码可确保无人能未经适当授权登录 MariaDB root 用户。 Set root password? [Y/n] N

在本教程的后面,你将学习如何为密码访问设置一个单独的管理账户,如果 socket 认证不适合你的用例。

从那里开始,你可以按 Y 然后 ENTER 来接受后续所有问题的默认值。这将移除一些匿名用户和测试数据库、禁用远程 root 登录,并加载这些新规则,以便 MariaDB 立即应用你所做的更改。

理解 unix_socket 认证

在 Ubuntu 上,MariaDB 默认为 root 用户使用 unix_socket 认证,而不是基于密码的认证。这意味着数据库通过你的操作系统用户名和 socket 连接来识别你,而不是要求输入密码。

当你运行 sudo mariadb 时,你的系统会通过 Unix socket 发送你的 OS 凭据,如果这些凭据匹配有效的数据库用户,MariaDB 就会授予访问权限。这种方法有几个好处:

  • root 账户的数据库密码无法被暴力破解
  • 系统级访问控制(谁能运行 sudo)保护数据库
  • 自动化维护脚本如 logrotate 和软件包升级无需在配置文件中存储密码即可继续工作

对于交互式使用和远程访问,请创建具有密码认证的单独用户,第 3 步将介绍这一点。

步骤 3:(可选)创建使用密码认证的管理用户

在运行 MariaDB 的 Ubuntu 系统上,默认情况下 root MariaDB 用户使用 unix_socket 插件进行认证,而不是密码。这种方式在许多情况下提供了更高的安全性和可用性,但当您需要为外部程序(如 phpMyAdmin 或 Web 应用程序)授予管理权限时,也会带来复杂性。

由于服务器使用 root 账户执行日志轮转、启动和停止服务器等任务,因此最好不要更改 root 账户的认证信息。修改 /etc/mysql/debian.cnf 配置文件中的凭据最初可能有效,但软件包更新可能会覆盖这些更改。包维护者建议不要修改 root 账户,而是创建一个单独的管理账户用于基于密码的访问。

为此,创建一个名为 admin 的新账户,该账户具有与 root 账户相同的权限,但配置为使用密码认证。从终端打开 MariaDB 提示符:

  1. sudo mariadb

然后创建一个具有 root 权限并使用密码访问的新用户。将用户名和密码更改为您偏好的值:

  1. GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

刷新权限以确保它们被保存并在当前会话中可用:

  1. FLUSH PRIVILEGES;

完成此操作后,退出 MariaDB shell:

  1. exit

最后,测试 MariaDB 安装。

步骤 4:测试 MariaDB

从默认仓库安装时,MariaDB 会自动启动运行。要测试此功能,请检查其状态:

  1. sudo systemctl status mariadb

您将收到类似于以下的输出:

输出
● mariadb.service - MariaDB 10.6.16 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2026-02-26 13:38:18 UTC; 3min 55s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 25914 (mysqld) Status: "Taking your SQL requests now..." Tasks: 31 (limit: 2345) Memory: 65.6M CGroup: /system.slice/mariadb.service └─25914 /usr/sbin/mysqld . . .

如果 MariaDB 未运行,您可以使用命令 sudo systemctl start mariadb 启动它。

作为额外检查,可以尝试使用 mysqladmin 工具连接到数据库,该工具是一个允许您运行管理命令的客户端。例如,此命令使用 Unix socket 以 root 身份连接到 MariaDB 并返回版本:

  1. sudo mysqladmin version

您将收到类似于此的输出:

输出
mysqladmin Ver 9.1 Distrib 10.6.16-MariaDB, for debian-linux-gnu on x86_64 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Server version 10.6.16-MariaDB-0ubuntu0.22.04.1 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 4 min 49 sec Threads: 7 Questions: 467 Slow queries: 0 Opens: 177 Flush tables: 1 Open tables: 31 Queries per second avg: 1.615

如果您配置了一个使用密码认证的单独管理用户,可以通过输入以下命令执行相同的操作:

  1. mysqladmin -u admin -p version

这确认了 MariaDB 已启动运行,并且您的用户能够成功认证。

步骤 5:基本的 MariaDB 管理命令

MariaDB 安装并运行后,以下是日常管理必需的命令:

命令 描述
sudo systemctl start mariadb 启动 MariaDB 服务
sudo systemctl stop mariadb 停止 MariaDB 服务
sudo systemctl restart mariadb 重启 MariaDB 服务
sudo systemctl status mariadb 检查 MariaDB 是否正在运行
sudo systemctl enable mariadb 设置 MariaDB 开机自启
mariadb --version 显示已安装的 MariaDB 版本
sudo mariadb 以 root 用户打开 MariaDB shell

要检查系统中安装的 MariaDB 版本:

  1. mariadb --version

要查看所有活动数据库:

  1. sudo mariadb -e "SHOW DATABASES;"

步骤 6:为生产环境加固 MariaDB

除了 mysql_secure_installation 脚本外,还有额外的步骤来加固生产环境的 MariaDB 服务器。

限制网络访问

默认情况下,MariaDB 仅监听 localhost (127.0.0.1),这意味着它不接受远程连接。您可以通过检查 MariaDB 配置中的 bind-address 指令来验证这一点:

  1. sudo grep bind-address /etc/mysql/mariadb.conf.d/50-server.cnf
输出
bind-address = 127.0.0.1

如果需要远程数据库访问,请将 bind-address 更改为服务器的私有 IP 地址(生产环境中不要使用 0.0.0.0),并配置防火墙仅允许来自受信任 IP 地址的连接:

  1. sudo ufw allow from trusted_ip_address to any port 3306

警告:bind-address 设置为 0.0.0.0 会使您的数据库暴露给整个互联网。在生产环境中始终限制访问特定 IP 地址或私有网络范围。

审查用户账户

定期审查哪些用户账户可以访问您的数据库:

  1. sudo mariadb -e "SELECT User, Host, plugin FROM mysql.user;"

删除不再需要的账户:

  1. DROP USER 'unused_user'@'host';
  2. FLUSH PRIVILEGES;

启用慢查询日志

慢查询日志有助于识别运行时间过长的查询,这对于性能调优很有用:

  1. sudo mariadb -e "SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2;"

这会记录执行时间超过 2 秒的任何查询。使用以下命令检查日志位置:

  1. sudo mariadb -e "SHOW VARIABLES LIKE 'slow_query_log_file';"

排查常见 MariaDB 问题

以下是安装过程中或安装后可能遇到的问题的解决方案。

MariaDB 无法启动

如果 MariaDB 无法启动,请检查错误日志:

  1. sudo journalctl -u mariadb --no-pager -n 50

常见原因包括:

  • 端口冲突:另一个进程(如 MySQL)正在使用 3306 端口。使用 sudo ss -tlnp | grep 3306 检查。
  • 磁盘空间:数据目录(/var/lib/mysql)需要可用磁盘空间。使用 df -h 验证。
  • 权限问题:MariaDB 数据目录必须由 mysql 用户拥有。使用 sudo chown -R mysql:mysql /var/lib/mysql 修复。

无法连接到 MariaDB

如果收到“访问被拒绝”错误:

  1. 验证 MariaDB 是否正在运行:sudo systemctl status mariadb
  2. 尝试使用 sudo 以 root 身份连接:sudo mariadb
  3. 检查您的用户的身份验证插件:
  1. sudo mariadb -e "SELECT User, Host, plugin FROM mysql.user WHERE User='root';"

如果插件显示为 unix_socket,则必须使用 sudo mariadb 以 root 身份连接。

mysql_secure_installation 报错失败

如果安全脚本失败,通常是因为 MariaDB 服务未运行。先启动它:

  1. sudo systemctl start mariadb
  2. sudo mysql_secure_installation

MariaDB vs MySQL:选择合适的数据库

由于 MariaDB 是 MySQL 的一个分支,你可能想知道该使用哪一个。这里有一个快速比较:

特性 MariaDB MySQL
许可证 GPL(完全开源) GPL + 专有(Oracle)
Ubuntu 默认安装 是(自 20.04 起) 作为单独包提供
存储引擎 InnoDB、Aria、ColumnStore、Spider 等 InnoDB、MyISAM、NDB
JSON 支持 是(某些情况下语法不同)
直接替换 与 MySQL 客户端和协议兼容 N/A
社区开发 由 MariaDB Foundation 社区驱动 由 Oracle 企业驱动

对于大多数 Ubuntu 服务器部署,推荐使用 MariaDB。它包含在默认仓库中,接收及时的安全更新,并保持与 MySQL 工具和库的兼容性。如果你正在构建 LAMP 堆栈,MariaDB 可以作为 MySQL 的直接替代品。

常见问题解答

1. MariaDB 是 MySQL 的直接替换品吗?

是的。MariaDB 被设计为在协议和 API 级别与 MySQL 完全兼容。与 MySQL 合作的应用程序无需修改代码即可与 MariaDB 合作。mysql 命令行客户端、mysqldump 以及 MySQL Connector 等库都适用于两者。MariaDB 还支持相同的 SQL 语法、数据类型和复制协议。

2. 如何在 Ubuntu 上重置 MariaDB root 密码?

如果你使用 unix_socket 认证(Ubuntu 默认),则无需 root 密码。改用 sudo mariadb 连接即可。如果你设置了 root 密码但忘记了,请参考《如何重置 MySQL 或 MariaDB root 密码》指南,该指南将指导你停止服务、不带权限检查启动服务,并重置密码。

3. 为什么 MariaDB 在 Ubuntu 上使用 unix_socket 认证?

Ubuntu 配置 MariaDB 为 root 账户使用 unix_socket 认证,这样系统维护任务(日志轮转、包升级、自动化备份)无需以明文形式存储数据库密码即可运行。这更安全,因为它将数据库访问与你的操作系统用户权限绑定。只有能够运行 sudo 的用户才能访问 MariaDB root 账户。

4. 如何检查安装了哪个版本的 MariaDB?

运行 mariadb --version,或连接到数据库并运行 SELECT VERSION();。输出将显示版本号,例如 Ubuntu 22.04 上的 10.6.16-MariaDB 或 Ubuntu 24.04 上的 10.11.6-MariaDB

5. 我可以在同一 Ubuntu 服务器上同时安装 MariaDB 和 MySQL 吗?

不可以。Ubuntu 上的 MariaDB 和 MySQL 包会冲突,因为它们提供相同的文件并使用相同的端口(3306)。你可以安装其中一个,但不能同时安装两者。如果你需要在它们之间迁移,请使用 mysqldump 导出和导入你的数据库。

结论

在本指南中,你在 Ubuntu 上安装了 MariaDB,使用 mysql_secure_installation 脚本对其进行了加固,并了解了 Ubuntu 上 unix_socket 认证模型的工作原理。你还可以选择创建具有密码认证的独立管理用户,并测试了 MariaDB 服务器以验证一切正常运行。

除了基础内容,本指南还涵盖了基本管理命令、生产环境安全加固、常见问题排查,以及 MariaDB 与 MySQL 的比较。

后续步骤

现在您已经拥有一个运行中且安全的 MariaDB 服务器,以下是一些资源,可帮助您继续构建您的环境:

  • MySQL 或 MariaDB 中导入和导出数据库的方法:学习使用 mysqldump 备份和恢复您的数据库。
  • MySQL 查询简介:练习编写 SQL 查询,包括 SELECT、聚合函数和多表连接。这些查询在 MariaDB 中完全相同。
  • 在 Ubuntu 上安装 LAMP 技术栈:使用 Apache、MariaDB(或 MySQL)和 PHP 构建完整的 Web 应用技术栈。
  • 在 Ubuntu 上安装 Nginx:将 Nginx 设置为您的 Web 服务器,并与 MariaDB 搭配组成 LEMP 技术栈。
  • 在 Ubuntu 上安装 PHP 并设置本地开发环境:配置 PHP 以连接您的 MariaDB 数据库,用于 Web 应用开发。

准备在生产环境中部署 MariaDB 了吗? 托管数据库服务会为您处理资源供应、维护、备份和扩展,让您专注于构建应用。您也可以快速创建一个运行 Ubuntu 的 Droplet,并按照本教程自行设置 MariaDB。