Linux 上的 MariaDB:它是什么、如何安装(Ubuntu/CentOS/Debian)以及安全配置

1. 什么是 MariaDB?

MariaDB 的概述与关键特性

MariaDB 是一款开源的关系型数据库管理系统(RDBMS)。它基于 MySQL 开发,因其高度兼容性而被广泛应用于众多系统和应用中。

最初,MySQL 被 Oracle 收购后,一些开发者分支出来并启动了 MariaDB 项目。因此,MariaDB 保留了与 MySQL 类似的指令集和数据结构,同时在设计上强调开放性和透明性。

MariaDB 免费使用,支持商业和非商业用途的各种场景。尤其在 Linux 服务器环境中,它以稳定性、性能和安全性著称,拥有良好的口碑。

与 MySQL 的区别

MariaDB 与 MySQL 非常相似,许多指令和配置文件可以直接使用。但两者之间仍存在若干重要差异。

  • 授权许可差异 由于 MySQL 由 Oracle 开发和管理,在某些商业使用场景下可能受到授权限制。MariaDB 则基于 GPL(GNU 通用公共许可证),使用更为灵活。
  • 开发速度与社区驱动方式 MariaDB 采用社区驱动的积极开发模式,往往更快引入新特性。它在面向企业的功能(如存储引擎选项和性能优化)方面尤为强大。
  • 可扩展性与兼容性 MariaDB 在保持与 MySQL 高度兼容的同时,也提供了自己的存储引擎(如 Aria 和 ColumnStore),可根据使用场景灵活操作。但随着版本演进,兼容性差异可能出现,迁移时需谨慎。

选择 MariaDB 的优势

在 Linux 环境部署数据库时,MariaDB 具备以下优势:

  • 安装简便,配置简单
  • 轻量且性能出色
  • 可扩展,能够处理大规模数据处理
  • 长期运行稳定
  • 全球开发者提供的丰富知识和支持资源

基于以上原因,MariaDB 被广泛用于从个人开发环境到企业生产系统的各种场景。

2. 安装前的准备工作

在 Linux 环境中安装 MariaDB 之前,需要确认若干要点并完成相应的准备工作。跳过此步骤可能导致后续问题,因此提前准备非常重要。

检查系统需求

MariaDB 是轻量且高速的数据库,但仍有最低系统需求。以下为一般性指南(具体需求会随版本和使用方式而异):

  • 操作系统:Ubuntu、Debian、CentOS、RHEL 等 Linux 发行版
  • CPU:1GHz 以上(推荐多核)
  • 内存:512 MB 以上(推荐 1 GB 以上)
  • 存储:1 GB 以上可用空间(根据数据量需求自行调整)
  • 网络:需要互联网连接以获取软件包并进行更新

请注意,在较旧的 Linux 发行版上,可能不支持最新的 MariaDB 版本。检查你的 Linux 版本,如有必要,添加相应的仓库或采取其他措施。

验证并更新所需软件包

安装 MariaDB 通常使用操作系统的标准包管理器(如 APT 或 YUM)。提前更新系统有助于避免依赖问题。

以下是 Ubuntu/Debian 的示例:

sudo apt update
sudo apt upgrade -y

在 CentOS/RHEL 上,运行以下命令:

sudo yum update -y

此外,请确认已安装以下软件包(若缺失请先安装):

  • curl:在添加 MariaDB 仓库时使用
  • gnupg:用于验证签名密钥
  • software-properties-common(主要针对 Ubuntu):用于管理 PPA。Debian 上并非总是必需的

考虑使用官方 MariaDB 仓库

在许多 Linux 发行版中,MariaDB 已包含在默认的软件仓库中,但提供的版本可能较旧。

如果希望始终使用最新的稳定版,可以添加官方 MariaDB 仓库。下一节将介绍针对不同操作系统的步骤,提前决定要使用的版本可以使安装过程更顺畅。

3. 按主要发行版的安装步骤

MariaDB 在众多 Linux 发行版上都有提供,但安装方式略有差异。本节将针对三种具有代表性的发行版——Ubuntu、CentOS 和 Debian——详细演示安装步骤。

在 Ubuntu 上安装 MariaDB

在 Ubuntu 上,使用 APT 包管理器安装 MariaDB。本节针对 Ubuntu 20.04 / 22.04 LTS。

1. 更新软件包列表

sudo apt update

2. 安装 MariaDB

