LNMP生产环境下mariaDB 10.5升级到10.11

image-20260814230718628

这是 WordPress 站点健康提示数据库版本过低。MariaDB 10.6 社区版已在 2026年7月 停止维护(EOL)。WordPress 出于安全和性能考虑,建议运行 MariaDB 10.11 LTS(长期支持版)或 11.4 LTS

第一步:逻辑备份(最关键)

必须把服务起来,才能用 mysqldump

1. 执行逻辑备份(用 TCP 连接方式,避开 socket 报错)
mysqldump -uroot -p -h 127.0.0.1 --single-transaction --routines --triggers --events --all-databases > /root/mdb_all_$(date +%F).sql

2. 确认备份文件有效(看大小不为0,且有内容)
ls -lh /root/mdb_all_*.sql
head -n 5 /root/mdb_all_*.sql

第二步:停服务,做物理备份(防万一)

逻辑备份(mysqldump)成功后,再停掉服务做物理文件备份(升级前最后一道防线):

# 1. 停止网站和数据库(让用户稍等几分钟)
systemctl stop nginx php-fpm mariadb

# 2. 物理备份数据目录(请根据你源码安装的实际路径修改)
cp -a /usr/local/mariadb/var /root/mariadb_datadir.bak

# 3. 备份配置文件
cp /etc/my.cnf /etc/my.cnf.10.5.bak

