在生产环境中,为了安全和更多的数据容量,需要更改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/mysql3、修改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.pid4、启动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-devel5、修改SELinux策略,允许mariadb服务访问/data/mysql目录
添加持久化的 SELinux 上下文规则 使用 semanage 将你的自定义数据目录及其所有子文件标记为数据库类型(假设你的数据目录是 /data/mysql)
sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" sudo restorecon -Rv /data/mysql6、重启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时,配置比较复杂一些。为了安全!!!