在生产环境中,为了安全和更多的数据容量,需要更改mariadb的默认存储位置。

话不多说,直接上实例。

本例中默认的存储位置:/data/mysql

1、安装mariadb

sudo dnf install mariadb-server -y

2、创建数据存储目录并赋予权限
sudo mkdir -p /data/mysql
sudo chown -R mysql:mysql /data/mysql
sudo chmod -R 750 /data/mysql
3、修改mariadb的配置文件 /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
datadir=/data/mysql  
socket=/var/lib/mysql/mysql.sock
log-error=/data/mysql/mariadb.log
pid-file=/run/mariadb/mariadb.pid
4、启动mariadb服务,进行测试
sudo systemctl start mariadb.service
### 结果启动失败,查看详细信息:
journalctl -xeu mariadb.service
6月 16 09:40:58 localhost.localdomain mariadbd[14030]: 2026-06-16  9:40:58 0 [ERROR] Aborting
6月 16 09:40:58 localhost.localdomain systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
Subject: Unit process exited
Defined-By: systemd
Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
An ExecStart= process belonging to unit mariadb.service has exited.
The process' exit code is 'exited' and its exit status is 1.
6月 16 09:40:58 localhost.localdomain systemd[1]: mariadb.service: Failed with result 'exit-code'.
Subject: Unit failed
Defined-By: systemd
Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
5、修改SELinux策略,允许mariadb服务访问/data/mysql目录

添加持久化的 SELinux 上下文规则 使用 semanage 将你的自定义数据目录及其所有子文件标记为数据库类型(假设你的数据目录是 /data/mysql)

sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"

sudo restorecon -Rv /data/mysql
6、重启mariadb服务,测试成功
sudo systemctl restart mariadb
sudo systemctl status mariadb
● mariadb.service - MariaDB 10.5.29 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; preset: disabled)
     Active: active (running) since Tue 2026-06-16 10:12:55 CST; 6s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 25747 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS)
    Process: 25777 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
    Process: 25831 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS)
   Main PID: 25814 (mariadbd)
     Status: "Taking your SQL requests now..."

** 在服务状态里有警告 (一般可以忽略)

(mariadbd)[25814]: mariadb.service: Referenced but unset environment variable evaluates to an empty string: MYSQLD_OPTS, _WSREP_NEW_CLUSTER

**

# 手动创建配置文件
sudo mkdir -p /etc/systemd/system/mariadb.service.d/
sudo nano /etc/systemd/system/mariadb.service.d/override.conf

# 将如下内容写入override.conf
[Service]
Environment="MYSQLD_OPTS="
Environment="_WSREP_NEW_CLUSTER="


# 确保文件权限正确
sudo chown root:root /etc/systemd/system/mariadb.service.d/override.conf
sudo chmod 644 /etc/systemd/system/mariadb.service.d/override.conf


#重新加载,配置生效
sudo systemctl daemon-reload
sudo systemctl restart mariadb

重启mariadb服务后,警告消失!

sudo systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
重启服务器后,测试mariadb正常启动。

总结:不关闭SELinux时,配置比较复杂一些。为了安全!!!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