MariaDB 数据库环境搭建与基础管理完全指南

MariaDB 数据库环境搭建与基础管理完全指南

Someone Lv5

前言

MariaDB 是由 MySQL 原班人马打造的开源关系型数据库管理系统,兼容 MySQL 协议,在性能、存储引擎和安全性上均有显著提升。无论是个人博客、Web 应用还是中小型企业项目,MariaDB 都是极其可靠的数据库选择。本文将手把手教你从零搭建 MariaDB 环境,并掌握日常管理必备技能。

一、MariaDB vs MySQL:为什么选择 MariaDB

MariaDB 是 MySQL 的一个分支,由 MySQL 的创始人 Michael Widenius 主导开发。两者高度兼容,但 MariaDB 有以下优势:

特性MariaDB (10.11+)MySQL (8.0+)
存储引擎InnoDB + Aria + MyRocks + Spider + ColumnStore 等多引擎InnoDB (主要) + MyISAM + NDB
查询优化器更智能的子查询优化、表下推优化标准优化器
线程池内置,高并发性能更好企业版专属
加密功能内置数据静态加密企业版专属
Flashback支持 DDL/DML 回滚不支持
JSON 处理兼容 JSON + 虚拟列优化原生 JSON 类型
许可协议GPL v2,完全开源GPL v2 + 商业授权
KILL 语句支持 KILL 多条语句一次只能 KILL 一条

如果你的项目原本使用 MySQL,通常可以直接将后端数据库连接指向 MariaDB,无需修改代码——协议完全兼容。

二、环境准备

2.1 查看系统信息

1
2
3
4
5
6
7
8
9
10
11
# 查看操作系统版本
cat /etc/os-release

# 查看 CPU 架构(amd64/arm64)
uname -m

# 检查内存(MariaDB 推荐 1GB 以上)
free -h

# 检查磁盘空间(数据目录建议 10GB 以上)
df -h

2.2 系统更新

1
2
3
4
sudo apt update && sudo apt upgrade -y   # Debian/Ubuntu
# 或
sudo yum update -y # CentOS/RHEL 7
sudo dnf update -y # CentOS/RHEL 8+/Fedora

三、安装 MariaDB

3.1 通过官方仓库安装(推荐)

Ubuntu/Debian 系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 导入 MariaDB 官方 GPG 密钥
sudo apt install -y software-properties-common
curl -sS https://mariadb.org/mariadb_release_signing_key.asc | gpg --dearmor | sudo tee /usr/share/keyrings/mariadb-keyring.gpg > /dev/null

# 添加 MariaDB 官方源
sudo tee /etc/apt/sources.list.d/mariadb.sources << EOF
# MariaDB 10.11 LTS 源(推荐稳定版本)
X-Repolib-Name: MariaDB
Types: deb
URIs: https://mirror.mariadb.org/repo/10.11/ubuntu
Suites: $(lsb_release -sc)
Components: main
Architectures: amd64
Signed-By: /usr/share/keyrings/mariadb-keyring.gpg
EOF

# 安装 MariaDB
sudo apt update
sudo apt install -y mariadb-server mariadb-client

CentOS/RHEL 8+ 系统:

1
2
3
4
5
6
7
8
9
10
11
12
# 添加 MariaDB 官方仓库
cat << EOF | sudo tee /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirror.mariadb.org/yum/10.11/rhel/\$releasever/\$basearch
module_hotfixes = 1
gpgkey = https://mariadb.org/mariadb_release_signing_key.asc
gpgcheck = 1
EOF

# 安装 MariaDB
sudo dnf install -y MariaDB-server MariaDB-client

3.2 通过系统包管理器安装(快速方式)

1
2
3
4
5
# Ubuntu/Debian
sudo apt install -y mariadb-server mariadb-client

# CentOS/RHEL 7
sudo yum install -y mariadb-server mariadb

注意:系统包管理器中的 MariaDB 版本可能较旧,生产环境推荐使用官方源安装最新 LTS 版本。

四、初始化配置

4.1 启动 MariaDB 服务

1
2
3
4
5
6
7
8
9
10
11
# 启动 MariaDB
sudo systemctl start mariadb

# 设置开机自启
sudo systemctl enable mariadb

# 检查运行状态
sudo systemctl status mariadb

# 确认端口监听(默认 3306)
sudo ss -tlnp | grep 3306

4.2 安全初始化脚本

MariaDB 安装后会自动运行 mysql_secure_installation 来提升安全性:

1
sudo mysql_secure_installation

