MySQL源码编译安装

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 本文详细介绍了MySQL 8.0及8.4版本的源码编译安装全过程,涵盖用户创建、依赖安装、cmake配置、编译优化等步骤,并提供支持多Linux发行版的一键安装脚本,适用于定制化数据库部署需求。

2.4 源码编译安装

建议:内存6G以上,否则编译时可能会出错,这里设置的4C8G。

2.4.1 MySQL 8.0

2.4.1.1 用户和组

# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、 Kylin Server、UOS Server、Ubuntu、Debian
useradd -r -s /sbin/nologin -d /data/mysql mysql

# openSUSE
groupadd -r mysql
useradd -s /sbin/nologin -d /data/mysql -r -g mysql mysql

2.4.1.2 准备数据库目录

mkdir -p /data/mysql
chown mysql:mysql /data/mysql

2.4.1.3 安装相关依赖包

启用镜像仓库:

# Rocky 9和10要启用devel镜像仓库
dnf config-manager --set-enabled devel

# Almalinux 9/10和CentOS Stream 9/10要启用crb镜像仓库
dnf config-manager --set-enabled crb

# OpenCloudOS 8要启用PowerTools镜像仓库
dnf config-manager --set-enabled PowerTools

# Rocky 8、Almalinux 8和CentOS Stream 8要启用powertools镜像仓库
dnf config-manager --set-enabled powertools

Rocky 10、Almalinux 10、CentOS Stream 10、AnolisOS 8/23和OpenCloudOS 8:

yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

Rocky 8/9、Almalinux 8/9和CentOS Stream 8/9:

yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

CentOS 7:

# 安装sclo镜像源包
yum install -y centos-release-scl

# 替换镜像仓库地址
MIRROR=mirrors.tencent.com
OS_RELEASE_FULL_VERSION=`cat /etc/centos-release | sed -rn 's/^(CentOS Linux release )(.*)( \(Core\))/\2/p'`
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^# baseurl=|baseurl=|g' -e 's|^#baseurl=|baseurl=|g' -e 's|http://mirror.centos.org/centos|https://'${MIRROR}'/centos-vault|g' -e "s/7/${OS_RELEASE_FULL_VERSION}/g"  /etc/yum.repos.d/CentOS-SCLo-*.repo

# 安装依赖包
yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils gcc gcc-c++ openssl-devel ncurses-devel

openEuler 22.03/24.03 LTS和Kylin Server V11:

yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

OpenCloudOS 9:

yum install -y cmake gcc gcc-c++ systemd-devel openssl-devel ncurses-devel libtirpc-devel rpcgen

Kylin Server V10:

yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

UOS Server V20:

yum install -y cmake ncurses-devel libtirpc-devel rpcgen

openSUSE Leap 15:

zypper install -y cmake gcc gcc-c++ libopenssl-devel ncurses-devel libtirpc-devel rpcgen

Ubuntu Server 24.04 LTS和Debian 13:

apt update
apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config libtirpc-dev

Ubuntu Server 20.04/22.04 LTS和Debian 11/12:

apt update
apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config

Ubuntu Server 18.04 LTS:

apt update
apt install -y gcc-8 g++-8 libssl-dev libncurses5-dev pkg-config

CentOS 7和Ubuntu Server 18.04 LTS安装cmake:

cd /usr/local/src/

wget https://cmake.org/files/v3.31/cmake-3.31.7-linux-x86_64.tar.gz
tar xf cmake-3.31.7-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/cmake-3.31.7-linux-x86_64/bin/cmake /usr/bin/

Kylin Server V10、UOS Server V20和openSUSE Leap 15编译gcc:

cd /usr/local/src/

wget https://mirrors.cloud.tencent.com/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz
tar xf gcc-8.5.0.tar.gz
cd gcc-8.5.0

# 下载gcc依赖包
./contrib/download_prerequisites
2025-10-03 19:52:11 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2025-10-03 19:52:32 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2025-10-03 19:52:57 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2025-10-03 19:54:00 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.

mkdir build
cd build/

# 执行configure
../configure --prefix=/usr --disable-multilib
...
configure: creating ./config.status
config.status: creating Makefile

# 执行make
make -j $(nproc) && make install
...
make[4]: Nothing to be done for 'install-data-am'.
make[4]: Leaving directory '/usr/local/src/gcc-8.5.0/build/x86_64-pc-linux-gnu/libatomic'
make[3]: Leaving directory '/usr/local/src/gcc-8.5.0/build/x86_64-pc-linux-gnu/libatomic'
make[2]: Leaving directory '/usr/local/src/gcc-8.5.0/build/x86_64-pc-linux-gnu/libatomic'
make[1]: Leaving directory '/usr/local/src/gcc-8.5.0/build'

2.4.1.4 下载并解压缩源码包

MySQL源码包下载,去“https://www.mysql.com/”网站下载,选择“DOWNLOADS”,如图84所示。

t84

图84 下载MySQL源码包

选择“MySQL Community (GPL) Downloads”,如图85所示。

t85

图85 下载MySQL源码包

然后选择“MySQL Community Server”,如图86所示。

t86

图86 下载MySQL源码包

然后版本选择“8.0.43”,操作系统选择“Source Code”,系统版本选择“All Operating Systems (Generic) (Architecture Independent)”,然后选择下面的“mysql-boost-8.0.43.tar.gz”包后面的“Download”进行下载,如图87所示。

t87

图87 下载MySQL源码包

cd /usr/local/src/

# Rocky、Almalinux、CentOS、AnolisOS、OpenCloudOS、Kylin Server默认没有wget包,需要安装
yum install -y wget

# openEuler 22.03/24.03 LTS、AnolisOS 23、OpenCloudOS 9没有安装tar包,需要安装
yum install -y tar

wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.43.tar.gz

tar xf mysql-boost-8.0.43.tar.gz

2.4.1.5 源码编译安装

编译安装说明 :

利用cmake编译,而利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译。

编译选项:https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html。

MySQL cmake 一些常用的参数解释

-DCMAKE_INSTALL_PREFIX # MariaDB 的安装目录
-DMYSQL_DATADIR # MariaDB 数据存储路径
-DSYSCONFDIR # 配置文件目录
-DWITH_INNOBASE_STORAGE_ENGINE # 是否安装 innodb 存储引擎 - 参数:1 or 0
-DWITH_ARCHIVE_STORAGE_ENGINE # 是否安装 archive 存储引擎 - 参数:1 or 0
-DWITH_BLACKHOLE_STORAGE_ENGINE # 是否安装 blackhole 存储引擎 - 参数:1 or 0
-DWITH_DEBUG # 是 MariaDB 编译时的一个 CMake 参数,用于启用或禁用调试模式,1是启用,0是禁用
-DWITH_SSL # 用于指定是否启用 SSL 支持,system是使用系统已安装的 OpenSSL(推荐,依赖系统包)。
-DWITH_LIBWRAP # 用于控制是否启用 libwrap(TCP Wrappers)支持,0是禁用 libwrap,不启用 TCP Wrappers 支持,避免潜在的性能影响
-DENABLED_LOCAL_INFILE # 是否开启 load data infile 命令 - 参数:1 or 0
-DMYSQL_UNIX_ADDR # Unix socket 文件路径
-DDEFAULT_CHARSET # 默认字符集
-DDEFAULT_COLLATION # 校验字符
-DWITH_BOOST # 用于控制是否在构建项目时启用对 Boost 库 的支持。
-DFORCE_INSOURCE_BUILD # 用于 强制在源码目录内进行构建(in-source build),而不是推荐的外源码构建(out-of-source build)。设置该选项后:允许或强制你在源码目录中直接运行  cmake .  和  make ,不需要单独建 build 目录。
-DWITH_SYSTEMD # 是否 systemctl 管理 - 参数:1 or 0

进入mysql包解压的目录:

cd mysql-8.0.43/

执行cmake:

Rocky、AlmaLinux、CentOS、openEuler、AnolisOS、OpenCloudOS、Kylin Server、UOS Server、openSUSE、Ubuntu、Debian 11/12:

cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_SSL=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=/usr/local/src/mysql-8.0.43/boost/boost_1_77_0/ \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_SYSTEMD=1
...
# 正常会有类似如下的输出
-- Configuring done (47.2s)
-- Generating done (5.0s)
-- Build files have been written to: /usr/local/src/mysql-8.0.43

