CentOS 7 搭建 MariaDB 数据库服务

CentOS 7 搭建 MariaDB 数据库服务

1. 服务介绍

MariaDB 是兼容 MySQL 协议的关系型数据库,可集中存储、查询和管理结构化数据,常用于 Web 应用、WordPress、监控平台和认证系统。本实验安装 MariaDB,迁移数据与日志目录,配置远程管理账号,并完成建库、建表、数据导入和自动备份。

2. 准备运行环境

本实验使用以下环境:

| 角色 | IP 地址 | 用途 |

| --- | --- | --- |

| MariaDB 服务端 | 10.1.100.101 | 运行数据库服务 |

| 测试客户端 | 10.1.100.50 | 验证远程连接 |

• 操作系统:CentOS 7.x。

• 操作账号:root 或具备 sudo 权限的管理员。

• 软件源:YUM 可用。

• 磁盘:/data 所在文件系统有足够空间。

• 网络:客户端可访问服务端 TCP 3306 端口。

开始前检查环境:

bash 复制代码
cat /etc/centos-release
uname -r
ip addr
df -h /data
ping -c 3 10.1.100.50

3. 相关知识

• MariaDB 默认监听 TCP 3306;本地客户端也可通过 Unix Socket 连接。

• 迁移数据目录必须先停止服务,并保留原目录备份;直接移动运行中的数据文件可能造成损坏。

skip_name_resolve=ON 可减少反向 DNS 查询,但授权账号必须使用 IP 或网段,不能依赖主机名。

innodb_file_per_table=OFF 会让 InnoDB 表共享系统表空间,删除数据后磁盘空间不容易直接回收。该设置用于复现实验要求,新环境通常保持默认开启。

• 远程访问要同时检查监听地址、数据库授权、防火墙和 SELinux 标签。

• 数据库备份只有经过恢复测试才算有效;生产环境还应设置异机保存、保留周期和备份告警。

• 不建议开放 root 远程登录,应创建独立管理账号并限制来源网段。

4. 实验步骤

4.1 安装并初始化 MariaDB

bash 复制代码
yum install -y mariadb mariadb-server rsync policycoreutils-python
systemctl enable --now mariadb
mysql_secure_installation

按提示设置 root 密码、删除匿名账号、禁止 root 远程登录、删除测试数据库并刷新权限。

4.2 迁移数据库存储目录

先停止服务,再复制原数据目录:

bash 复制代码
systemctl stop mariadb
mkdir -p /data/database
rsync -aHAX /var/lib/mysql/ /data/database/
chown -R mysql:mysql /data/database

保留原目录备份,确认新目录启动正常后再决定是否清理:

bash 复制代码
mv /var/lib/mysql /var/lib/mysql.backup

为新目录设置 SELinux 数据库标签:

bash 复制代码
semanage fcontext -a -t mysqld_db_t '/data/database(/.*)?'
restorecon -Rv /data/database

4.3 配置数据库参数

备份配置文件:

bash 复制代码
cp -a /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.bak
mkdir -p /data/log/mariadb
chown -R mysql:mysql /data/log/mariadb
semanage fcontext -a -t mysqld_log_t '/data/log/mariadb(/.*)?'
restorecon -Rv /data/log/mariadb

编辑 /etc/my.cnf.d/server.cnf,在 [mysqld] 段加入:

ini 复制代码
[mysqld]
datadir=/data/database
socket=/data/database/mysql.sock
innodb_file_per_table=OFF
skip_name_resolve=ON
bind-address=0.0.0.0
log-error=/data/log/mariadb/mariadb.log

[client]
socket=/data/database/mysql.sock

启动服务并检查状态:

bash 复制代码
systemctl start mariadb
systemctl status mariadb --no-pager

4.4 配置防火墙

只允许实验网段访问 TCP 3306:

bash 复制代码
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.1.100.0/24 port port=3306 protocol=tcp accept'
firewall-cmd --reload
firewall-cmd --list-rich-rules

4.5 创建数据库、表和测试数据

登录数据库:

bash 复制代码
mysql -uroot -p

执行以下 SQL:

sql 复制代码
CREATE DATABASE userdb DEFAULT CHARACTER SET utf8mb4;
USE userdb;

CREATE TABLE users (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY uk_username (username)
) ENGINE=InnoDB;

INSERT INTO users (username, email) VALUES
('alice', 'alice@example.com'),
('bob', 'bob@example.com');

SELECT * FROM users;

4.6 从 SQL 文件导入数据

创建 /tmp/userdb_data.sql

sql 复制代码
USE userdb;
INSERT INTO users (username, email) VALUES
('carol', 'carol@example.com'),
('david', 'david@example.com');

执行导入:

