之前完成了 Apache 的安装配置,实现了 Web 服务器的基础服务,可以通过纯 HTML 搭建一个简单的网站。但如果要使用动态网站模板(如 WordPress, Typecho),就需要配置数据库服务。这里我们选择 MariaDB(MySQL 的开源分支)。

        同样,为了方便操作,我把所有步骤写到了一个可执行文件内,下载后执行即可:

wget https://blog.nyankowo.com/bash/installmariadb.sh && chmod +x installmariadb.sh  && bash installmariadb.sh

1. 删除原数据库

        CentOS 等系统通常会自带一个最小安装的 MariaDB 库,为了防止冲突,如果有需要先把系统自带的删除:

# 查找并删除旧的配置文件
find -H /etc/ | grep my.c 
rm -rf /etc/my.cnf /etc/my.cnf.d/ 

# 查找并卸载自带的 mariadb-libs
rpm -qa | grep mariadb-libs 
rpm -e --nodeps mariadb-libs 

2. 创建目录与编译安装

        下载源码包并编译数据库。注意:编译时间可能较长,请耐心等待。

# 创建必要的目录结构
mkdir -pv /usr/local/mariadb/data /usr/local/mariadb/log /usr/local/mariadb/sock /usr/local/mariadb/etc

# 创建专属用户组和用户
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin -d /usr/local/mariadb/data -M mysql

# 安装编译依赖
yum install ncurses-devel -y

# 下载源码 (使用清华源加速)
wget https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-11.4.3/source/mariadb-11.4.3.tar.gz -P /usr/local/src
tar -xvf /usr/local/src/mariadb-11.4.3.tar.gz -C /usr/local/src && cd /usr/local/src/mariadb-11.4.3

# 执行 CMake 编译配置
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_DATADIR=/usr/local/mariadb/data \
-DSYSCONFDIR=/usr/local/mariadb/etc \
-DMYSQL_USER=mysql \
-DWITHOUT_TOKUDB=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mariadb/sock/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LOBWRAP=0 \
&& make && make install

3. 配置服务自启

        为了方便管理,我们将 MariaDB 注册为 Systemd 服务,并添加环境变量。

# 创建 Systemd 服务文件
cat <<EOL | sudo tee /etc/systemd/system/mariadb.service
[Unit]
Description=MariaDB Database Server
After=network.target

[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mariadb/bin/mysqld --defaults-file=/usr/local/mariadb/etc/my.cnf
ExecStop=/bin/kill -TERM $MAINPID
PIDFile=/usr/local/mariadb/data/mysqld.pid
TimeoutSec=300

[Install]
WantedBy=multi-user.target
EOL

# 重载配置并启动服务
sudo systemctl daemon-reload
systemctl enable mariadb
systemctl start mariadb

# 添加环境变量
sed -i '$aexport PATH=$PATH:/usr/local/mariadb/bin' /etc/profile
source /etc/profile

4. 初始化数据库

        在初始化数据库时,官方脚本中包含了一些权限检查命令(如 chownchmod),在自定义目录编译安装时可能会导致报错。我们需要修改脚本,注释掉这些检查行。

        故障排查:如果执行 mysql_install_db 时报错提示找不到 mysql.sock

  • 如果目录下没有 mysql.sock 文件夹:在安装目录下运行 ./bin/mariadbd-safe
  • 如果目录下此文件夹:运行 ./bin/mariadb-upgrade
# 赋予权限 (注意:777 权限较为宽松,生产环境建议根据实际情况收紧为 755 或 750)
chown -R mysql:mysql /usr/local/mariadb
chmod 777 -R /usr/local/mariadb

# 修改初始化脚本,注释掉可能导致报错的权限检查命令
sed -i $'s/chown 0/#chown 0/g' /usr/local/mariadb/scripts/mysql_install_db
sed -i $'s/chmod 04/#chmod 04/g' /usr/local/mariadb/scripts/mysql_install_db
sed -i $'s/chown \$user \"\$p/#chown \$user \"\$p/g' /usr/local/mariadb/scripts/mysql_install_db
sed -i $'s/chmod 07/#chmod 07/g' /usr/local/mariadb/scripts/mysql_install_db

# 执行初始化
/usr/local/mariadb/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mariadb/data

5. 执行安全配置

        数据库安装完成后,默认是未加密且允许匿名登录的。运行 ./bin/mysql_secure_installation 进行安全加固:

Enter current password for root (enter for none):      <直接回车>
Switch to unix_socket authentication [Y/n]             n
Change the root password? [Y/n]                        Y
New password:                                          <输入新root密码>
Re-enter new password:                                 <确认输入root密码>
Remove anonymous users? [Y/n]                          Y  (删除匿名用户)
Disallow root login remotely? [Y/n]                    Y  (禁止root远程登录)
Remove test database and access to it? [Y/n]           Y  (删除测试库)
Reload privilege tables now? [Y/n]                     Y  (刷新权限表)

        最后在终端中,执行 mysql -u root -p 命令并输入密码,如果显示如下界面,说明数据库已成功安装并运行:

MariaDB运行成功