Debian 13:

cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_SSL=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=/usr/local/src/mysql-8.0.43/boost/boost_1_77_0/ \
-DFORCE_INSOURCE_BUILD=1
...
-- Configuring done (47.7s)
-- Generating done (3.8s)
-- Build files have been written to: /usr/local/src/mysql-8.0.43

执行make:

make -j $(nproc) && make install

2.4.1.6 准备环境变量

echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh

chown -R mysql:mysql /apps/mysql/

2.4.1.7 生成数据库文件

# /data/mysql  会自动生成,但是/data/必须事先存在
# --initialize会生成一个初始化密码,--initialize-insecure生成空密码,两种方式任选一种

# 生成初始化密码
mysqld --initialize --user=mysql --datadir=/data/mysql
2025-04-30T14:21:27.126347Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2025-04-30T14:21:27.130746Z 0 [System] [MY-013169] [Server] /apps/mysql/bin/mysqld (mysqld 8.4.5) initializing of server in progress as process 45248
2025-04-30T14:21:27.133400Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2025-04-30T14:21:27.133406Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8mb3_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
2025-04-30T14:21:27.151145Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-04-30T14:21:27.413116Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-04-30T14:21:28.313966Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: q&VUtowtA6!. # “q&VUtowtA6!.”这个就是初始化密码
2025-04-30T14:21:29.694317Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.

# 生成空密码的root用户
[root@rocky10 mysql-8.0.43]# mysqld --initialize-insecure --user=mysql --basedir=/apps/mysql --datadir=/data/mysql
2025-10-03T14:27:33.893041Z 0 [System] [MY-013169] [Server] /apps/mysql/bin/mysqld (mysqld 8.0.43) initializing of server in progress as process 397058
2025-10-03T14:27:33.906919Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-10-03T14:27:34.267057Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-10-03T14:27:35.154184Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

2.4.1.7 准备配置文件

cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/apps/mysql/
datadir=/data/mysql
port=3306
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid

[client]
port=3306
socket=/data/mysql/mysql.sock
EOF

2.4.1.7 准备启动脚本并启动服务

Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、 Kylin Server、UOS Server、openSUSE:

cp /apps/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

Ubuntu Server 24.04 LTS:

cp /apps/mysql/usr/lib/systemd/system/mysqld.service /lib/systemd/system/

Ubuntu Server 18.04/20.04/22.04和Debian 11/12没有mysqld.service,需要单独写配置文件:

cat > /lib/systemd/system/mysqld.service  <<EOF
# Copyright (c) 2015, 2025, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
#
# systemd service file for MySQL forking server
#

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
# hence, + prefix is used

# Needed to create system tables
ExecStartPre=+/apps/mysql/bin/mysqld_pre_systemd

# Start main service
ExecStart=/apps/mysql/bin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false
EOF

Debian 13没有mysqld.service,需要单独写配置文件:

cat > /lib/systemd/system/mysqld.service  <<EOF
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/apps/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

设置MySQL服务开机启动并运行:

systemctl daemon-reload && systemctl enable --now mysqld

2.4.1.10 修改口令

# 如果使用的是空密码,就不需要修改口令
mysqladmin -u root -p'q&VUtowtA6!.' password 123456
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

2.4.1.11 登录测试

[root@rocky10 mysql-8.0.43]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.43 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------
mysql  Ver 8.0.43 for Linux on x86_64 (Source distribution)

Connection id:        8
Current database:    
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        8.0.43 Source distribution
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /data/mysql/mysql.sock
Binary data as:        Hexadecimal
Uptime:            3 min 5 sec

Threads: 2  Questions: 5  Slow queries: 0  Opens: 120  Flush tables: 3  Open tables: 36  Queries per second avg: 0.027
--------------

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> exit
Bye

2.4.1.12 一键安装MySQL 8.0源码编译的脚本

Shell脚本源码地址:

Gitee:https://gitee.com/raymond9/shell

Github:https://github.com/raymond999999/shell

可以去上面的Gitee或Github代码仓库拉取脚本。

[root@rocky10 ~]# cat install_mysql_8.0_source_v2.sh
#!/bin/bash
#
#**********************************************************************************
#Author:        Raymond
#QQ:            88563128
#MP:            Raymond运维
#Date:          2025-10-04
#FileName:      install_mysql_8.0_source_v2.sh
#URL:           https://wx.zsxq.com/group/15555885545422
#Description:   The mysql source script install supports 
#               “Rocky Linux 8, 9 and 10, AlmaLinux 8, 9 and 10, CentOS 7, 
#               CentOS Stream 8, 9 and 10, openEuler 22.03 and 24.03 LTS, 
#               AnolisOS 8 and 23, OpenCloudOS 8 and 9, Kylin Server v10 and v11, 
#               UOS Server v20, Ubuntu Server 18.04, 20.04, 22.04 and 24.04 LTS,  
#               Debian 11 , 12 and 13, openSUSE Leap 15“ operating systems.
#Copyright (C): 2025 All rights reserved
#**********************************************************************************
COLOR="echo -e \\033[01;31m"
END='\033[0m'

os(){
   
    . /etc/os-release
    MAIN_NAME=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
    if [ ${MAIN_NAME} == "Kylin" ];then
        MAIN_VERSION_ID=`sed -rn '/^VERSION_ID=/s@.*="([[:alpha:]]+)(.*)"$@\2@p' /etc/os-release`
    else
        MAIN_VERSION_ID=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
    fi
}

os
SRC_DIR=/usr/local/src
INSTALL_DIR=/apps/mysql
DATA_DIR=/data/mysql

MYSQL_VERSION=8.0.43
MYSQL_URL='https://cdn.mysql.com//Downloads/MySQL-8.0/'
MYSQL_FILE="mysql-boost-${MYSQL_VERSION}.tar.gz"

CMAKE_URL='https://cmake.org/files/v3.31/'
CMAKE_FILE='cmake-3.31.7-linux-x86_64.tar.gz'

GCC_INSTALL_DIR=/usr
GCC_URL='https://mirrors.cloud.tencent.com/gnu/gcc/gcc-8.5.0/'
GCC_FILE='gcc-8.5.0.tar.gz'
GMP_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
GMP_FILE='gmp-6.1.0.tar.bz2'
MPFR_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
MPFR_FILE='mpfr-3.1.4.tar.bz2'
MPC_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
MPC_FILE='mpc-1.0.3.tar.gz'
ISL_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
ISL_FILE='isl-0.18.tar.bz2'

check_mysql_file(){
   
    if [ ${MAIN_NAME} == "Rocky" -o ${MAIN_NAME} == "AlmaLinux" -o ${MAIN_NAME} == "CentOS" -o ${MAIN_NAME} == "Anolis" -o ${MAIN_NAME} == "OpenCloudOS" -o ${MAIN_NAME} == "Kylin" ];then
        rpm -q wget &> /dev/null || {
    ${COLOR}"安装wget工具,请稍等......"${END};yum -y install wget &> /dev/null; }
    fi
    if [ ! -e ${MYSQL_FILE} ];then
        ${COLOR}"缺少${MYSQL_FILE}文件!"${END}
        ${COLOR}'开始下载MySQL源码包......'${END}
        wget ${MYSQL_URL}${MYSQL_FILE} || {
    ${COLOR}"MySQL源码包下载失败!"${END}; exit; }
    else
        ${COLOR}"${MYSQL_FILE}相关文件已准备好!"${END}
    fi
}

check_cmake_file(){
   
    if [ ! -e ${CMAKE_FILE} ];then
        ${COLOR}"缺少${CMAKE_FILE}文件!"${END}
        ${COLOR}'开始下载cmake二进制包......'${END}
        wget ${CMAKE_URL}${CMAKE_FILE} || {
    ${COLOR}"cmake二进制包下载失败!"${END}; exit; }
    else
        ${COLOR}"${CMAKE_FILE}相关文件已准备好!"${END}
    fi
}