bash 复制代码
mysql -uroot -p < /tmp/userdb_data.sql
mysql -uroot -p -e 'SELECT * FROM userdb.users;'

4.7 创建远程管理账号

在 MariaDB 中创建仅允许实验网段登录的管理账号:

sql 复制代码
CREATE USER 'dbadmin'@'10.1.100.%' IDENTIFIED BY 'ChangeThis_StrongPassword!';
GRANT ALL PRIVILEGES ON userdb.* TO 'dbadmin'@'10.1.100.%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'dbadmin'@'10.1.100.%';

生产环境应按业务库和操作类型进一步缩小权限,不要长期授予全库管理权限。

4.8 配置自动备份

创建备份目录和脚本 /usr/local/sbin/backup_mariadb.sh

bash 复制代码
mkdir -p /data/backup/mariadb

cat > /usr/local/sbin/backup_mariadb.sh <<'EOF'
#!/bin/bash
set -e
BACKUP_DIR=/data/backup/mariadb
STAMP=$(date +%F_%H%M%S)
mysqldump --single-transaction --routines --events -uroot -p'RootPassword' userdb | gzip > "$BACKUP_DIR/userdb_$STAMP.sql.gz"
find "$BACKUP_DIR" -type f -name 'userdb_*.sql.gz' -mtime +7 -delete
EOF

chmod 700 /usr/local/sbin/backup_mariadb.sh

生产环境不要把密码直接写进脚本。可把凭据放入权限为 600 的客户端配置文件,再由备份账号执行。

每天凌晨 2:30 执行备份:

bash 复制代码
cat > /etc/cron.d/mariadb_backup <<'EOF'
30 2 * * * root /usr/local/sbin/backup_mariadb.sh >> /var/log/mariadb_backup.log 2>&1
EOF

5. 验证结果

5.1 服务端验证

检查服务、监听端口、数据目录和运行参数:

bash 复制代码
systemctl status mariadb --no-pager
ss -lntp | grep ':3306'
mysql -uroot -p -e 'SELECT VERSION();'
mysql -uroot -p -e "SHOW VARIABLES LIKE 'datadir';"
mysql -uroot -p -e "SHOW VARIABLES LIKE 'socket';"
mysql -uroot -p -e "SHOW VARIABLES LIKE 'innodb_file_per_table';"
mysql -uroot -p -e "SHOW VARIABLES LIKE 'skip_name_resolve';"
mysql -uroot -p -e 'SELECT * FROM userdb.users;'
journalctl -u mariadb -n 50 --no-pager
tail -n 50 /data/log/mariadb/mariadb.log

5.2 客户端验证

10.1.100.50 安装客户端并远程连接:

bash 复制代码
yum install -y mariadb
mysql -h 10.1.100.101 -u dbadmin -p -e 'SELECT * FROM userdb.users;'

客户端能够查询测试数据,说明监听地址、防火墙和账号授权均已生效。

5.3 备份与恢复验证

手动执行一次备份并检查文件:

bash 复制代码
/usr/local/sbin/backup_mariadb.sh
ls -lh /data/backup/mariadb
gzip -t /data/backup/mariadb/userdb_*.sql.gz

将最新备份恢复到测试数据库:

bash 复制代码
mysql -uroot -p -e 'CREATE DATABASE userdb_restore DEFAULT CHARACTER SET utf8mb4;'
zcat /data/backup/mariadb/userdb_*.sql.gz | mysql -uroot -p userdb_restore
mysql -uroot -p -e 'SELECT COUNT(*) FROM userdb_restore.users;'

服务正常、客户端远程查询成功、数据目录和日志目录符合配置,并且备份可以恢复,说明 MariaDB 服务配置完成。

相关推荐
光影6278 小时前
MySQL 进阶篇 —— 事务 / 外键 / 索引 / 高级查询
数据库·笔记·sql·学习·mysql
爬也要爬着前进8 小时前
redis哨兵模式搭建
数据库·redis·bootstrap
小月土星8 小时前
(实战篇)RAG-demo 深度解析:162行代码中的检索增强生成全景 (含Top-k法)
javascript·数据库·llm
皮卡狮8 小时前
进程的地址空间
linux
Darkwanderor9 小时前
动、静态库相关内容的详细介绍
linux·c语言·开发语言·c++
10岁的博客10 小时前
DevEco Code 的 Plan+Build 模式:审方案再执行的技术深度解析
大数据·数据库·人工智能
Web极客码10 小时前
MariaDB 将成为 cPanel 中的默认数据库
服务器·mariadb·cpanel
buhuizhiyuci10 小时前
【算法篇】位运算 —— 基础篇
java·数据库·算法
youtootech10 小时前
HarmonyOS《柚兔学伴》项目实战08-关系型数据库入门——待办事项持久化
jvm·数据库·华为·harmonyos