CentOS 9 环境编译部署 MySQL 8.0.30

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: CentOS 9 环境编译部署 MySQL 8.0.30

环境情况

CentOS 9 下载地址

发行版

cat /etc/os-release 命令可以查看

VERSION="9"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="9"
PLATFORM_ID="platform:el9"
PRETTY_NAME="CentOS Stream 9"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:centos:centos:9"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"

内核版本

uname -r 命令可以查看

5.14.0-210.el9.x86_64

一些小问题记录

源码包怎么下载

二进制文件怎么下载

CentOS 9 运行二进制文件会报错

  • 二进制文件,有的环境执行会出现 error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory 这样的报错
  • 这种都是缺少 lib 库造成的,可以使用 ldd 名称查看依赖
ldd mysql

可以看到 libtinfo.so.5 => not found

        linux-vdso.so.1 (0x00007ffc92bf3000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc0a8e60000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fc0a8e5b000)
        libcrypto.so.1.1 => /root/mysql-8.0.31-linux-glibc2.12-x86_64/bin/./../lib/private/libcrypto.so.1.1 (0x00007fc0a8800000)
        libssl.so.1.1 => /root/mysql-8.0.31-linux-glibc2.12-x86_64/bin/./../lib/private/libssl.so.1.1 (0x00007fc0a8400000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fc0a8e47000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fc0a8e42000)
        libtinfo.so.5 => not found
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc0a8000000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fc0a8d65000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc0a8d4a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fc0a7c00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fc0a8e6b000)

CentOS 9 现有的版本比 mysql 依赖的版本高,可以先通过 find 查找文件,然后软连接一下就好

find / -name "libtinfo.so.*"

主要看 lib64 这种目录

/var/tmp/dracut.5nyOQy/initramfs/usr/lib64/libtinfo.so.6.2
/var/tmp/dracut.5nyOQy/initramfs/usr/lib64/libtinfo.so.6
/var/tmp/dracut.BF9OGP/initramfs/usr/lib64/libtinfo.so.6.2
/var/tmp/dracut.BF9OGP/initramfs/usr/lib64/libtinfo.so.6
/var/tmp/dracut.GsBUVt/initramfs/usr/lib64/libtinfo.so.6.2
/var/tmp/dracut.GsBUVt/initramfs/usr/lib64/libtinfo.so.6
/var/tmp/dracut.udOLsV/initramfs/usr/lib64/libtinfo.so.6.2
/var/tmp/dracut.udOLsV/initramfs/usr/lib64/libtinfo.so.6
/usr/lib64/libtinfo.so.6
/usr/lib64/libtinfo.so.6.2
  • /usr/lib64/libtinfo.so.6 其实是一个软链接文件,实际的文件其实是 /usr/lib64/libtinfo.so.6.2
  • 新增一个软连接
ln -s /usr/lib64/libtinfo.so.6.2 /usr/lib64/libtinfo.so.5

再看一次 ldd mysql,就都正常了

        linux-vdso.so.1 (0x00007fff60d6d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f59e9bda000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f59e9bd5000)
        libcrypto.so.1.1 => /root/mysql-8.0.31-linux-glibc2.12-x86_64/bin/./../lib/private/libcrypto.so.1.1 (0x00007f59e9600000)
        libssl.so.1.1 => /root/mysql-8.0.31-linux-glibc2.12-x86_64/bin/./../lib/private/libssl.so.1.1 (0x00007f59e9200000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f59e9bc1000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f59e9bbc000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f59e9b8b000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f59e8e00000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f59e9525000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f59e9b70000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f59e8a00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f59e9be5000)

编译 mysql

编译的版本是 mysql-8.0.30

MySQL 下载地址

安装编译所需环境

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

检查是否安装了 libtirpc

rpm -qa | grep libtirpc

如果没安装,执行 yum install -y libtirpc

如果安装了,根据版本到 清华源 搜索 libtirpc-devel,之后执行下面的 rpm 命令,替换成对应版本的 url

rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/CRB/x86_64/os/Packages/libtirpc-devel-1.3.3-1.el9.x86_64.rpm

没有安装 openssl-devel 的报错

Not a supported openssl version in WITH_SSL=system.
Make sure you have specified a supported SSL version.
Valid options are :
openssl[0-9]+ (use alternative system library)
yes (synonym for system)
</path/to/custom/openssl/installation>
CMake Error at cmake/ssl.cmake:83 (MESSAGE):
  Please install the appropriate openssl developer package.
Call Stack (most recent call first):
  cmake/ssl.cmake:379 (FATAL_SSL_NOT_FOUND_ERROR)
  CMakeLists.txt:1768 (MYSQL_CHECK_SSL)
-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeOutput.log".
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeError.log".

没有安装 libtirpc-devel 的报错

CMake Warning at cmake/rpc.cmake:40 (MESSAGE):
  Cannot find RPC development libraries.  You need to install the required
  packages:
    Debian/Ubuntu:              apt install libtirpc-dev
    RedHat/Fedora/Oracle Linux: yum install libtirpc-devel
    SuSE:                       zypper install glibc-devel
Call Stack (most recent call first):
  cmake/rpc.cmake:87 (WARN_MISSING_SYSTEM_TIRPC)
  plugin/group_replication/libmysqlgcs/cmake/configure.cmake:34 (MYSQL_CHECK_RPC)
  plugin/group_replication/libmysqlgcs/CMakeLists.txt:34 (INCLUDE)
CMake Error at cmake/rpc.cmake:88 (MESSAGE):
  Could not find rpc/rpc.h in /usr/include or /usr/include/tirpc
Call Stack (most recent call first):
  plugin/group_replication/libmysqlgcs/cmake/configure.cmake:34 (MYSQL_CHECK_RPC)
  plugin/group_replication/libmysqlgcs/CMakeLists.txt:34 (INCLUDE)
-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeOutput.log".
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeError.log".

没有安装 rpcgen 的报错

CMake Warning at cmake/rpc.cmake:29 (MESSAGE):
  Cannot find rpcgen executable.  You need to install the required packages:
    Debian/Ubuntu:              apt install rpcsvc-proto
    RedHat/Fedora/Oracle Linux: yum install rpcgen
    SuSE:                       zypper install glibc-devel
Call Stack (most recent call first):
  plugin/group_replication/libmysqlgcs/cmake/rpcgen.cmake:112 (WARN_MISSING_RPCGEN_EXECUTABLE)
  plugin/group_replication/libmysqlgcs/CMakeLists.txt:53 (INCLUDE)
CMake Error at plugin/group_replication/libmysqlgcs/cmake/rpcgen.cmake:113 (MESSAGE):
  Could not find rpcgen
Call Stack (most recent call first):
  plugin/group_replication/libmysqlgcs/CMakeLists.txt:53 (INCLUDE)
-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeOutput.log".
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeError.log".

cmake 编译

MySQL cmake 一些常用的参数解释
  • -DCMAKE_INSTALL_PREFIX - MySQL 的安装目录
  • -DMYSQL_USER - MySQL 启动的用户名称,默认为 mysql
  • -DMYSQL_UNIX_ADDR - Unix socket 文件路径
  • -DSYSCONFDIR - 配置文件目录
  • DSYSTEMD_PID_DIR - PID 文件存储路径
  • -DDEFAULT_CHARSET - 默认字符集
  • -DDEFAULT_COLLATION - 校验字符
  • -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_PERFSCHEMA_STORAGE_ENGINE - 是否安装 perfschema 存储引擎 - 参数:1 or 0
  • -DMYSQL_DATADIR - MySQL 数据存储路径
  • -DWITH_BOOST - 指定 boost 目录,需要下载的源码包包含 boost
  • -DFORCE_INSOURCE_BUILD - 强制编译,centos 9 版本不建议编译,所以需要加参数强行编译 - 参数:1 or 0
  • -DWITH_SYSTEMD - 是否 systemctl 管理 - 参数:1 or 0
  • -DMYSQL_TCP_PORT - MySQL 默认端口
  • -DWITH_SSL - 是否支持 ssl - 参数:yes or no
  • -DENABLED_LOCAL_INFILE - 是否开启 load data infile 命令 - 参数:1 or 0