check_gcc_file(){
   
    if [ ! -e ${GCC_FILE} ];then
        ${COLOR}"缺少${GCC_FILE}文件!"${END}
        ${COLOR}'开始下载gcc源码包......'${END}
        wget ${GCC_URL}${GCC_FILE} || {
    ${COLOR}"gcc源码包下载失败!"${END}; exit; }
    elif [ ! -e ${GMP_FILE} ];then
        ${COLOR}"缺少${GMP_FILE}文件!"${END}
        ${COLOR}'开始下载gmp源码包......'${END}
        wget ${GMP_URL}${GMP_FILE} || {
    ${COLOR}"gmp源码包下载失败!"${END}; exit; }
    elif [ ! -e ${MPFR_FILE} ];then
        ${COLOR}"缺少${MPFR_FILE}文件!"${END}
        ${COLOR}'开始下载mpfr源码包......'${END}
        wget ${MPFR_URL}${MPFR_FILE} || {
    ${COLOR}"mpfr源码包下载失败!"${END}; exit; }
    elif [ ! -e ${MPC_FILE} ];then
        ${COLOR}"缺少${MPC_FILE}文件!"${END}
        ${COLOR}'开始下载mpc源码包......'${END}
        wget ${MPC_URL}${MPC_FILE} || {
    ${COLOR}"mpc源码包下载失败!"${END}; exit; }
    elif [ ! -e ${ISL_FILE} ];then
        ${COLOR}"缺少${ISL_FILE}文件!"${END}
        ${COLOR}'开始下载isl源码包......'${END}
        wget ${ISL_URL}${ISL_FILE} || {
    ${COLOR}"isl源码包下载失败!"${END}; exit; }
    else
        ${COLOR}"gcc相关文件已准备好!"${END}
    fi
}

check_file(){
   
    cd  ${SRC_DIR}
    check_mysql_file
    if [ ${MAIN_NAME} == "CentOS" -a ${MAIN_VERSION_ID} == 7 ];then
        check_cmake_file
    fi
    if [ ${MAIN_NAME} == "Ubuntu" -a ${MAIN_VERSION_ID} == 18 ];then
        check_cmake_file
    fi
    if [ ${MAIN_NAME} == 'Kylin' -a ${MAIN_VERSION_ID} == 10 ];then
        check_gcc_file
    fi
    if [ ${MAIN_NAME} == 'UOS' -a ${MAIN_VERSION_ID} == 20 ];then
        check_gcc_file
    fi
    if [ ${MAIN_NAME} == 'openSUSE' -a ${MAIN_VERSION_ID} == 15 ];then
        check_gcc_file
    fi
}

install_cmake(){
   
    ${COLOR}'开始安装cmake,请稍等......'${END}
    tar xf ${CMAKE_FILE} -C /usr/local/
    CMAKE_DIR=`echo ${CMAKE_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s /usr/local/${CMAKE_DIR}/bin/cmake /usr/bin/
}

install_gcc(){
   
    ${COLOR}'开始编译安装gcc,请稍等......'${END}
    tar xf ${GCC_FILE}
    GCC_DIR=`echo ${GCC_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    mv ${GMP_FILE} ${MPFR_FILE} ${MPC_FILE} ${ISL_FILE} ${GCC_DIR}
    cd ${GCC_DIR}
    ./contrib/download_prerequisites
    mkdir build
    cd build
    ../configure --prefix=${GCC_INSTALL_DIR} --disable-multilib 
    make -j $(nproc) && make install
    [ $? -eq 0 ] && ${COLOR}"gcc编译安装成功!"${END} ||  {
    ${COLOR}"gcc编译安装失败,退出!"${END};exit; }
}

install_mysql(){
   
    [ -d ${INSTALL_DIR} ] && {
    ${COLOR}"MySQL数据库已存在,安装失败!"${END};exit; }
    ${COLOR}"开始安装MySQL数据库......"${END}
    if [ ${MAIN_NAME} == "openSUSE" ];then
        id mysql &> /dev/null || {
    groupadd -r mysql && useradd -s /sbin/nologin -d  ${DATA_DIR} -r -g mysql mysql ; ${COLOR}"成功创建mysql用户!"${END}; }
    else
        id mysql &> /dev/null || {
    useradd -r -s /sbin/nologin -d ${DATA_DIR} mysql ; ${COLOR}"成功创建mysql用户!"${END}; }
    fi
    [ -d ${DATA_DIR} ] || mkdir -p ${DATA_DIR}
    chown -R mysql:mysql ${DATA_DIR}
    ${COLOR}'开始安装MySQL依赖包,请稍等......'${END}
    if [ ${MAIN_NAME} == "Rocky" ];then
        if [ ${MAIN_VERSION_ID} == 8 ];then
            dnf config-manager --set-enabled powertools
        else
            dnf config-manager --set-enabled devel
        fi
    fi
    if [ ${MAIN_NAME} == "AlmaLinux" ];then
        if [ ${MAIN_VERSION_ID} == 8  ];then
            dnf config-manager --set-enabled powertools
        else
            dnf config-manager --set-enabled crb
        fi
    fi
    if [ ${MAIN_NAME} == "CentOS" ];then
       if [ ${MAIN_VERSION_ID} == 8  ];then
            dnf config-manager --set-enabled powertools
        else
            dnf config-manager --set-enabled crb
        fi
    fi
    if [ ${MAIN_NAME} == "OpenCloudOS" -a ${MAIN_VERSION_ID} == 8 ];then
        dnf config-manager --set-enabled PowerTools
    fi
    if [ ${MAIN_NAME} == "Rocky" ];then
        if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
            yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "AlmaLinux" ];then
        if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
            yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "CentOS" ];then
        if [ ${MAIN_VERSION_ID} == 7 ];then
            yum install -y centos-release-scl &> /dev/null
            MIRROR=mirrors.tencent.com
            OS_RELEASE_FULL_VERSION=`cat /etc/centos-release | sed -rn 's/^(CentOS Linux release )(.*)( \(Core\))/\2/p'`
            sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^# baseurl=|baseurl=|g' -e 's|^#baseurl=|baseurl=|g' -e 's|http://mirror.centos.org/centos|https://'${MIRROR}'/centos-vault|g' -e "s/7/${OS_RELEASE_FULL_VERSION}/g"  /etc/yum.repos.d/CentOS-SCLo-*.repo
            yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils gcc gcc-c++ openssl-devel ncurses-devel &> /dev/null
        elif [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then        
            yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "openEuler" ];then
        if [ ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
            yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Anolis" ];then
        if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 23 ];then
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == 'OpenCloudOS' ];then
        if [ ${MAIN_VERSION_ID} == 8 ];then
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ systemd-devel openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Kylin" ];then
        yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
    fi
    if [ ${MAIN_NAME} == "UOS" ];then
        if [ ${MAIN_VERSION_ID} == 20 ];then
            yum install -y cmake ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "openSUSE" ];then
        if [ ${MAIN_VERSION_ID} == 15 ];then
            zypper install -y cmake gcc gcc-c++ libopenssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Ubuntu" ];then
        if [ ${MAIN_VERSION_ID} == 18 ];then
            apt update && apt install -y gcc-8 g++-8 libssl-dev libncurses5-dev pkg-config
        elif [ ${MAIN_VERSION_ID} == 20 -o ${MAIN_VERSION_ID} == 22 ];then
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config
        else
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config libtirpc-dev
        fi
    fi
    if [ ${MAIN_NAME} == 'Debian' ];then
        if [ ${MAIN_VERSION_ID} == 11 -o ${MAIN_VERSION_ID} == 12 ];then
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config
        else
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config libtirpc-dev
        fi
    fi
    if [ ${MAIN_NAME} == "CentOS" -a ${MAIN_VERSION_ID} == 7 ];then
        install_cmake
    fi
    if [ ${MAIN_NAME} == 'Ubuntu' -a ${MAIN_VERSION_ID} == 18 ];then
        install_cmake
    fi
    if [ ${MAIN_NAME} == 'Kylin' ];then
        if [ ${MAIN_VERSION_ID} == 10 ];then
            install_gcc
        fi
    fi
    if [ ${MAIN_NAME} == 'UOS' ];then
        if [ ${MAIN_VERSION_ID} == 20 ];then
            install_gcc
        fi
    fi
    if [ ${MAIN_NAME} == 'openSUSE' ];then
        if [ ${MAIN_VERSION_ID} == 15 ];then
            install_gcc
        fi
    fi
    ${COLOR}'开始编译安装MySQL,请稍等......'${END}
    cd  ${SRC_DIR}
    if [ ${MAIN_NAME} == "openEuler" ];then
        if [ ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
            yum install -y tar &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Anolis" ];then
        if [ ${MAIN_VERSION_ID} == 23 ];then
            yum install -y tar &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "OpenCloudOS" ];then
        if [ ${MAIN_VERSION_ID} == 9 ];then
            yum install -y tar &> /dev/null
        fi
    fi
    tar xf ${MYSQL_FILE}
    MYSQL_DIR=`echo ${MYSQL_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p' | cut -d"-" -f 1,3`
    cd ${MYSQL_DIR}
    if [ ${MAIN_NAME} == "Debian" -a ${MAIN_VERSION_ID} == 13 ];then
        cmake . \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
        -DMYSQL_DATADIR=${DATA_DIR}/ \
        -DSYSCONFDIR=/etc/ \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
        -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
        -DWITH_DEBUG=0 \
        -DWITH_SSL=system \
        -DWITH_LIBWRAP=0 \
        -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_UNIX_ADDR=${DATA_DIR}/mysql.sock \
        -DDEFAULT_CHARSET=utf8mb4 \
        -DDEFAULT_COLLATION=utf8mb4_general_ci \
        -DWITH_BOOST=/usr/local/src/${MYSQL_DIR}/boost/boost_1_77_0/ \
        -DFORCE_INSOURCE_BUILD=1
    else
        cmake . \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
        -DMYSQL_DATADIR=${DATA_DIR}/ \
        -DSYSCONFDIR=/etc/ \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
        -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
        -DWITH_DEBUG=0 \
        -DWITH_SSL=system \
        -DWITH_LIBWRAP=0 \
        -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_UNIX_ADDR=${DATA_DIR}/mysql.sock \
        -DDEFAULT_CHARSET=utf8mb4 \
        -DDEFAULT_COLLATION=utf8mb4_general_ci \
        -DWITH_BOOST=/usr/local/src/${MYSQL_DIR}/boost/boost_1_77_0/ \
        -DFORCE_INSOURCE_BUILD=1 \
        -DWITH_SYSTEMD=1
    fi
    make -j $(nproc) && make install
    [ $? -eq 0 ] && ${COLOR}"MySQL编译安装成功!"${END} ||  {
    ${COLOR}"MySQL编译安装失败,退出!"${END};exit; }
    echo 'PATH='${INSTALL_DIR}'/bin:$PATH' > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    chown -R mysql:mysql ${INSTALL_DIR}
    mysqld --initialize-insecure --user=mysql --basedir=${INSTALL_DIR} --datadir=${DATA_DIR}
    cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=${INSTALL_DIR}