该脚本会依次要求你设置:

  1. 输入 root 密码:初次安装直接回车(密码为空)
  2. 设置 root 密码:输入 Y 并设置强密码
  3. 移除匿名用户:输入 Y
  4. 禁止 root 远程登录:输入 Y(运维管理时可设为 N)
  5. 移除 test 测试库:输入 Y
  6. 重新加载权限表:输入 Y

4.3 验证安装

1
2
3
4
5
# 通过 Unix Socket 登录(无需密码,使用系统 root 权限)
sudo mariadb -u root

# 或使用新设的密码登录
mysql -u root -p

登录成功后应看到类似输出:

1
2
3
4
5
6
7
8
9
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 45
Server version: 10.11.9-MariaDB-1:10.11.9+maria~ubu2204 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

五、基础配置优化

5.1 配置文件结构

MariaDB 的主要配置文件路径:

1
2
3
4
5
6
/etc/mysql/mariadb.conf.d/        # Ubuntu 下推荐位置
├── 50-server.cnf # 服务器配置
└── 50-client.cnf # 客户端配置

/etc/my.cnf # CentOS 下主配置文件
/etc/my.cnf.d/ # 扩展配置目录

5.2 核心配置项优化

编辑配置文件(以 Ubuntu 为例):

1
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

推荐调整以下参数(根据服务器内存大小调整):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[mysqld]
# 基本设置
port = 3306
bind-address = 127.0.0.1 # 仅本地监听,生产环境推荐
# bind-address = 0.0.0.0 # 允许远程连接(需配置防火墙)

# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# InnoDB 配置
innodb_buffer_pool_size = 512M # 设为可用内存的 50%-70%
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2 # 性能优先(安全要求高可设为 1)
innodb_file_per_table = 1

# 连接配置
max_connections = 151
max_allowed_packet = 64M

# 日志配置
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 2

# 临时表配置
tmp_table_size = 32M
max_heap_table_size = 32M

修改后重启服务使配置生效:

1
sudo systemctl restart mariadb

5.3 验证配置生效

1
2
3
4
5
-- 登录 MariaDB 后查看关键配置参数
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'slow_query_log';

六、数据库日常管理

6.1 数据库与用户管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 查看所有数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE myblog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户(仅允许本地登录)
CREATE USER 'bloguser'@'localhost' IDENTIFIED BY 'StrongPassword123!';

-- 创建用户(允许任意 IP 远程登录,谨慎使用)
CREATE USER 'bloguser'@'%' IDENTIFIED BY 'StrongPassword123!';

-- 授权用户访问指定数据库
GRANT ALL PRIVILEGES ON myblog.* TO 'bloguser'@'localhost';

-- 仅授予基本权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myblog.* TO 'bloguser'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

-- 查看用户权限
SHOW GRANTS FOR 'bloguser'@'localhost';

-- 删除用户
DROP USER 'bloguser'@'localhost';

6.2 数据表管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 切换到数据库
USE myblog;

-- 创建示例表
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
author VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
status ENUM('draft', 'published', 'deleted') DEFAULT 'draft',
INDEX idx_status (status),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 查看表结构
DESC articles;

-- 查看建表语句
SHOW CREATE TABLE articles;

6.3 数据备份与恢复