(datadir 路径看你源码装时的 -DMYSQL_DATADIR,一般在 /usr/local/mysql/data/usr/local/mariadb/var

第三步:开始编译升级

# 依赖(CentOS7 要的都在这对)[6,18](@ref)
yum install -y cmake3 boost-devel ncurses-devel openssl-devel \
  bison libevent-devel libaio-devel zlib-devel pcre2-devel lz4-devel \
  snappy-devel zstd
ln -sf /usr/bin/cmake3 /usr/bin/cmake

cd /usr/local/src
git clone --branch 10.11 https://github.com/MariaDB/server.git mariadb-10.11
cd mariadb-10.11
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-10.11 \
  -DMYSQL_DATADIR=/usr/local/mariadb/var \
  -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci
make -j1 && make install     # 2G 内存必须 -j1

image-20260814234213158

3.1.报错原因确认

核心报错 fatal: unable to access 'https://github.com/wolfSSL/wolfssl.git/': Encountered end of fileNo MariaDB Connector/C!

根本原因

MariaDB 10.11 在编译时需要拉取内部依赖库(如 wolfSSL、Connector/C 等)。由于你的阿里云服务器在国内,直接连接 GitHub 克隆子模块时网络被阻断或超时断连。同时,CMake 检测到缺少核心依赖(Connector/C),因此中止了配置。

3.2.确认服务已停止的命令(生产环境必备)

在执行升级或物理备份前,必须确保旧服务已完全停止,避免数据损坏或端口冲突。

查看服务状态(推荐)

systemctl status nginx mariadb php-fpm

如果 systemctl 显示停止但仍有残留进程,用此命令检查:

ps -ef | grep -E 'nginx|mysql|mariadb|php-fpm'

判断标准:输出结果中只能看到包含 grep 的行,不能看到 nginxmysqldphp-fpm 的主进程。如果有,说明没停干净。

检查端口监听

netstat -tlnp | grep -E '80|443|3306|9000'

执行以下命令,若无任何输出才是绝对干净:

ps -ef | grep -E 'nginx|mysqld|php-fpm' | grep -v grep

3.3.修复报错并继续编译(针对 2核2G 源码安装环境)

方案 1:跳过 wolfSSL,使用系统 OpenSSL(最快)

既然 CentOS 7 已安装 openssl-devel,直接告诉 CMake 用系统自带的 SSL 库,不去网上拉取 wolfSSL。

清理失败的构建缓存(必须做,否则旧错误保留):

cd /usr/local/src/mariadb-10.11/build
rm -rf ./*

重新执行 CMake(加入 -DWITH_SSL=system):

cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-10.11 \
  -DMYSQL_DATADIR=/usr/local/mariadb/var \
  -DSYSCONFDIR=/etc \
  -DWITH_SSL=system \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci

如果仍然报错,请尝试方案2

方案 2:下载官方完整源码包(最稳妥的源码方式)

官方打包的 Tarball 源码包里已经包含了所有子模块,不会在编译时联网拉取:

# 删除报错的源码目录
rm -rf /usr/local/src/mariadb-10.11
cd /usr/local/src

# (建议在本地电脑用代理下载好,再上传到服务器,或用 wget 尝试)
wget https://archive.mariadb.org/mariadb-10.11.7/source/mariadb-10.11.7.tar.gz
#  建议用 yum install -y lrzsz(rz -e)
#  上传成功后
tar -zxvf mariadb-10.11.7.tar.gz
cd mariadb-10.11.7

# 重新创建 build 目录并跑 CMake(用路径 1 的参数)
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-10.11 -DMYSQL_DATADIR=/usr/local/mariadb/var -DSYSCONFDIR=/etc -DWITH_SSL=system -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci

image-20260815001056611

执行单线程编译(必须用 -j1)

cd /usr/local/src/mariadb-10.11.7/build
make -j1
make install

报错:

image-20260815001332768

报错原因解读

  1. 核心报错Protocol "https" not supported or disabled in libcurl
  2. 触发场景:MariaDB 的 CMake 构建脚本在编译时自动执行下载步骤(download-libfmt),试图从 GitHub 下载 libfmt-8.0.1.zip 依赖包。
  3. 根本原因
    • 系统 libcurl 缺陷:CentOS 7 自带的 curl 版本较老,且编译时使用的是 NSS 而不是 OpenSSL,导致底层的 libcurl 不支持 HTTPS 协议。当构建脚本调用它下载 GitHub 上的 HTTPS 链接时直接报错。
    • GitHub 网络连通性差:即使修复了 curl,在国内服务器直连 GitHub 下载大文件也极易超时失败。

修复与继续编译方案

3.3.1.推荐:手动下载并预置依赖(推荐,不断开当前编译)

既然自动下载失败,可以手动下载并放到指定目录:

  1. 在本机或能翻墙的电脑上下载:下载 https://github.com/fmtlib/fmt/archive/refs/tags/8.0.1.zip (可用代理或迅雷)。
  2. 上传到服务器:使用 rz -Escp 将下载好的 8.0.1.zip 上传到服务器的 /usr/local/src/mariadb-10.11.7/build/extra/libfmt/src/ 目录下。

    把原有的8.0.1.zip删除,然后添加重命名fmt.8.0.1.zip为8.0.1.zip

  3. 重新执行编译
cd /usr/local/src/mariadb-10.11.7/build
make -j1
make install

image-20260815011334865

第四步、初始化与配置指南

4.1.初始出数据库

# 创建组(如有请忽略)
groupadd -g $(id -g mysql 2>/dev/null||echo 27) mysql 2>/dev/null
# 创建用户(如有请忽略)
id mysql||useradd -r -g mysql -s /sbin/nologin mysql
# 创建目录(如有请忽略)
mkdir -p /usr/local/mariadb/var
rm -rf /usr/local/mariadb/var/* 
# 设备目录的用户和用户组
chown -R mysql:mysql /usr/local/mariadb/var /usr/local/mariadb-10.11

# 编译树里的脚本(装完后 bin 没有,用 build 树或 scripts)
/usr/local/src/mariadb-10.11.7/scripts/mariadb-install-db \
  --user=mysql --basedir=/usr/local/mariadb-10.11 --datadir=/usr/local/mariadb/var
  
# 装完 prefix 里没有 install-db 时,用 mariadbd 初始化:
# /usr/local/mariadb-10.11/bin/mariadbd --initialize-insecure --user=mysql \
#   --basedir=/usr/local/mariadb-10.11 --datadir=/usr/local/mariadb/var

4.2.my.cnf(清掉 10.5 弃用项,指新 prefix)

vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mariadb-10.11
datadir=/usr/local/mariadb/var
socket=/tmp/mysql.sock
user=mysql
innodb_buffer_pool_size=512M
max_connections=50
performance_schema=OFF
!includedir /etc/my.cnf.d

[Service]
Type=simple
User=mysql
ExecStart=/usr/local/mariadb-10.11/bin/mariadbd --defaults-file=/etc/my.cnf

4.3.systemd(ExecStart 必须是 mariadbd)

cp /usr/local/mariadb-10.11/support-files/systemd/mariadb.service /etc/systemd/system/
# 改上面 ExecStart 后:
systemctl daemon-reload && systemctl enable --now mariadb

4.4.导回数据 + 修表

# 全量导回(root 密码会变回备里的,也可只导 wordpress 库)
/usr/local/mariadb-10.11/bin/mysql -u root -p < /root/mdb_all_2026-08-14.sql

# 或进 mysql> 用 source /root/mdb_all_2026-08-14.sql
mariadb-upgrade -u root -p     # 修 mysql 系统表,10.11 会提示已升级就跳过

# WP 专用账号兜底(对应wp-config.php文件里面的账号和密码)
mysql -u root -p -e "CREATE USER IF NOT EXISTS '******'@'localhost' IDENTIFIED BY '********'; GRANT ALL ON 数据名称.* TO '******'@'localhost'; FLUSH PRIVILEGES;" 

4.5.起 Web

systemctl start php-fpm nginx

 

 

 

Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注