开始编译

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=$(pwd)/boost/boost_1_77_0 \
-DFORCE_INSOURCE_BUILD=1 \
-DWITH_SYSTEMD=1

没有 -DFORCE_INSOURCE_BUILD=1 参数会有如下报错

CMake Error at CMakeLists.txt:581 (MESSAGE):
  Please do not build in-source.  Out-of source builds are highly
  recommended: you can have multiple builds for the same source, and there is
  an easy way to do cleanup, simply remove the build directory (note that
  'make clean' or 'make distclean' does *not* work)
  You *can* force in-source build by invoking cmake with
  -DFORCE_INSOURCE_BUILD=1
-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-8.0.30/CMakeFiles/CMakeOutput.log".

如果在 cmake 的过程中有报错,当报错解决后,需要把源码目录中的 CMakeCache.txt 文件删除,然后再重新 cmake,不然还会报错

编译完成后会有类似如下的输出

-- CMAKE_BUILD_TYPE: RelWithDebInfo
-- COMPILE_DEFINITIONS: _GNU_SOURCE;_FILE_OFFSET_BITS=64;RAPIDJSON_NO_SIZETYPEDEFINE;RAPIDJSON_SCHEMA_USE_INTERNALREGEX=0;RAPIDJSON_SCHEMA_USE_STDREGEX=1;HAVE_CONFIG_H;__STDC_LIMIT_MACROS;__STDC_FORMAT_MACROS;_USE_MATH_DEFINES;LZ4_DISABLE_DEPRECATE_WARNINGS;HAVE_TLSv13
-- CMAKE_C_FLAGS: -fno-omit-frame-pointer -ftls-model=initial-exec  -O2 -g -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Wwrite-strings -Wjump-misses-init -Wstringop-truncation -Wmissing-include-dirs
-- CMAKE_CXX_FLAGS: -std=c++17 -fno-omit-frame-pointer -ftls-model=initial-exec  -O2 -g -Wall -Wextra -Wformat-security -Wvla -Wundef -Wmissing-format-attribute -Woverloaded-virtual -Wcast-qual -Wimplicit-fallthrough=5 -Wstringop-truncation -Wsuggest-override -Wmissing-include-dirs -Wextra-semi -Wlogical-op
-- CMAKE_CXX_FLAGS_DEBUG: -DSAFE_MUTEX -DENABLED_DEBUG_SYNC -g
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO: -ffunction-sections -fdata-sections -O2 -g -DNDEBUG -g1
-- CMAKE_CXX_FLAGS_RELEASE: -ffunction-sections -fdata-sections -O3 -DNDEBUG
-- CMAKE_CXX_FLAGS_MINSIZEREL: -ffunction-sections -fdata-sections -Os -DNDEBUG
-- CMAKE_C_LINK_FLAGS:
-- CMAKE_CXX_LINK_FLAGS:  -Wl,--copy-dt-needed-entries
-- CMAKE_EXE_LINKER_FLAGS
-- CMAKE_MODULE_LINKER_FLAGS
-- CMAKE_SHARED_LINKER_FLAGS
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/mysql-8.0.30

make 编译

make -j <cpu核心数> 可以加快 make 的编译速度,当然,不要超过自己 cpu 的核心数,也要注意自己的 cpu 当前空闲的核心数,别把 cpu 当烧烤架了

make -j 3 && make install

编译完成后会有类似如下的输出