方法一:使用 mysqldump(逻辑备份,推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 备份单个数据库
sudo mysqldump -u root -p myblog > /backup/myblog_$(date +%Y%m%d_%H%M%S).sql

# 备份所有数据库
sudo mysqldump -u root -p --all-databases > /backup/alldb_$(date +%Y%m%d).sql

# 恢复数据库
sudo mysql -u root -p myblog < /backup/myblog_20260608.sql

# 压缩备份(节省磁盘空间)
sudo mysqldump -u root -p myblog | gzip > /backup/myblog_$(date +%Y%m%d).sql.gz
# 恢复压缩的备份
gunzip < /backup/myblog_20260608.sql.gz | sudo mysql -u root -p myblog

方法二:使用 mariabackup(物理备份,适合大数据库)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装 mariabackup
sudo apt install -y mariadb-backup

# 完整备份
sudo mariabackup --backup --target-dir=/backup/mariabackup/full --user=root --password=yourpassword

# 准备备份(应用日志)
sudo mariabackup --prepare --target-dir=/backup/mariabackup/full

# 恢复备份
sudo systemctl stop mariadb
sudo rm -rf /var/lib/mysql/*
sudo mariabackup --copy-back --target-dir=/backup/mariabackup/full
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mariadb

6.4 定时自动备份

使用 crontab 设置每天凌晨自动备份并保留最近 7 天的备份文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 创建备份脚本
sudo tee /usr/local/bin/mariadb-backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DB_NAME="myblog"
DB_USER="root"
DB_PASS="yourpassword"
RETENTION_DAYS=7
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$BACKUP_DIR"

# 执行备份
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"

# 删除 7 天前的旧备份
find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +$RETENTION_DAYS -delete

# 记录日志
echo "[$(date)] Backup completed: ${DB_NAME}_${DATE}.sql.gz" >> /var/log/mariadb-backup.log
EOF

sudo chmod +x /usr/local/bin/mariadb-backup.sh

# 添加到 crontab(每天凌晨 3 点执行)
sudo crontab -e
# 添加以下行:
0 3 * * * /usr/local/bin/mariadb-backup.sh

6.5 性能监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- 查看当前连接数
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;

-- 查询运行时间与状态
SHOW STATUS LIKE 'Uptime';
SHOW STATUS LIKE 'Questions';
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Slow_queries';

-- 查看表大小
SELECT
TABLE_SCHEMA AS '数据库',
TABLE_NAME AS '表名',
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '大小 (MB)',
TABLE_ROWS AS '行数'
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'myblog'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;

七、安全管理

7.1 防火墙配置

如果允许远程连接,务必限制来源 IP:

1
2
3
4
5
# 允许特定 IP 访问 MySQL 端口
sudo ufw allow from 192.168.1.100 to any port 3306

# 或仅允许内网段访问
sudo ufw allow from 10.0.0.0/8 to any port 3306

7.2 密码策略强化

1
2
3
4
5
6
7
8
-- 设置密码复杂度(MariaDB 10.6+ 支持)
INSTALL SONAME 'simple_password_check';

-- 查看密码策略参数
SHOW VARIABLES LIKE 'simple_password_check%';

-- 设置密码最小长度 8 位
SET GLOBAL simple_password_check_minimal_length = 8;

7.3 日志审计

1
2
3
4
5
6
7
# 启用通用查询日志(仅调试时开启,生产环境慎用)
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
# 添加:
general_log = 1
general_log_file = /var/log/mysql/mariadb-general.log

sudo systemctl restart mariadb

八、常见问题排查

问题可能原因解决方案
无法连接数据库服务未启动或端口被防火墙拦截systemctl status mariadb 检查服务状态;ufw status 检查防火墙规则
Access denied for user密码错误或用户权限不足sudo mysql -u root 登录后 SHOW GRANTS 检查权限;或使用 SET PASSWORD 重设密码
表损坏修复异常断电或硬件故障CHECK TABLE tablename; 检查;REPAIR TABLE tablename; 修复;备份后 mariabackup --prepare 恢复
磁盘空间不足二进制日志或慢查询日志过大PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY; 清理旧日志
连接数耗尽应用未正确关闭连接检查 SHOW PROCESSLISTKILL id; 清理僵尸连接;优化应用连接池
慢查询缺少索引或查询语句低效查看慢查询日志;EXPLAIN SELECT ... 分析执行计划;添加合适索引

九、卸载 MariaDB

如果需要卸载重建:

1
2
3
4
5
6
7
8
9
10
11
12
# Ubuntu/Debian
sudo systemctl stop mariadb
sudo apt purge -y mariadb-server mariadb-client mariadb-common
sudo rm -rf /var/lib/mysql # 删除数据目录(确认已备份)
sudo rm -rf /etc/mysql # 删除配置文件
sudo rm -rf /var/log/mysql # 删除日志文件

# CentOS/RHEL
sudo systemctl stop mariadb
sudo dnf remove -y MariaDB-server MariaDB-client
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf /etc/my.cnf.d

总结

本文从 MariaDB 的安装、初始化配置、日常管理到安全加固与故障排查,覆盖了数据库运维的核心场景。掌握这些技能后,你可以:

  1. 快速部署 MariaDB 数据库服务
  2. 安全管理 用户权限与数据访问
  3. 自动化备份 确保数据安全
  4. 性能调优 满足生产环境需求
  5. 故障排查 快速定位和解决问题

对于生产环境,建议额外配置主从复制以实现高可用,或结合 ProxySQL 实现读写分离。后续我们可以深入探讨这些进阶话题。

本文由AI辅助生成,内容仅供参考

  • 标题: MariaDB 数据库环境搭建与基础管理完全指南
  • 作者: Someone
  • 创建于 : 2026-06-08 09:04:00
  • 更新于 : 2026-06-18 08:39:57
  • 链接: https://demo-blog.qusite.cn/2026-06-08-mariadb-setup-guide/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。