sudo apt install mariadb-server -y

该命令会自动安装 MariaDB 及其所需的依赖包。

3. 启动并设置开机自启

sudo systemctl start mariadb
sudo systemctl enable mariadb

4. 验证是否正在运行

sudo systemctl status mariadb

如果看到 “active (running)”,说明已成功启动。

在 CentOS 上安装 MariaDB

在 CentOS 7 和 CentOS Stream 8 上,使用 YUM 或 dnf。由于默认仓库通常提供的版本较旧,常需要添加官方仓库。

1. 添加官方仓库(示例:MariaDB 10.6)

sudo vi /etc/yum.repos.d/MariaDB.repo

粘贴以下内容并保存:

[mariadb]
name = MariaDB
baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.6/yum/centos7-amd64
gpgkey=https://downloads.mariadb.com/MariaDB/MariaDB-Server-GPG-KEY
gpgcheck=1

根据你的环境需要调整版本和操作系统设置。

2. 安装软件包

sudo yum install mariadb-server -y

或在 CentOS Stream 8 及更高版本上:

sudo dnf install mariadb-server -y

3. 启动并设置开机自启

sudo systemctl start mariadb
sudo systemctl enable mariadb

在 Debian 上安装 MariaDB

Debian 同样使用 APT,但通过官方 MariaDB 仓库而非默认仓库,可安装最新的稳定版。

1. 安装依赖软件包

sudo apt install curl software-properties-common gnupg -y

2. 添加 MariaDB 仓库(示例:Debian 11 “Bullseye”)

curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

3. 安装

sudo apt update
sudo apt install mariadb-server -y

4. 启动并设置开机自启

sudo systemctl start mariadb
sudo systemctl enable mariadb

4. 字符集配置

在日语环境中使用 MariaDB 时,最重要的点之一是配置 字符集(编码)。由于日语包含多字节字符,若使用不正确的设置启动,可能导致乱码或数据损坏等问题。

推荐的日语环境字符集:UTF-8

对于 MariaDB,推荐使用 utf8mb4 字符集。它比传统的 utf8 更强大,支持 4 字节字符(如表情符),因此不仅适用于日语,也适合多语言环境。

在 MySQL 系列的默认设置中,常见 latin1utf8,若保持不变可能会出现问题。因此,请在安装后立即将设置改为 utf8mb4