datadir=${DATA_DIR}
port=3306
socket=${DATA_DIR}/mysql.sock
log-error=${DATA_DIR}/mysql.log  
pid-file=${DATA_DIR}/mysql.pid 

[client]
port=3306
socket=${DATA_DIR}/mysql.sock
EOF
    if [ ${MAIN_NAME} == "Rocky" -o ${MAIN_NAME} == "AlmaLinux" -o ${MAIN_NAME} == "CentOS" -o ${MAIN_NAME} == "openEuler" -o ${MAIN_NAME} == "Anolis" -o ${MAIN_NAME} == "OpenCloudOS" -o ${MAIN_NAME} == "Kylin" -o ${MAIN_NAME} == "UOS" -o ${MAIN_NAME} == "openSUSE" ];then
        cp ${INSTALL_DIR}/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
    elif [ ${MAIN_NAME} == "Ubuntu" ];then
        if [ ${MAIN_VERSION_ID} == 24 ];then    
            cp ${INSTALL_DIR}/usr/lib/systemd/system/mysqld.service /lib/systemd/system/
        fi
    elif [ ${MAIN_NAME} == "Debian" ];then
        if [ ${MAIN_VERSION_ID} == 13 ];then    
            cat > /lib/systemd/system/mysqld.service  <<EOF
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=${INSTALL_DIR}/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
        fi
    else
        cat > /lib/systemd/system//mysqld.service  <<EOF
# Copyright (c) 2015, 2025, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
#
# systemd service file for MySQL forking server
#

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
# hence, + prefix is used

# Needed to create system tables
ExecStartPre=+${INSTALL_DIR}/bin/mysqld_pre_systemd

# Start main service
ExecStart=${INSTALL_DIR}/bin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false
EOF
    fi
    systemctl daemon-reload && systemctl enable --now mysqld &> /dev/null
    [ $? -ne 0 ] && {
    ${COLOR}"数据库启动失败,退出!"${END};exit; }
    ${COLOR}"${PRETTY_NAME}操作系统,MySQL数据库安装完成!"${END}
}

main(){
   
    check_file
    install_mysql
}

if [ ${MAIN_NAME} == "Rocky" ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 -o ${MAIN_VERSION_ID} == 10 ];then
        main
    fi
elif [ ${MAIN_NAME} == "AlmaLinux" ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 -o ${MAIN_VERSION_ID} == 10 ];then
        main
    fi
elif [ ${MAIN_NAME} == "CentOS" ];then
    if [ ${MAIN_VERSION_ID} == 7 -o ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 -o ${MAIN_VERSION_ID} == 10 ];then
        main
    fi