-- Installing: /usr/local/mysql/man/man1/comp_err.1
-- Installing: /usr/local/mysql/man/man1/ibd2sdi.1
-- Installing: /usr/local/mysql/man/man1/innochecksum.1
-- Installing: /usr/local/mysql/man/man1/lz4_decompress.1
-- Installing: /usr/local/mysql/man/man1/my_print_defaults.1
-- Installing: /usr/local/mysql/man/man1/myisam_ftdump.1
-- Installing: /usr/local/mysql/man/man1/myisamchk.1
-- Installing: /usr/local/mysql/man/man1/myisamlog.1
-- Installing: /usr/local/mysql/man/man1/myisampack.1
-- Installing: /usr/local/mysql/man/man1/mysql.1
-- Installing: /usr/local/mysql/man/man1/mysql_config.1
-- Installing: /usr/local/mysql/man/man1/mysql_config_editor.1
-- Installing: /usr/local/mysql/man/man1/mysql_secure_installation.1
-- Installing: /usr/local/mysql/man/man1/mysql_ssl_rsa_setup.1
-- Installing: /usr/local/mysql/man/man1/mysql_tzinfo_to_sql.1
-- Installing: /usr/local/mysql/man/man1/mysql_upgrade.1
-- Installing: /usr/local/mysql/man/man1/mysqladmin.1
-- Installing: /usr/local/mysql/man/man1/mysqlbinlog.1
-- Installing: /usr/local/mysql/man/man1/mysqlcheck.1
-- Installing: /usr/local/mysql/man/man1/mysqldump.1
-- Installing: /usr/local/mysql/man/man1/mysqldumpslow.1
-- Installing: /usr/local/mysql/man/man1/mysqlimport.1
-- Installing: /usr/local/mysql/man/man1/mysqlman.1
-- Installing: /usr/local/mysql/man/man1/mysqlpump.1
-- Installing: /usr/local/mysql/man/man1/mysqlshow.1
-- Installing: /usr/local/mysql/man/man1/mysqlslap.1
-- Installing: /usr/local/mysql/man/man1/perror.1
-- Installing: /usr/local/mysql/man/man1/zlib_decompress.1
-- Installing: /usr/local/mysql/man/man8/mysqld.8
-- Installing: /usr/local/mysql/man/man1/mysqlrouter.1
-- Installing: /usr/local/mysql/man/man1/mysqlrouter_passwd.1
-- Installing: /usr/local/mysql/man/man1/mysqlrouter_plugin_info.1

验证 MySQL

创建 mysql 用户,设置为不可登录

useradd mysql -s /sbin/nologin

修改目录权限

chown -R mysql.mysql /usr/local/mysql

创建配置文件

vim /etc/my.cnf

简单配置一个

[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
port=3306
character_set_server=utf8
# lower_case_table_names 让MYSQL不区分表名大小写
lower_case_table_names=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysql according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/usr/local/mysql/mysql.log
pid-file=/usr/local/mysql/mysql.pid

添加 MySQL 命令到 PATH 变量

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile

MySQL 数据库初始化,这里使用的是无密码初始化,初始化完成后,会有如下警告:

[Warning] [MY-010453] [Server] root@localhost is created with an empty password !

Please consider switching off the --initialize-insecure option.

mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

配置 systemctl 管理 MySQL

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

启动 MySQL 服务

systemctl daemon-reload
systemctl enable mysqld --now

进入 MySQL,因为是无密码,直接回车就可以进入 MySQL

mysql -uroot -p

修改 root 用户密码,同样因为是无密码,直接回车就可以了

mysqladmin -u root -p password '<这里改成自己需要设定的密码>'


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
8月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
2103 16
|
7月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
1080 4
|
9月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
721 10
|
10月前
|
Linux 编译器 开发工具
在CentOS环境下升级GCC编译器的指南
总结:本文提供了一种方法来升级CentOS的GCC编译器,通过使用CentOS的软件集合和开发者工具集工具,可以比较平滑地进行升级。在整个过程中无需从源代码编译,这样既省去了复杂的编译过程,也避免了可能出现的与系统库不兼容的风险。请注意,使用第三方仓库可能会带来系统稳定性和安全性上的潜在影响。所有操作都应谨慎进行,并确保有相应的数据备份。
1319 19
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
577 41
|
9月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
451 0
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
792 17
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
481 18
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
668 11