news 2026/8/16 12:08:03

CrntOS7.9源码安装nginx,mysql9.7.1,jdk21

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CrntOS7.9源码安装nginx,mysql9.7.1,jdk21

CrntOS7.9源码安装nginx,mysql9.7.1,jdk21

  • 访问服务器

    //ssh userName@ip ssh root@47.97.9.202
  • 安装PCRE开发库

    sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel gcc make

    nginx

    wget nginx版本下载链接 //创建文件夹 mkdir /usr/java //将包移入文件夹中 mv 包名称 //转换到该文件夹下 cd /usr/java //查看文件夹内容 ls //解压包 tar -zxf 包名称 //准换到nginx文件夹下 cd 加压后的文件夹名称 //配置 nginx ./configure //编译安装 make&&make install //转换到sbin文件夹下 cd /usr/local/nginx/sbin //运行nginx ./nginx //查看结果 curl http://localhost:80 //将nginx添加到环境中 echo 'export PATH=$PATH:/usr/local/nginx/sbin' >> ~/.bashrc source ~/.bashrc //等当前请求处理完后推出nginx nginx -s quit //立即退出 nginx -s stop
  • 防火墙管理工具firewalld

    //启动防火墙管理工具firewalld sudo systemctl start firewalld //开机自启 sudo systemctl enable firewalld //确认状态 sudo systemctl stauts firewalld //查看当前开放的端口 sudo firewall-cmd --list-ports //开放80端口(永久) sudo firewall-cmd --permanet --add-port=80/tcp //重新加载使规则生效 sudo firewall-cmd --reload //关闭端口 sudo firewall-cmd --permanent --remove-port=80/tcp