如何编辑配置文件(my.cnf

MariaDB 的配置文件通常位于 /etc/mysql/my.cnf/etc/my.cnf。请按如下所示添加或编辑 [client][mysqld] 部分。

[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

更改设置后,重启 MariaDB 以使其生效:

sudo systemctl restart mariadb

Verify the Settings Were Applied

连接到 MariaDB 并确认设置已生效。

sudo mariadb

连接后,运行以下命令:

SHOW VARIABLES LIKE 'character\_set%';

Expected example output:

character_set_client    utf8mb4
character_set_connection utf8mb4
character_set_database   utf8mb4
character_set_results    utf8mb4
character_set_server     utf8mb4

如果输出如示例所示,则字符集配置已正确应用。

Note: Character Sets for Existing Data

如果已有数据库或表,它们的字符集不会自动更改。如有需要,必须使用如下 ALTER 语句逐个修改:

ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

同样,也可以在表或列级别更改设置。

5. Security Configuration

在安装 MariaDB 后,安全性尚未完全加固。通过在投入生产前应用最小必要的安全设置,可以降低未授权访问和数据泄露的风险。本节介绍 MariaDB 基本的安全配置步骤。

Run mysql_secure_installation

MariaDB 提供了一个安全加固脚本,应在安装后立即运行:mysql_secure_installation

使用以下命令运行它:

sudo mysql_secure_installation

运行时,会依次显示多个问题。以下是每个选项的含义。

  1. 设置(或更新)root 密码 → 为 MariaDB 管理员用户 “root” 设置密码。请使用强密码。
  2. 删除匿名用户 → 默认情况下可能存在“匿名”用户。这既不必要也有风险,建议删除
  3. 禁止远程 root 登录 → 允许 root 直接从外部网络登录极其危险。大多数情况下,应设置为禁止
  4. 删除 test 数据库 → 为测试创建的 “test” 数据库在多数情况下也没有必要。建议删除
  5. 重新加载权限表 → 立即应用上述更改。确认选择 “Yes”

回答完所有这些问题后,MariaDB 的默认初始安全状态将得到显著加强。

Firewall Configuration (If Needed)

MariaDB 通常使用 3306 端口进行通信。是否打开该端口取决于系统的使用方式。

  • 本地使用或在独立服务器上 → 可以保持 3306 端口关闭。
  • 允许外部访问(例如,从另一台服务器的应用连接) → 仅为所需的 IP 地址开放访问。

示例:在 Ubuntu 上使用 UFW 限制访问

sudo ufw allow from 192.168.0.10 to any port 3306

Create a User Other Than root (Recommended)

在生产环境中,最佳实践是创建并使用专用的用户账户,而不是管理员用户 “root”。以下是示例:

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

为每个应用使用单独的用户有助于在凭据泄露时将影响降至最低。

6. Verification

在安装 MariaDB、完成初始配置并应用安全措施后,最后一步是验证一切是否正常工作。本节说明如何确认连接并运行基本的 SQL 命令。

Connect to MariaDB

安装完成后,使用以下命令验证是否能够连接到 MariaDB:

sudo mariadb

或者,如果你想指定用户并提供密码:

mariadb -u root -p

系统提示时,输入在 mysql_secure_installation 中设置的密码。

如果登录成功,你会看到类似下面的提示符:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.6.16-MariaDB MariaDB Server

只要出现此提示,说明 MariaDB 正常运行,已成功连接。

创建数据库

接下来,作为一个简单的测试,创建一个数据库。

CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

如果执行成功,说明数据库已创建且没有问题。

检查你拥有的数据库列表:

SHOW DATABASES;

如果出现 testdb,则说明创建成功。

创建表并插入数据

创建一个测试表并插入一些数据。

USE testdb;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

INSERT INTO users (name, email) VALUES ('田中太郎', 'taro-tanaka@example.com');

※此示例用于验证使用 utf8mb4 存储的多字节(日文)文本是否正确保存。

检索数据

要确认插入的数据,运行以下查询。

SELECT * FROM users;

如果输出中显示了 Taro Tanaka 的信息,则可以确认数据库工作正常。

检查服务器信息

如果想查看 MariaDB 版本等基本信息,运行以下命令:

STATUS;

该命令会显示连接状态、服务器版本以及字符集配置等详细信息。

7. FAQ(常见问题解答)

在 Linux 环境下安装和使用 MariaDB 时,许多人会遇到常见的问题或疑问。提前了解处理方法可以更有信心。下面我们为初学者到中级用户整理了常见搜索点,以 FAQ 形式呈现。

Q1. 如何查看 MariaDB 版本?

连接到 MariaDB 后,运行以下命令即可查看版本:

SELECT VERSION();

或者,也可以直接在命令行中使用:

mariadb --version

示例输出:

mariadb  Ver 15.1 Distrib 10.6.16-MariaDB, for Linux (x86_64)

Q2. 安装过程中出现 “Package not found” 应该怎么办?

检查以下几点:

  • 软件包列表未更新 → 运行 sudo apt updatesudo yum update,然后重新尝试
  • 官方 MariaDB 仓库未正确添加 → 检查仓库配置文件(如 /etc/apt/sources.list.d//etc/yum.repos.d/
  • 你的发行版与 MariaDB 版本不兼容 → 重新查看 MariaDB 官方 Download page 上支持的版本

Q3. 如何卸载 MariaDB?

针对 Ubuntu/Debian:

sudo apt remove --purge mariadb-server mariadb-client -y
sudo apt autoremove -y

针对 CentOS/RHEL:

sudo yum remove mariadb-server -y

之后,如果还想删除数据和配置文件,执行以下命令:

sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf /etc/mysql

*如果有重要数据,请务必在删除前做好备份。

Q4. 如何备份和恢复数据库?

备份(生成转储文件):

mysqldump -u root -p your_database > backup.sql

恢复:

mysql -u root -p your_database < backup.sql

此方法简单常用,对 MariaDB 迁移和灾难恢复非常有帮助。

Q5. 为什么无法从服务器外部连接到 MariaDB?

可能的原因包括:

  • bind-address 被设置为 127.0.0.1 → 在 /etc/mysql/my.cnf/etc/my.cnf 中,将其改为 bind-address = 0.0.0.0(注意安全)
  • 端口 3306 被防火墙阻止 → 使用类似 sudo ufw allow 3306 的命令打开该端口
  • 用户不被允许进行远程连接 → 需要创建形如 user@'%' 的用户