elif [ ${MAIN_NAME} == "openEuler" ];then
    if [ ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
        main
    fi
elif [ ${MAIN_NAME} == "Anolis" ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 23 ];then
        main
    fi
elif [ ${MAIN_NAME} == 'OpenCloudOS' ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
        main
    fi
elif [ ${MAIN_NAME} == "Kylin" ];then
    if [ ${MAIN_VERSION_ID} == 10 -o ${MAIN_VERSION_ID} == 11 ];then
        main
    fi
elif [ ${MAIN_NAME} == "UOS" ];then
    if [ ${MAIN_VERSION_ID} == 20 ];then
        main
    fi
elif [ ${MAIN_NAME} == "openSUSE" ];then
    if [ ${MAIN_VERSION_ID} == 15 ];then
        main
    fi
elif [ ${MAIN_NAME} == "Ubuntu" ];then
    if [ ${MAIN_VERSION_ID} == 18 -o ${MAIN_VERSION_ID} == 20 -o ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
        main
    fi
elif [ ${MAIN_NAME} == 'Debian' ];then
    if [ ${MAIN_VERSION_ID} == 11 -o ${MAIN_VERSION_ID} == 12 -o ${MAIN_VERSION_ID} == 13 ];then
        main
    fi
else
    ${COLOR}"此脚本不支持${PRETTY_NAME}操作系统!"${END}
fi

2.4.2 MySQL 8.4

2.4.2.1 用户和组

# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、 Kylin Server、UOS Server、Ubuntu、Debian
useradd -r -s /sbin/nologin -d /data/mysql mysql

# openSUSE
groupadd -r mysql
useradd -s /sbin/nologin -d /data/mysql -r -g mysql mysql

2.4.2.2 准备数据库目录

mkdir -p /data/mysql
chown mysql:mysql /data/mysql

2.4.2.3 安装相关依赖包

启用镜像仓库:

# Rocky 9和10要启用devel镜像仓库
dnf config-manager --set-enabled devel

# Almalinux 9/10和CentOS Stream 9/10要启用crb镜像仓库
dnf config-manager --set-enabled crb

# OpenCloudOS 8要启用PowerTools镜像仓库
dnf config-manager --set-enabled PowerTools

# Rocky 8、Almalinux 8和CentOS Stream 8要启用powertools镜像仓库
dnf config-manager --set-enabled powertools

Rocky 10、Almalinux 10和CentOS Stream 10:

yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen boost-devel bison

Rocky 8/9、Almalinux 8/9和CentOS Stream 8/9:

yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

CentOS 7:

# 安装sclo镜像源包
yum install -y centos-release-scl

# 替换镜像仓库地址
MIRROR=mirrors.tencent.com
OS_RELEASE_FULL_VERSION=`cat /etc/centos-release | sed -rn 's/^(CentOS Linux release )(.*)( \(Core\))/\2/p'`
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^# baseurl=|baseurl=|g' -e 's|^#baseurl=|baseurl=|g' -e 's|http://mirror.centos.org/centos|https://'${MIRROR}'/centos-vault|g' -e "s/7/${OS_RELEASE_FULL_VERSION}/g"  /etc/yum.repos.d/CentOS-SCLo-*.repo

# 安装依赖包
yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutil gcc gcc-++ openssl-devel ncurses-devel

openEuler 22.03/24.03 LTS和Kylin Server V11:

yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

AnolisOS 23:

yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

AnolisOS 8和OpenCloudOS 8:

yum install -y cmake gcc gcc-c++ bzip2 openssl-devel ncurses-devel libtirpc-devel rpcgen

OpenCloudOS 9:

yum install -y cmake gcc gcc-c++ systemd-devel openssl-devel ncurses-devel libtirpc-devel rpcgen

Kylin Server V10:

yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen

UOS Server V20:

yum install -y cmake ncurses-devel libtirpc-devel rpcgen

openSUSE Leap 15:

zypper install -y cmake gcc gcc-c++ libopenssl-devel ncurses-devel libtirpc-devel rpcgen

Ubuntu Server 24.04 LTS和Debian 13:

apt update
apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config libtirpc-dev

Ubuntu Server 22.04 LTS和Debian 11/12:

apt update
apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config

Ubunbu Server 18.04/20.04 LTS:

# 添加新的PPA源
add-apt-repository ppa:ubuntu-toolchain-r/test

# 替换地址为国内镜像站
sed -i.bak 's@http://ppa.launchpad.net@https://launchpad.proxy.ustclug.org@g' /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-bionic.list

# 安装依赖包
apt update
apt install -y cmake gcc-11 g++-11 libssl-dev libncurses5-dev pkg-config

# 设置gcc和g++的默认版本:
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11

CentOS 7和Ubuntu Server 18.04 LTS安装cmake:

cd /usr/local/src/

wget https://cmake.org/files/v3.31/cmake-3.31.7-linux-x86_64.tar.gz
tar xf cmake-3.31.7-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/cmake-3.31.7-linux-x86_64/bin/cmake /usr/bin/

AnolisOS 8、OpenCloudOS 8、Kylin Server V10、UOS Server V20和openSUSE Leap 15编译gcc:

cd /usr/local/src/

# 注意:这里需要编译安装gcc 11,不要装gcc 10,装了gcc 10在登录mysql之后就退出了,报错“Segmentation fault”。
wget https://mirrors.cloud.tencent.com/gnu/gcc/gcc-11.5.0/gcc-11.5.0.tar.gz
tar xf gcc-11.5.0.tar.gz
cd gcc-11.5.0

# 安装gcc依赖包
yum install -y bzip2

# 下载gcc依赖包
./contrib/download_prerequisites
2025-05-06 23:17:03 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "gmp-6.1.0.tar.bz2" [1]
2025-05-06 23:17:08 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.6.tar.bz2 [1287202/1287202] -> "mpfr-3.1.6.tar.bz2" [1]
2025-05-06 23:17:11 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "mpc-1.0.3.tar.gz" [1]
2025-05-06 23:17:22 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.6.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.

mkdir build
cd build/

# 执行configure
../configure --prefix=/usr --disable-multilib 
...
configure: creating ./config.status
config.status: creating Makefile

# 执行make
make -j 4 && make install
...
make[4]: Nothing to be done for 'install-data-am'.
make[4]: Leaving directory '/usr/local/src/gcc-11.5.0/build/x86_64-pc-linux-gnu/libatomic'
make[3]: Leaving directory '/usr/local/src/gcc-11.5.0/build/x86_64-pc-linux-gnu/libatomic'
make[2]: Leaving directory '/usr/local/src/gcc-11.5.0/build/x86_64-pc-linux-gnu/libatomic'
make[1]: Leaving directory '/usr/local/src/gcc-11.5.0/build'

2.4.2.4 下载并解压缩源码包

MySQL源码包下载,去“https://www.mysql.com/”网站下载,选择“DOWNLOADS”,如图88所示。

t88

图88 下载MySQL源码包

选择“MySQL Community (GPL) Downloads”,如图89所示。

t89

图89 下载MySQL源码包

然后选择“MySQL Community Server”,如图90所示。

t90

图90 下载MySQL源码包

然后版本选择“8.4.6 LTS”,操作系统选择“Source Code”,系统版本选择“All Operating Systems (Generic) (Architecture Independent)”,然后选择下面的“mysql-8.4.6.tar.gz”包后面的“Download”进行下载,如图91所示。

t91

图91 下载MySQL源码包

cd /usr/local/src/

# Rocky、Almalinux、CentOS、AnolisOS、OpenCloudOS、Kylin Server默认没有wget包,需要安装
yum install -y wget

# openEuler 22.03/24.03 LTS、AnolisOS 23、OpenCloudOS 9没有安装tar包,需要安装
yum install -y tar

wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.6.tar.gz

tar xf mysql-8.4.6.tar.gz

2.4.2.5 源码编译安装

编译安装说明 :

利用cmake编译,而利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译。

编译选项:https://dev.mysql.com/doc/refman/8.4/en/source-configuration-options.html。

MySQL cmake 一些常用的参数解释

-DCMAKE_INSTALL_PREFIX # MariaDB 的安装目录
-DMYSQL_DATADIR # MariaDB 数据存储路径
-DSYSCONFDIR # 配置文件目录
-DWITH_INNOBASE_STORAGE_ENGINE # 是否安装 innodb 存储引擎 - 参数:1 or 0
-DWITH_ARCHIVE_STORAGE_ENGINE # 是否安装 archive 存储引擎 - 参数:1 or 0
-DWITH_BLACKHOLE_STORAGE_ENGINE # 是否安装 blackhole 存储引擎 - 参数:1 or 0
-DWITH_DEBUG # 是 MariaDB 编译时的一个 CMake 参数,用于启用或禁用调试模式,1是启用,0是禁用
-DWITH_SSL # 用于指定是否启用 SSL 支持,system是使用系统已安装的 OpenSSL(推荐,依赖系统包)。
-DWITH_LIBWRAP # 用于控制是否启用 libwrap(TCP Wrappers)支持,0是禁用 libwrap,不启用 TCP Wrappers 支持,避免潜在的性能影响
-DENABLED_LOCAL_INFILE # 是否开启 load data infile 命令 - 参数:1 or 0
-DMYSQL_UNIX_ADDR # Unix socket 文件路径
-DDEFAULT_CHARSET # 默认字符集
-DDEFAULT_COLLATION # 校验字符
-DWITH_BOOST # 用于控制是否在构建项目时启用对 Boost 库 的支持。
-DFORCE_INSOURCE_BUILD # 用于 强制在源码目录内进行构建(in-source build),而不是推荐的外源码构建(out-of-source build)。设置该选项后:允许或强制你在源码目录中直接运行  cmake .  和  make ,不需要单独建 build 目录。
-DWITH_SYSTEMD # 是否 systemctl 管理 - 参数:1 or 0

进入mysql包解压的目录:

cd mysql-8.4.6/

执行cmake:

Rocky、AlmaLinux、CentOS、openEuler、AnolisOS、OpenCloudOS、Kylin Server、UOS Server、openSUSE、Ubuntu、Debian 11/12:

cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_SSL=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_SYSTEMD=1
...
-- Configuring done (35.7s)
-- Generating done (6.3s)
-- Build files have been written to: /usr/local/src/mysql-8.4.6

Debian 13:

cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_SSL=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DFORCE_INSOURCE_BUILD=1
...
-- Configuring done (34.5s)
-- Generating done (4.7s)
-- Build files have been written to: /usr/local/src/mysql-8.4.6

执行make:

make -j $(nproc) && make install

2.4.2.6 准备环境变量

echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh

chown -R mysql:mysql /apps/mysql/

2.4.2.7 生成数据库文件

# /data/mysql  会自动生成,但是/data/必须事先存在
# --initialize会生成一个初始化密码,--initialize-insecure生成空密码,两种方式任选一种

# 生成初始化密码
mysqld --initialize --user=mysql --datadir=/data/mysql
2025-04-30T14:21:27.126347Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2025-04-30T14:21:27.130746Z 0 [System] [MY-013169] [Server] /apps/mysql/bin/mysqld (mysqld 8.4.5) initializing of server in progress as process 45248
2025-04-30T14:21:27.133400Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2025-04-30T14:21:27.133406Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8mb3_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
2025-04-30T14:21:27.151145Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-04-30T14:21:27.413116Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-04-30T14:21:28.313966Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: q&VUtowtA6!. # “q&VUtowtA6!.”这个就是初始化密码
2025-04-30T14:21:29.694317Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.

# 生成空密码的root用户
[root@rocky10 mysql-8.4.6]# mysqld --initialize-insecure --user=mysql --basedir=/apps/mysql --datadir=/data/mysql
2025-09-14T13:44:06.074773Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2025-09-14T13:44:06.079503Z 0 [System] [MY-013169] [Server] /apps/mysql/bin/mysqld (mysqld 8.4.6) initializing of server in progress as process 75104
2025-09-14T13:44:06.103501Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-09-14T13:44:06.376707Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-09-14T13:44:07.103686Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2025-09-14T13:44:08.629823Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.

2.4.2.8 准备配置文件

cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/apps/mysql/
datadir=/data/mysql
port=3306
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid

[client]
port=3306
socket=/data/mysql/mysql.sock
EOF

2.4.2.9 准备启动脚本并启动服务

Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、 Kylin Server、UOS Server、openSUSE:

cp /apps/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

Ubuntu Server 24.04 LTS:

cp /apps/mysql/usr/lib/systemd/system/mysqld.service /lib/systemd/system/

Ubuntu Server 18.04/20.04/22.04 LTS和Debian 11/12没有mysqld.service,需要单独写配置文件:

cat > /lib/systemd/system/mysqld.service  <<EOF
# Copyright (c) 2015, 2025, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
#
# systemd service file for MySQL forking server
#

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
# hence, + prefix is used

# Needed to create system tables
ExecStartPre=+/apps/mysql/bin/mysqld_pre_systemd

# Start main service
ExecStart=/apps/mysql/bin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false
EOF

Debian 13没有mysqld.service,需要单独写配置文件:

cat > /lib/systemd/system/mysqld.service  <<EOF
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/apps/mysql/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

设置MySQL服务开机启动并运行:

systemctl daemon-reload && systemctl enable --now mysqld

2.4.2.10 修改口令

# 如果使用的是空密码,就不需要修改口令
mysqladmin -u root -p'q&VUtowtA6!.' password 123456
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

2.4.2.11 登录测试

[root@rocky10 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.6 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------
mysql  Ver 8.4.6 for Linux on x86_64 (Source distribution)

Connection id:        8
Current database:    
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        8.4.6 Source distribution
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /data/mysql/mysql.sock
Binary data as:        Hexadecimal
Uptime:            26 min 36 sec

Threads: 2  Questions: 6  Slow queries: 0  Opens: 120  Flush tables: 3  Open tables: 36  Queries per second avg: 0.003
--------------

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit
Bye

2.4.2.12 一键安装MySQL 8.4源码编译的脚本

Shell脚本源码地址:

Gitee:https://gitee.com/raymond9/shell

Github:https://github.com/raymond999999/shell

可以去上面的Gitee或Github代码仓库拉取脚本。

[root@rocky10 ~]# cat install_mysql_8.4_source_v2.sh
#!/bin/bash
#
#**********************************************************************************
#Author:        Raymond
#QQ:            88563128
#MP:            Raymond运维
#Date:          2025-10-04
#FileName:      install_mysql_8.4_source_v2.sh
#URL:           https://wx.zsxq.com/group/15555885545422
#Description:   The mysql source script install supports 
#               “Rocky Linux 8, 9 and 10, AlmaLinux 8, 9 and 10, CentOS 7, 
#               CentOS Stream 8, 9 and 10, openEuler 22.03 and 24.03 LTS, 
#               AnolisOS 8 and 23, OpenCloudOS 8 and 9, Kylin Server v10 and v11, 
#               UOS Server v20, Ubuntu Server 18.04, 20.04, 22.04 and 24.04 LTS,  
#               Debian 11 , 12 and 13, openSUSE Leap 15“ operating systems.
#Copyright (C): 2025 All rights reserved
#**********************************************************************************
COLOR="echo -e \\033[01;31m"
END='\033[0m'

os(){
   
    . /etc/os-release
    MAIN_NAME=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
    if [ ${MAIN_NAME} == "Kylin" ];then
        MAIN_VERSION_ID=`sed -rn '/^VERSION_ID=/s@.*="([[:alpha:]]+)(.*)"$@\2@p' /etc/os-release`
    else
        MAIN_VERSION_ID=`sed -rn '/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
    fi
}

os
SRC_DIR=/usr/local/src
INSTALL_DIR=/apps/mysql
DATA_DIR=/data/mysql

MYSQL_VERSION=8.4.6
MYSQL_URL='https://cdn.mysql.com//Downloads/MySQL-8.4/'
MYSQL_FILE="mysql-${MYSQL_VERSION}.tar.gz"

CMAKE_URL='https://cmake.org/files/v3.31/'
CMAKE_FILE='cmake-3.31.7-linux-x86_64.tar.gz'

GCC_INSTALL_DIR=/usr
GCC_URL='https://mirrors.cloud.tencent.com/gnu/gcc/gcc-11.5.0/'
GCC_FILE='gcc-11.5.0.tar.gz'
GMP_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
GMP_FILE='gmp-6.1.0.tar.bz2'
MPFR_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
MPFR_FILE='mpfr-3.1.6.tar.bz2'
MPC_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
MPC_FILE='mpc-1.0.3.tar.gz'
ISL_URL='http://gcc.gnu.org/pub/gcc/infrastructure/'
ISL_FILE='isl-0.18.tar.bz2'

check_mysql_file(){
   
    if [ ${MAIN_NAME} == "Rocky" -o ${MAIN_NAME} == "AlmaLinux" -o ${MAIN_NAME} == "CentOS" -o ${MAIN_NAME} == "Anolis" -o ${MAIN_NAME} == "OpenCloudOS" -o ${MAIN_NAME} == "Kylin" ];then
        rpm -q wget &> /dev/null || {
    ${COLOR}"安装wget工具,请稍等......"${END};yum -y install wget &> /dev/null; }
    fi
    if [ ! -e ${MYSQL_FILE} ];then
        ${COLOR}"缺少${MYSQL_FILE}文件!"${END}
        ${COLOR}'开始下载MySQL源码包......'${END}
        wget ${MYSQL_URL}${MYSQL_FILE} || {
    ${COLOR}"MySQL源码包下载失败!"${END}; exit; }
    else
        ${COLOR}"${MYSQL_FILE}相关文件已准备好!"${END}
    fi
}

check_cmake_file(){
   
    if [ ! -e ${CMAKE_FILE} ];then
        ${COLOR}"缺少${CMAKE_FILE}文件!"${END}
        ${COLOR}'开始下载cmake二进制包......'${END}
        wget ${CMAKE_URL}${CMAKE_FILE} || {
    ${COLOR}"cmake二进制包下载失败!"${END}; exit; }
    else
        ${COLOR}"${CMAKE_FILE}相关文件已准备好!"${END}
    fi
}

check_gcc_file(){
   
    if [ ! -e ${GCC_FILE} ];then
        ${COLOR}"缺少${GCC_FILE}文件!"${END}
        ${COLOR}'开始下载gcc源码包......'${END}
        wget ${GCC_URL}${GCC_FILE} || {
    ${COLOR}"gcc源码包下载失败!"${END}; exit; }
    elif [ ! -e ${GMP_FILE} ];then
        ${COLOR}"缺少${GMP_FILE}文件!"${END}
        ${COLOR}'开始下载gmp源码包......'${END}
        wget ${GMP_URL}${GMP_FILE} || {
    ${COLOR}"gmp源码包下载失败!"${END}; exit; }
    elif [ ! -e ${MPFR_FILE} ];then
        ${COLOR}"缺少${MPFR_FILE}文件!"${END}
        ${COLOR}'开始下载mpfr源码包......'${END}
        wget ${MPFR_URL}${MPFR_FILE} || {
    ${COLOR}"mpfr源码包下载失败!"${END}; exit; }
    elif [ ! -e ${MPC_FILE} ];then
        ${COLOR}"缺少${MPC_FILE}文件!"${END}
        ${COLOR}'开始下载mpc源码包......'${END}
        wget ${MPC_URL}${MPC_FILE} || {
    ${COLOR}"mpc源码包下载失败!"${END}; exit; }
    elif [ ! -e ${ISL_FILE} ];then
        ${COLOR}"缺少${ISL_FILE}文件!"${END}
        ${COLOR}'开始下载isl源码包......'${END}
        wget ${ISL_URL}${ISL_FILE} || {
    ${COLOR}"isl源码包下载失败!"${END}; exit; }
    else
        ${COLOR}"gcc相关文件已准备好!"${END}
    fi
}

check_file(){
   
    cd  ${SRC_DIR}
    check_mysql_file
    if [ ${MAIN_NAME} == "CentOS" -a ${MAIN_VERSION_ID} == 7 ];then
        check_cmake_file
    fi
    if [ ${MAIN_NAME} == "Ubuntu" -a ${MAIN_VERSION_ID} == 18 ];then
        check_cmake_file
    fi
    if [ ${MAIN_NAME} == 'Anolis' -a ${MAIN_VERSION_ID} == 8 ];then
        check_gcc_file
    fi
    if [ ${MAIN_NAME} == 'OpenCloudOS' -a ${MAIN_VERSION_ID} == 8 ];then
        check_gcc_file
    fi
    if [ ${MAIN_NAME} == 'Kylin' -a ${MAIN_VERSION_ID} == 10 ];then
        check_gcc_file
    fi
    if [ ${MAIN_NAME} == 'UOS' -a ${MAIN_VERSION_ID} == 20 ];then
        check_gcc_file
    fi
    if [ ${MAIN_NAME} == 'openSUSE' -a ${MAIN_VERSION_ID} == 15 ];then
        check_gcc_file
    fi
}

install_cmake(){
   
    ${COLOR}'开始安装cmake,请稍等......'${END}
    tar xf ${CMAKE_FILE} -C /usr/local/
    CMAKE_DIR=`echo ${CMAKE_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s /usr/local/${CMAKE_DIR}/bin/cmake /usr/bin/
}

install_gcc(){
   
    ${COLOR}'开始编译安装gcc,请稍等......'${END}
    tar xf ${GCC_FILE}
    GCC_DIR=`echo ${GCC_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    mv ${GMP_FILE} ${MPFR_FILE} ${MPC_FILE} ${ISL_FILE} ${GCC_DIR}
    cd ${GCC_DIR}
    ./contrib/download_prerequisites
    mkdir build
    cd build
    ../configure --prefix=${GCC_INSTALL_DIR} --disable-multilib 
    make -j $(nproc) && make install
    [ $? -eq 0 ] && ${COLOR}"gcc编译安装成功!"${END} ||  {
    ${COLOR}"gcc编译安装失败,退出!"${END};exit; }
}

install_mysql(){
   
    [ -d ${INSTALL_DIR} ] && {
    ${COLOR}"MySQL数据库已存在,安装失败!"${END};exit; }
    ${COLOR}"开始安装MySQL数据库......"${END}
    if [ ${MAIN_NAME} == "openSUSE" ];then
        id mysql &> /dev/null || {
    groupadd -r mysql && useradd -s /sbin/nologin -d  ${DATA_DIR} -r -g mysql mysql ; ${COLOR}"成功创建mysql用户!"${END}; }
    else
        id mysql &> /dev/null || {
    useradd -r -s /sbin/nologin -d ${DATA_DIR} mysql ; ${COLOR}"成功创建mysql用户!"${END}; }
    fi
    [ -d ${DATA_DIR} ] || mkdir -p ${DATA_DIR}
    chown -R mysql:mysql ${DATA_DIR}
    ${COLOR}'开始安装MySQL依赖包,请稍等......'${END}
    if [ ${MAIN_NAME} == "Rocky" ];then
        if [ ${MAIN_VERSION_ID} == 8 ];then
            dnf config-manager --set-enabled powertools
        else
            dnf config-manager --set-enabled devel
        fi
    fi
    if [ ${MAIN_NAME} == "AlmaLinux" ];then
        if [ ${MAIN_VERSION_ID} == 8  ];then
            dnf config-manager --set-enabled powertools
        else
            dnf config-manager --set-enabled crb
        fi
    fi
    if [ ${MAIN_NAME} == "CentOS" ];then
       if [ ${MAIN_VERSION_ID} == 8  ];then
            dnf config-manager --set-enabled powertools
        else
            dnf config-manager --set-enabled crb
        fi
    fi
    if [ ${MAIN_NAME} == "OpenCloudOS" -a ${MAIN_VERSION_ID} == 8 ];then
        dnf config-manager --set-enabled PowerTools
    fi
    if [ ${MAIN_NAME} == "Rocky" ];then
        if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
            yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen boost-devel bison &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "AlmaLinux" ];then
        if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
            yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen boost-devel bison &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "CentOS" ];then
        if [ ${MAIN_VERSION_ID} == 7 ];then
            yum install -y centos-release-scl &> /dev/null
            MIRROR=mirrors.tencent.com
            OS_RELEASE_FULL_VERSION=`cat /etc/centos-release | sed -rn 's/^(CentOS Linux release )(.*)( \(Core\))/\2/p'`
            sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^# baseurl=|baseurl=|g' -e 's|^#baseurl=|baseurl=|g' -e 's|http://mirror.centos.org/centos|https://'${MIRROR}'/centos-vault|g' -e "s/7/${OS_RELEASE_FULL_VERSION}/g"  /etc/yum.repos.d/CentOS-SCLo-*.repo
            yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutil gcc gcc-++ openssl-devel ncurses-devel &> /dev/null
        elif [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
            yum install -y cmake gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen boost-devel bison &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "openEuler" ];then
        if [ ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
            yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Anolis" ];then
        if [ ${MAIN_VERSION_ID} == 8 ];then
            yum install -y cmake gcc gcc-c++ bzip2 openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == 'OpenCloudOS' ];then
        if [ ${MAIN_VERSION_ID} == 8 ];then
            yum install -y cmake gcc gcc-c++ bzip2 openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        else
            yum install -y cmake gcc gcc-c++ systemd-devel openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Kylin" ];then
        yum install -y cmake make gcc gcc-c++ openssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
    fi
    if [ ${MAIN_NAME} == "UOS" ];then
        if [ ${MAIN_VERSION_ID} == 20 ];then
            yum install -y cmake ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "openSUSE" ];then
        if [ ${MAIN_VERSION_ID} == 15 ];then
            zypper install -y cmake gcc gcc-c++ libopenssl-devel ncurses-devel libtirpc-devel rpcgen &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Ubuntu" ];then
        if [ ${MAIN_VERSION_ID} == 18 ];then
            add-apt-repository ppa:ubuntu-toolchain-r/test
            sed -i.bak 's@http://ppa.launchpad.net@https://launchpad.proxy.ustclug.org@g' /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-bionic.list
            apt update && apt install -y gcc-11 g++-11 libssl-dev libncurses5-dev pkg-config
            update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11
        elif [ ${MAIN_VERSION_ID} == 20 ];then
            add-apt-repository ppa:ubuntu-toolchain-r/test
            sed -i.bak 's@http://ppa.launchpad.net@https://launchpad.proxy.ustclug.org@g' /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-bionic.list
            apt update && apt install -y cmake gcc-11 g++-11 libssl-dev libncurses5-dev pkg-config
            update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 60 --slave /usr/bin/g++ g++ /usr/bin/g++-11
        elif [ ${MAIN_VERSION_ID} == 22 ];then
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config
        else
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config libtirpc-dev
        fi
    fi
    if [ ${MAIN_NAME} == 'Debian' ];then
        if [ ${MAIN_VERSION_ID} == 11 -o ${MAIN_VERSION_ID} == 12 ];then
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config
        else
            apt update && apt install -y cmake g++ libssl-dev libncurses5-dev pkg-config libtirpc-dev
        fi
    fi
    if [ ${MAIN_NAME} == "CentOS" -a ${MAIN_VERSION_ID} == 7 ];then
        install_cmake
    fi
    if [ ${MAIN_NAME} == 'Ubuntu' -a ${MAIN_VERSION_ID} == 18 ];then
        install_cmake
    fi
    if [ ${MAIN_NAME} == 'Anolis' -a ${MAIN_VERSION_ID} == 8 ];then
        install_gcc
    fi
    if [ ${MAIN_NAME} == 'OpenCloudOS' -a ${MAIN_VERSION_ID} == 8 ];then
        install_gcc
    fi
    if [ ${MAIN_NAME} == 'Kylin' -a ${MAIN_VERSION_ID} == 10 ];then
        install_gcc
    fi
    if [ ${MAIN_NAME} == 'UOS' -a ${MAIN_VERSION_ID} == 20 ];then
        install_gcc
    fi
    if [ ${MAIN_NAME} == 'openSUSE' -a ${MAIN_VERSION_ID} == 20 ];then
        install_gcc
    fi
    ${COLOR}'开始编译安装MySQL,请稍等......'${END}
    cd  ${SRC_DIR}
    if [ ${MAIN_NAME} == "openEuler" ];then
        if [ ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
            yum install -y tar &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "Anolis" ];then
        if [ ${MAIN_VERSION_ID} == 23 ];then
            yum install -y tar &> /dev/null
        fi
    fi
    if [ ${MAIN_NAME} == "OpenCloudOS" ];then
        if [ ${MAIN_VERSION_ID} == 9 ];then
            yum install -y tar &> /dev/null
        fi
    fi
    tar xf ${MYSQL_FILE}
    MYSQL_DIR=`echo ${MYSQL_FILE}| sed -nr 's/^(.*[0-9]).*/\1/p'`
    cd ${MYSQL_DIR}
    if [ ${MAIN_NAME} == "Debian" -a ${MAIN_VERSION_ID} == 13 ];then
        cmake . \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
        -DMYSQL_DATADIR=${DATA_DIR}/ \
        -DSYSCONFDIR=/etc/ \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
        -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
        -DWITH_DEBUG=0 \
        -DWITH_SSL=system \
        -DWITH_LIBWRAP=0 \
        -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_UNIX_ADDR=${DATA_DIR}/mysql.sock \
        -DDEFAULT_CHARSET=utf8mb4 \
        -DDEFAULT_COLLATION=utf8mb4_general_ci \
        -DFORCE_INSOURCE_BUILD=1
    else
        cmake . \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
        -DMYSQL_DATADIR=${DATA_DIR}/ \
        -DSYSCONFDIR=/etc/ \
        -DWITH_INNOBASE_STORAGE_ENGINE=1 \
        -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
        -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
        -DWITH_DEBUG=0 \
        -DWITH_SSL=system \
        -DWITH_LIBWRAP=0 \
        -DENABLED_LOCAL_INFILE=1 \
        -DMYSQL_UNIX_ADDR=${DATA_DIR}/mysql.sock \
        -DDEFAULT_CHARSET=utf8mb4 \
        -DDEFAULT_COLLATION=utf8mb4_general_ci \
        -DFORCE_INSOURCE_BUILD=1 \
        -DWITH_SYSTEMD=1
    fi
    make -j $(nproc) && make install
    [ $? -eq 0 ] && ${COLOR}"MySQL编译安装成功!"${END} ||  {
    ${COLOR}"MySQL编译安装失败,退出!"${END};exit; }
    echo 'PATH='${INSTALL_DIR}'/bin:$PATH' > /etc/profile.d/mysql.sh
    . /etc/profile.d/mysql.sh
    chown -R mysql:mysql ${INSTALL_DIR}
    mysqld --initialize-insecure --user=mysql --basedir=${INSTALL_DIR} --datadir=${DATA_DIR}
    cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=${INSTALL_DIR}
datadir=${DATA_DIR}
port=3306
socket=${DATA_DIR}/mysql.sock 
log-error=${DATA_DIR}/mysql.log
pid-file=${DATA_DIR}/mysql.pid 

[client]
port=3306
socket=${DATA_DIR}/mysql.sock
EOF
    if [ ${MAIN_NAME} == "Rocky" -o ${MAIN_NAME} == "AlmaLinux" -o ${MAIN_NAME} == "CentOS" -o ${MAIN_NAME} == "openEuler" -o ${MAIN_NAME} == "Anolis" -o ${MAIN_NAME} == "OpenCloudOS" -o ${MAIN_NAME} == "Kylin" -o ${MAIN_NAME} == "UOS" -o ${MAIN_NAME} == "openSUSE" ];then
        cp ${INSTALL_DIR}/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
    elif [ ${MAIN_NAME} == "Ubuntu" ];then
        if [ ${MAIN_VERSION_ID} == 24 ];then    
            cp ${INSTALL_DIR}/usr/lib/systemd/system/mysqld.service /lib/systemd/system/
        fi
    elif [ ${MAIN_NAME} == "Debian" ];then
        if [ ${MAIN_VERSION_ID} == 13 ];then    
            cat > /lib/systemd/system/mysqld.service  <<EOF
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=${INSTALL_DIR}/bin/mysqld --defaults-file=/etc/my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
        fi
    else
       cat > /lib/systemd/system//mysqld.service  <<EOF
# Copyright (c) 2015, 2025, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is designed to work with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have either included with
# the program or referenced in the documentation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
#
# systemd service file for MySQL forking server
#

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=notify

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
# hence, + prefix is used

# Needed to create system tables
ExecStartPre=+${INSTALL_DIR}/bin/mysqld_pre_systemd

# Start main service
ExecStart=${INSTALL_DIR}/bin/mysqld $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

RestartPreventExitStatus=1

# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1

PrivateTmp=false
EOF
    fi
    systemctl daemon-reload && systemctl enable --now mysqld &> /dev/null
    [ $? -ne 0 ] && {
    ${COLOR}"数据库启动失败,退出!"${END};exit; }
    ${COLOR}"${PRETTY_NAME}操作系统,MySQL数据库安装完成!"${END}
}

main(){
   
    check_file
    install_mysql
}

if [ ${MAIN_NAME} == "Rocky" ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 -o ${MAIN_VERSION_ID} == 10 ];then
        main
    fi
elif [ ${MAIN_NAME} == "AlmaLinux" ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 -o ${MAIN_VERSION_ID} == 10 ];then
        main
    fi
elif [ ${MAIN_NAME} == "CentOS" ];then
    if [ ${MAIN_VERSION_ID} == 7 -o ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 -o ${MAIN_VERSION_ID} == 10 ];then
        main
    fi
elif [ ${MAIN_NAME} == "openEuler" ];then
    if [ ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
        main
    fi
elif [ ${MAIN_NAME} == "Anolis" ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 23 ];then
        main
    fi
elif [ ${MAIN_NAME} == 'OpenCloudOS' ];then
    if [ ${MAIN_VERSION_ID} == 8 -o ${MAIN_VERSION_ID} == 9 ];then
        main
    fi
elif [ ${MAIN_NAME} == "Kylin" ];then
    if [ ${MAIN_VERSION_ID} == 10 -o ${MAIN_VERSION_ID} == 11 ];then
        main
    fi
elif [ ${MAIN_NAME} == "UOS" ];then
    if [ ${MAIN_VERSION_ID} == 20 ];then
        main
    fi
elif [ ${MAIN_NAME} == "openSUSE" ];then
    if [ ${MAIN_VERSION_ID} == 15 ];then
        main
    fi
elif [ ${MAIN_NAME} == "Ubuntu" ];then
    if [ ${MAIN_VERSION_ID} == 18 -o ${MAIN_VERSION_ID} == 20 -o ${MAIN_VERSION_ID} == 22 -o ${MAIN_VERSION_ID} == 24 ];then
        main
    fi
elif [ ${MAIN_NAME} == 'Debian' ];then
    if [ ${MAIN_VERSION_ID} == 11 -o ${MAIN_VERSION_ID} == 12 -o ${MAIN_VERSION_ID} == 13 ];then
        main
    fi
else
    ${COLOR}"此脚本不支持${PRETTY_NAME}操作系统!"${END}
fi
相关文章
|
8天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
7天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
337 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
19天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1331 8
|
7天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
329 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
6天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
18天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1417 87
|
6天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
7天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
258 82
2025年阿里云域名备案流程(新手图文详细流程)