MYSQL9.7.1

  • yum换源

    //备份原始配置文件 sudo cp /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo.bak //编辑配置文件 sudo vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo //替换源地址 [centos-sclo-rh] name=CentOS-7 - SCLo rh #mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh baseurl=https://mirrors.aliyun.com/centos/7/sclo/$basearch/rh/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo //为CentOS-SCLo-scl.repo执行相同操作 //清理并重建yum缓存 sudo yum clean all sudo yum makecache
  • 安装scl(高版本软件包管理核心工具)

    //安装scl源 sudo yum install -y centos-release-scl scl-utils //清理并重建YUM缓存 sudo yum clean all && yum makecache
  • 下载mysql9.7.1

    wget https://cdn.mysql.com/Downloads/MySQL-9.7/mysql-9.7.1.tar.gz //解压安装包 tar -zxvf mysql-9.7.1.tar.gz cd mysql-9.7.1 //创建用于编译的文件夹 cd /usr/local/src/mysql-9.7.1 mkdir build && cd build
  • 安装gcc12

    //安装Copr插件并启用第三方源 sudo yum install -y yum-plugin-copr //启用由mlampe维护的devtoolset-12仓库 sudo yum copr enable mlampe/devtoolset-12 //安装gcc12编译器 sudo yum install -y devtoolset-12-gcc devtoolset-12-gcc-c++ //激活gcc12环境 scl enable devtoolset-12 bash //验证版本 gcc --version
  • 安装CMake3.28.3

    cd /usr/local/src // 下载官方预编译包 wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3-linux-x86_64.tar.gz // 解压 tar xf cmake-3.28.3-linux-x86_64.tar.gz -C /usr/local/ // 建软链接 ln -sf /usr/local/cmake-3.28.3-linux-x86_64/bin/cmake /usr/local/bin/cmake ln -sf /usr/local/cmake-3.28.3-linux-x86_64/bin/cmake /usr/local/bin/cmake3 // 验证 cmake --version
  • 安装libscurl-devel(可以选择不安装,在cmake时加一行-DWITH_CURL=0)

    //libcurl-devel = 开发包 //包含:头文件 (*.h)、静态库、cmake/pkgconfig 配置文件,编译代码时才需要。 yum install -y libcurl-devel
  • 编译安装openssl 1.1.1

    //CentOS 7.9 的 OpenSSL 太老了(1.0.2),缺少 openssl/kdf.h(这个头文件 OpenSSL 1.1.0+ 才有)。MySQL 9.7 需要 OpenSSL 1.1.1+ cd /usr/local/src // 下载 OpenSSL 1.1.1 wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar xf openssl-1.1.1w.tar.gz cd openssl-1.1.1w // 编译安装到 /usr/local/openssl-1.1.1 ./config --prefix=/usr/local/openssl-1.1.1 --openssldir=/usr/local/openssl-1.1.1 shared make -j2(或者 make -j$(nproc) //使用所有 CPU 核心并行编译,最大化编译速度) make install //配置动态链接库 echo "/usr/local/openssl-1.1.1/lib" > /etc/ld.so.conf.d/openssl-1.1.1.conf ldconfig // 验证 /usr/local/openssl-1.1.1/bin/openssl version
  • 安装patchlf工具(Linux 下专门直接修改已编译好的 ELF 二进制(程序 /.so动态库 的工具)

    yum install -y patchelf
  • 安装openldap-devel cyrus-sasl-devel (不安装的话会有一个警告,不会影响后续编译,想消除警告删除即可)

    yum install -y openldap-devel cyrus-sasl-devel
  • 在创建好的编译目录build中执行cmake

    cd /usr/local/src/mysql-9.7.1/build //记得激活gcc12环境 cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DWITH_DEBUG=OFF -DWITH_UNIT_TESTS=OFF \ -DWITH_ROUTER=OFF \ -DPLUGIN_ARCHIVE=NO -DPLUGIN_BLACKHOLE=NO \ -DPLUGIN_FEDERATED=NO -DPLUGIN_EXAMPLE=NO \ -DWITH_SSL=/usr/local/openssl-1.1.1 \ -DWITH_CURL=system \ -DCMAKE_C_COMPILER=/opt/rh/devtoolset-12/root/usr/bin/gcc \ -DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-12/root/usr/bin/g++
  • 创建4gSwap交换分区(在编译大型软件(如 MySQL)时,如果物理内存不足,编译器(如cc1plus)极易因内存溢出(OOM)被系统强制终止。创建 Swap 交换分区是解决此问题的有效方法。)

    //创建4gSwap文件 sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 //设置文件权限 sudo chmod 600 /swapfile //格式化为Swap格式 sudo mkswap /swapfile //激活Swap sudo swapon /swapfile //验证是否生效 free -h //输出的 Swap 行中可以看到 4.0G 的总量。
  • MySQL 9.7.1 源码中使用了std::stringstream::view()std::string::view(),这两个方法是C++23才引入的(libstdc++ 13+ 才支持),而我们使用的是GCC 12,标准库中没有这两个方法。

    //在源码目录执行以下 Python 脚本,自动扫描并修复所有 .view() 调用: //在 C++ 中,std::stringstream 和 std::string 是两个完全不同的类。要判断一个 stringstream 是否为空,不能直接调用 .empty(),而应该检查其内部缓冲区的字符串是否为空。 //需要将 user.empty() 修改为 user.str().empty()。 cd /usr/local/src/mysql-9.7.1 python3 << 'PYEOF' import os, re src_dir = '/usr/local/src/mysql-9.7.1' fixed_files = [] # 变量名中包含这些关键词的,判定为 stringstream 类型 stream_keywords = ['ss', 'stream', 'sstream', 'oss', 'wss', 'user', 'host'] def fix_method(match): var_name = match.group(1) method_name = match.group(2) var_lower = var_name.lower() is_stream = any(k in var_lower for k in stream_keywords) if is_stream: if method_name == 'view': return f'{var_name}.str()' # stringstream.view() -> .str() elif method_name == 'empty': return f'{var_name}.str().empty()' # stringstream.empty() -> .str().empty() else: if method_name == 'view': return var_name # string.view() -> 变量本身 elif method_name == 'empty': return match.group(0) # string.empty() -> 保持不变 return match.group(0) for root, dirs, files in os.walk(src_dir): skip = any(s in root for s in ['boost', 'cmake', 'build', '.git', 'protobuf', 'zlib', 'pcre', 'lz4', 'zstd', 'snappy', 'bzip2', 're2']) if skip: continue for f in files: if f.endswith(('.cc', '.cpp', '.h', '.hh')): path = os.path.join(root, f) try: with open(path, 'r', encoding='utf-8', errors='ignore') as fp: content = fp.read() except: continue # 匹配 变量名.view() 或 变量名.empty() new_content = re.sub(r'(\w+)\.(view|empty)\(\)', fix_method, content) if new_content != content: with open(path, 'w') as fp: fp.write(new_content) for m in re.finditer(r'(\w+)\.(view|empty)\(\)', content): old = m.group(0) new = fix_method(m) if old != new: print(f' {path}: {old} -> {new}') fixed_files.append(path) print(f'\n共修复 {len(fixed_files)} 个文件')
    • 脚本执行完成后,回到build目录编译

      make -j2(或者 make -j$(nproc)) //这一步会耗费很长时间,2核2g两小时起 //编译完成后 make install

以上为本人遇到所有报错解决方案,故提前安装好以便一次性make成功,并非绝对方案,如有其他问题欢迎反馈

  • mysql配置

    # 创建不允许登录系统的 mysql 用户 useradd -r -s /sbin/nologin mysql # 赋予 mysql 目录权限 chown -R mysql:mysql /usr/local/mysql // 初始化 MySQL 数据目录(--initialize-insecure 表示 root 无密码,便于首次登录后再设置) /usr/local/mysql/bin/mysqld \ --initialize-insecure \ // 初始化时不生成随机 root 密码 --user=mysql \ // 以 mysql 用户身份运行初始化 --basedir=/usr/local/mysql \ // MySQL 安装目录 --datadir=/usr/local/mysql/data // 数据文件存放目录 // 写入 MySQL 主配置文件 /etc/my.cnf cat > /etc/my.cnf <<EOF [mysqld] user=mysql // 运行 mysqld 的系统用户 basedir=/usr/local/mysql // MySQL 安装根目录 datadir=/usr/local/mysql/data // 数据目录 port=3306 // 监听端口 socket=/tmp/mysql.sock // 本地连接用的 socket 文件路径 pid-file=/tmp/mysql.pid // 进程 PID 文件路径 character-set-server=utf8mb4 // 服务端默认字符集(支持完整 Unicode,含 emoji) default-storage-engine=INNODB // 默认存储引擎 max_connections=2048 // 最大并发连接数 EOF //配置环境变量 echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile source /etc/profile //启动mysql服务 mysqld_safe --user=mysql & //登录并设置管理员密码 mysql -u root ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword'; FLUSH PRIVILEGES; EXIT; //运行 MySQL 官方提供的安全配置脚本,一键加固数据库: mysql_secure_installation 按步骤为 输入当前密码 是否设置密码强度校验组件? 选择密码强度等级:输入 0 按回车:仅要求长度 ≥ 8,输入 1 按回车:要求长度 ≥ 8,包含数字、大小写、特殊字符,输入 2 按回车:在 1 的基础上增加字典文件校验 设置新的 Root 密码 移除匿名用户? 禁止 root 远程登录? 删除测试数据库? 重新加载权限表?

源码安装jdk21

wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz // 解压 tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/ // 配置环境变量 (编辑 /etc/profile) export JAVA_HOME=/usr/local/jdk-21.0.10 // 请根据实际解压后的文件夹名调整 export PATH=$PATH:$JAVA_HOME/bin // 生效并验证 source /etc/profile java -version
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 12:06:11

Typora深度指南:从Markdown入门到高效写作工作流实践

1. 从零开始&#xff1a;为什么我选择Typora作为主力写作工具 几年前&#xff0c;当我还在为各种文档格式的转换和排版头疼时&#xff0c;一个朋友向我推荐了Typora。当时市面上主流的Markdown编辑器&#xff0c;要么是左右分栏的“源码-预览”模式&#xff0c;要么就是功能复…

作者头像 李华
网站建设 2026/8/16 12:05:09

Windows Telnet客户端:网络端口连通性测试与排错实战指南

1. 从“古老”到“实用”&#xff1a;为什么今天还要了解Telnet&#xff1f; 在图形化界面和各类高级网络诊断工具层出不穷的今天&#xff0c;提到Telnet&#xff0c;很多人的第一反应可能是“这不是个上古协议吗&#xff1f;”。确实&#xff0c;Telnet作为一个诞生于1969年的…

作者头像 李华
网站建设 2026/8/16 12:02:33

智能体养成指南:如何通过反馈循环与知识库让OpenClaw越用越聪明

1. 项目概述&#xff1a;从“工具”到“伙伴”的进化 最近在和一些做自动化流程和智能助手的朋友聊天时&#xff0c;经常听到一个词&#xff1a;“养”。他们不是在讨论宠物&#xff0c;而是在说自己的“OpenClaw”。这个说法很有意思&#xff0c;它精准地捕捉到了现代智能工具…

作者头像 李华
网站建设 2026/8/16 11:52:51

服务器CPU与内存占用异常排查:从原理到实战的完整指南

1. 问题现象与核心矛盾解析 最近在排查一台线上服务器性能问题时&#xff0c;遇到了一个非常典型的“幽灵”现象&#xff1a;系统监控告警显示CPU使用率长期在90%以上&#xff0c;物理内存占用也逼近了90%&#xff0c;但当我打开任务管理器&#xff08;或者Linux下的top/htop命…

作者头像 李华
网站建设 2026/8/16 11:52:28

AI 智能体生成的迁移脚本我不敢跑:演练环境救了我三次

AI 智能体生成的迁移脚本我不敢跑:演练环境救了我三次 当AI智能体接管数据库迁移:从灾难到可靠协作的演进之路 周五下班前,我把那段由 AI 智能体 自动生成的数据库迁移脚本拖进终端时,手指在回车键上悬停了整整十秒--这已经是本周第三次,DeepSeek 和 Claude Code 联合作业输出…

作者头像 李华
网站建设 2026/8/16 11:49:37

多智能体翻译框架:用对比学习与语音语义嵌入破解双关语翻译难题

1. 项目概述&#xff1a;当双关语遇上多智能体翻译 “Pun Intended”这个标题本身就充满了文字游戏的趣味&#xff0c;它精准地指向了机器翻译领域一个公认的“硬骨头”——双关语翻译。双关语&#xff0c;这种依赖语言中同音异义、一词多义或特定文化背景来制造幽默或深意的修…

作者头像 李华