LAMP 是 Linux 服务器上的一套经典 Web 服务器架构,由 Linux(操作系统)、Apache(Web 服务器)、MySQL(数据库)和 PHP/Python/Perl(动态脚本语言)组成。阿里云服务器提供了强大的计算资源,使得用户可以在云环境中搭建 LAMP 服务器来部署 Web 应用。
一、LAMP 架构概述
LAMP 是构建动态网站和 Web 应用的主流架构。它的每个组件在架构中发挥特定作用:
- Linux:作为服务器操作系统,提供稳定的运行环境。
- Apache:作为 Web 服务器,处理 HTTP 请求并将网页内容返回给客户端。
- MySQL:提供数据库服务,用于存储网站数据。
- PHP、Python、Perl:用于动态生成网页,与 MySQL 交互,处理用户请求。

下图展示了 LAMP 架构的工作流程:
- 用户访问网站,浏览器向 Apache 服务器发送 HTTP 请求。
- Apache 解析请求并调用 PHP 处理逻辑。
- PHP 脚本查询 MySQL 数据库获取数据。
- 数据返回给 PHP 处理,并最终由 Apache 服务器返回给用户。


二、阿里云服务器概述与网络配置
阿里云服务器(ECS)为用户提供弹性计算资源,并支持多种操作系统(如 Ubuntu)。在阿里云环境中,关键的网络配置包括公网 IP 与防火墙安全组设置。下面是云服务器控制台的监控界面:

¶1. 阿里云服务器基础
-
弹性扩展:根据实际需求调整 CPU、内存、带宽等资源。

-
公网 IP:使服务器可以被外部访问。你可以在阿里云控制台为 ECS 实例分配公网 IP。

-
安全组(防火墙):阿里云提供安全组管理工具,用于配置允许哪些端口和 IP 能访问你的服务器。
¶2. 防火墙与公网 IP 配置
¶公网 IP 配置
在阿里云 ECS 控制台:
- 为实例分配或绑定公网 IP。
- 在实例信息中查看公网 IP,并通过浏览器访问测试。
¶安全组规则设置
在 ECS 控制台的安全组配置中,添加以下入站规则:
- SSH:端口 22(允许远程登录)。
- HTTP:端口 80(用于网站访问)。
- HTTPS:端口 443(用于安全网站访问)。
- 可根据需要开放 MySQL(3306)、FTP 等端口。
默认安全组配置如下:

配置方式如下:

配置结果如下:

或在服务器上使用 iptables 命令手动配置:
1 | # 允许 HTTP 访问 |
三、LAMP 环境搭建(Ubuntu 实例)
在阿里云的 Ubuntu 服务器上,搭建 LAMP 环境主要包括安装 Apache、MySQL 和 PHP,并进行简单配置与验证。
¶0. 准备工作
在开始之前,我们一般要关闭所有防火墙(内置防火墙和 Linux 的软件防火墙)。
第一步就是关闭 selinux,这是美国航空安全局开发的内置防火墙。我们首先可以通过 getenforce 查询 selinux 状态,但基本只有CentOS 8 会有比较多的 seinux 的策略,CentOS7 不用。我们可以修改其默认配置,永久禁止其开机自启:
第二步是关闭内置的 firewalld 以及清空 iptables 规则:
1 | iptables -F |
¶1. 安装 Apache Web 服务器
1 | sudo apt update |
启动并设置 Apache 开机自启:
1 | sudo systemctl start apache2 |
验证:在浏览器访问 http://<公网_IP>/ 应显示 Apache 默认欢迎页面。
⚠️注意,如果之前没有配置安全组通过 80 端口,会显示:

按前面说的配置一下安全组就行,最终会显示如下页面:

下面为 CentOS 下的 Apache 服务器启动以及测试方式:

curl ifconfig.me可以拿到自己的 ip 地址
¶2. MySQL 数据库
¶安装
命令如下:
1 | sudo apt install mysql-server -y |
运行安全安装向导:
1 | sudo mysql_secure_installation |
按照提示设置 MySQL root 密码,移除匿名用户,禁止远程 root 登录。
验证:
1 | sudo systemctl status mysql |
在阿里云服务器安装时,默认的阿里云源是没有 mysql 的,只有 mariadb:

我们可以给服务器换源:
首先进入到 /etc/yum.repos.d,进行如下操作:

1 | wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm |
查看 mysql-community.repo 文件:

随后运行以下命令安装即可:
1 | yum -y install mysql-community-server |

可以输入 mysql_secure_installation 来进行密码设置:

登录后可以查看一些基本信息如下:

当使用源码编译的方式安装 mysql 时如果系统中没有安装 openssl 或其开发头文件和库,就会遇到报错缺少 openssl,这时我们需要做两步:
删除编译的目录:编译失败后,通常会有一个部分完成的目录(即使没有完全成功安装),此时需要删除该目录。
1 rm -rf /path/to/mysql/source/directory删除这个目录,确保不会使用到损坏的或不完整的文件。
安装 openssl:确保系统中安装了 openssl 和相关的开发工具。如果缺少开发头文件,还需要安装 openssl-devel 包。
1 yum install openssl openssl-devel重新编译 MySQL:在安装了 openssl 之后,重新进入 MySQL 源代码目录,开始新的编译安装。
1
2
3
4 cd /path/to/mysql/source
./configure # 配置 MySQL 编译选项
make # 编译 MySQL
make install # 安装 MySQL
¶配置与远程访问
现在我们可以对 MySQL 数据库进行配置与远程访问
1. 修改 MySQL 绑定地址
编辑 MySQL 配置文件:
1 | sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
找到 bind-address 字段,将其改为:
1 | bind-address = 0.0.0.0 |
保存后退出编辑器,然后重启 MySQL 服务:
1 | sudo systemctl restart mysql |
2. 创建远程访问用户
登录 MySQL 客户端:
1 | sudo mysql -u root -p |
在 MySQL 提示符下,执行以下 SQL 语句:
1 | CREATE USER 'admin'@'%' IDENTIFIED BY 'yourpassword'; |
退出 MySQL。
3. 安全注意
确保安全组允许 MySQL 端口(3306)的访问,或通过 SSH 隧道访问 MySQL 服务。
¶3. PHP 及相关模块
¶安装
命令如下:
1 | sudo apt install php libapache2-mod-php php-mysql -y |
验证 PHP 安装:
1 | php -v |
¶创建页面
为了确认 PHP 环境安装成功,我们可以创建一个简单的 phpinfo() 页面。
1. 创建 phpinfo.php 测试页面
将以下内容写入 /var/www/html/phpinfo.php:
1 | echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/phpinfo.php |
2. 访问测试页面
在浏览器中访问:
1 | http://<公网_IP>/phpinfo.php |
如果页面显示 PHP 的详细配置信息,说明 PHP 安装正确并且与 Apache 正常集成。(访问不成功可以尝试 systemctl restart httpd)

或者可以尝试些别的,我们可以使用 PHP 的数组、随机函数以及内置的日期函数生成动态内容
- 利用
array_rand()随机选择名言 - 使用
date()函数显示当前时间 - 输出简单的 HTML 页面

四、Discuz! 论坛部署
Discuz! 是一个基于 PHP 和 MySQL 的开源论坛程序,常用于搭建社区网站。下面介绍如何在 LAMP 环境中部署 Discuz!。

¶1. 下载并解压 Discuz! 安装包
我们要进入 Apache 的默认目录,可以通过 rpm -ql 来查找:

上面那些 share 的都可以不用管,只有最后一行数据是有用的,也就是我们要找的 Apache 的默认目录,进入 Apache 默认目录并下载:
1 | cd /var/www/html |
解压安装包:
1 | unzip Discuz_X3.4_SC_UTF8.zip |
将解压后的内容移动到网站根目录:
1 | sudo mv upload/* /var/www/html/ |

¶2. 安装 Discuz!
在浏览器中访问:
1 | http://<公网_IP>/install/ |

发现报错:

下面开始升级 PHP 版本。
1 | # 1. 更新系统并安装必要的软件包 |
经过一系列猛如虎的操作,PHP升级成功了,环境检查也不再报错了:

但下面又报错了,问题出在了目录权限,下面我们就把目录权限做修改。
¶3. 配置 Apache 目录权限
设置文件所有者为 www-data,并赋予适当权限:
1 | chmod -R 777 ./* |
¶
现在终于大功告成:

如果提示少了驱动,我们可以通过 yum install php-mysqli -y 安装
按照安装向导输入数据库信息:
- 数据库地址:localhost
- 数据库名称:discuz
- 数据库用户:admin
- 数据库密码:yourpassword


完成安装后,即可进入 Discuz! 后台管理,进一步配置论坛设置。

五、源码编译安装
我们现在要搞事情,我们现在准备清空整个 LAMP(Linux + Apache + MySQL + PHP)环境并从头开始重新用源码编译,以下是详细的步骤指南。
MySQL 5.6.31 + PHP 7.2.17
¶1. 清空原有环境
1 | # 1. 停止 Apache 和 MySQL 服务 |


¶2. 基础软件运行环境准备
在重新安装之前,确保系统安装了编译所需的工具:
1 | sudo yum groupinstall "Development Tools" |
还可以选择安装一些其他的开发包以避免可能存在的错误:
1 | sudo yum install gcc patch libffi-devel python-devel bzip2-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel net-tools vim -y |
注意:在开始后续操作之前一定要关闭防火墙(selinux 和 firewalld)
1 | [root@iZ7xv858yt7ltpn85a6qv8Z yum.repos.d]# systemctl status firewalld |
下载太慢可以更换yum源或dns源或换网络环境
¶3. 编译安装 MySQL
编译安装顺序:
- Apache 一定要先于 PHP
- Apache 和 MySQL没有明显的依赖关系,先后无所谓
- 在 PHP 3.5 之前,MySQL必须先于 PHP 编译,因为 PHP 需要实现连接数据库的功能,它通过 MySQL接口才能实现这一功能;在 3.5 之后 PHP 已经集成了一套连接 MySQL 数据库的代码,编译顺序无所谓了
¶创建 MySQL 用户
用于给 MySQL 的数据、进程设置相关的 user 属主:
1 | useradd -r -s /sbin/nologin mysql |
¶下载 MySQL
首先我们要创建一个源码目录用于下载对应软件:
1 | cd /usr/local |
我们可以在华为提供的库内下载需要的 MySQL 版本:

选择一个合适的版本:

下载源码并解压缩:
1 | wget https://repo.huaweicloud.com:8443/artifactory/mysql-local/Downloads/MySQL-5.6/mysql-5.6.49.tar.gz |
¶编译安装
进入解压缩后的目录可以发现,这里没有我们之前看到的 configure,只有 cmake,我们需要安装 cmake 命令。然后我们需要在 MySQL 的源码目录下,执行 cmake 命令以配置并生成 Makefile,然后编译源代码。可以将以下命令保存为 cmake.sh:
1 | cmake . \ |
下面是对这些参数的解释:
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql:指定 MySQL 安装路径
- -DMYSQL_DATADIR=/usr/local/mysql/data:指定 MySQL 数据目录
- -DENABLE_LOCAL_INFILE=1:启用 LOCAL 文件加载
- -DWITH_INNOBASE_STORAGE_ENGINE=1:启用 InnoDB 存储引擎
- -DMYSQL_TCP_PORT=3306:指定 MySQL 使用的 TCP 端口
- -DDEFAULT_CHARSET=utf8mb4:指定默认字符集为 utf8mb4
- -DDEFAULT_COLLATION=utf8mb4_general_ci:指定默认排序规则为 utf8mb4_general_ci
- -DWITH_EXTRA_CHARSETS=all:启用所有额外字符集
- -DMYSQL_USER=mysql:指定 MySQL 的默认用户
然后对文件需要修改权限,加入可执行权限,首先运行 cmake.sh

运行成功如上图后,执行 make,因为时间不是太久就直接选择前台执行了:


运行成功后如上图所示,再执行 make install,就会发现 /usr/local/ 路径下多了 mysql 这个文件夹,随后将文件夹里的 bin 目录添加到 ~/.bashrc 即可:
1 | export PATH=$PATH:/usr/local/mysql/bin |
保存并激活即可。
¶删除旧文件残留
我们接下来要检查是否有旧的 mysql 数据文件残留,发现存在我们将其进行移动备份:

¶修改文件属主属组
可以看到现在文件的属主和属组都还是 root,我们需要将其修改为 mysql:

¶初始化 mysql
现在我们开始尝试连接 mysql 客户端,但会报错,说无法连接到本地的 mysql 服务端:

Linux 的软件启动后会有两种形式提供给客户端去访问:
ip:port形式,如0.0.0.0:3306,网络连接方式socket本地套接字文件形式,本地进程套接字文件,启动mysql,提供它的本地连接进程文件tmp/mysql.sock,只要这个文件存在,mysql就是启动的
总之就是 mysql 还没启动,因此此时首先要对 mysql 数据库初始化,生成一些必备的数据文件,因为 mysql 要设置账号密码总得有一个库和表可以存储。具体操作如下:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z mysql-5.6.49]# cd /usr/local/mysql |
运行一长串之后我们会看到两个 OK,这说明初始化成功:

¶创建启动脚本
因为我们是手动编译安装,还需要自己创建启动脚本:
1 | cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql |
我们可以查看这个文件:

此时使用 service 命令,会去读取 /etc/init.d 下的脚本文件,启动 mysql:

¶设置密码与登录

¶4. 编译安装 Apache
¶安装依赖包 apr
apr(Apache portable run-time Libraries,Apache 可移植运行库),主要是为上层的应用程序提供一个可以跨越多操作系统平台的底层支持接口库。下载地址为:https://archive.apache.org/dist/apr/,进入该地址会有如下内容:

一直往下拉会有一些可以下载的安装包,具体的地址可以用下面的:
1 | wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2 |
可能由于这个版本的一个 bug,这里我们需要修改一个配置:
1 | vim configure |
如果不指定配置参数,就会安装到默认路径 /usr/local,一般推荐这些小的依赖库不要修改路径,我们直接 ./configure:

然后执行编译三部曲的后两步即可:
1 | make && make install |

¶安装基础库 apr-util
完整的 APR(Apache 可移植运行库)实际上包含了三个开发包:apr,apr-util 和 apr-iconv,每一个包分别独立开发,并拥有自己的版本。apr-util这个库中也是包含了一些常用的开发组件,这些组件与 apr 目录下的相比,它们与 Apache 的关系更加密切一些,比如存储段和存储段组、加密等。这个包还是在刚刚的 https://archive.apache.org/dist/apr/ 下可以找到
1 | wget https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2 |
然后还是三部曲,这里的 configure 要加个参数:
1 | ./configure --with-apr=/usr/local/apr/bin/apr-1-config |

此时 apr 和 apr-util 库就生成了一些基础的 Linux 文件(动态链接库,和 C 语言相关),我们需要告诉 Linux 系统多了一些这些工具,Linux 才能读取到这些信息,才能给 Apache 调用。
1 | # ls /usr/local/apr/lib/ |
通常,库文件会被安装到标准的系统目录,如
/lib,/lib64,/usr/lib/,/usr/lib64等地方,这些路径是默认的库文件搜索路径,因此系统和应用程序能够找到它们。但是,如果某个软件 A 将库文件安装到一个非标准目录,例如
/usr/local/A/lib,那么你需要将该路径添加到系统的动态链接库搜索路径中。否则,系统和其他程序将无法找到这个库文件。
ldconfig是一个用于动态链接库管理的命令,它的主要作用是搜索系统中的共享动态链接库,并将它们添加到缓存中,以供程序使用。ldconfig会在以下路径中查找共享库:
- 默认搜索路径:
/lib,/lib64,/usr/lib/,/usr/lib64- 动态库配置文件:
/etc/ld.so.conf中列出的路径如果你将新的库文件安装到非标准路径(如
/usr/local/A/lib),你需要通过以下方式更新搜索路径:
- 编辑
/etc/ld.so.conf或添加一个新的.conf文件到/etc/ld.so.conf.d/目录。- 运行
ldconfig命令,让系统知道这个新的路径,从而能够找到并使用该路径下的动态库。
具体命令如下:
1 | echo "/usr/local/apr/lib" >> /etc/ld.so.conf |
¶编译 Apache步骤
回到刚刚的下载安装包的目录,再上一級找到 httpd 获取链接进行 wget:
1 | wget https://archive.apache.org/dist/httpd/httpd-2.4.37.tar.bz2 |
制作配置脚本:
1 | ./configure \ |
添加执行权限并执行脚本:
1 | chmod +x apache-configure.sh |

直接成功结果如上,最后 make & make install 即可,最后安装到了 /usr/local/apache2 下。
¶修改配置文件
¶语言支持
我们修改 /usr/local/apache2/conf 里的 httpd.conf 的参数以获得中文语言支持,我们删除第 159 行以及 481 行的注释即可:


我们会发现如果想要使用一些功能,只需要在这里取消一些功能的对应注释即可~
¶PHP 支持
另外我们还需要开启 PHP 的插件,当有用户访问 PHP 程序时,Apache 自动转发给 PHP 去解析,168 和 169 行的意思是以 .php 结尾的文件都认为是 PHP 程序文件

并且要设置当访问这台机器的时候,当什么都不添加时会访问磁盘上的 index.php 文件:
原本是这样的:

要改成这样(谁在前面就先解析谁):

这行参数的作用就是会让原本只是访问 8.134.207.88 自动变成访问 8.134.207.88/index.php。
¶HTML 文件路径
关于网站默认的首页 HTML 文件存放的目录路径由以下参数控制:

¶修改子配置文件
要修改该配置文件使得优先支持中文:
1 | vim /usr/local/apache2/conf/extra/httpd-languages.conf |
取消第 19 行的注释,将原本的 DefaultLanguage nl 修改为 DefaultLanguage zh-CN
以及调整第 79 行的优先级,将中文的优先级放在第一个:
1 | LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-TW |
¶域名设置
可以在主配置文件的这里添加域名:

¶5. 编译安装 PHP
¶编译与安装
这里比较简单,我们直接快速操作了:
1 | wget https://museum.php.net/php7/php-7.2.17.tar.xz |
在文件中写入:
1 | ./configure \ |
然后依次执行chmod +x configure_php.sh、 ./configure_php.sh 与 make && make install 即可。


¶检查 Apache是否支持PHP
进入 Apache 的网页根目录 /usr/local/apache2/htdocs,创建一个 PHP 文件,查看是否支持:

启动 Apache:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z php-7.2.17]# service apache start |

查看对应的 IP 地址,访问正常:

由于默认端口和默认文件都已经配置好了,就不需要再写端口和 index.php 了
¶6. WordPress
下载源码:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z source-code]# wget https://cn.wordpress.org/wordpress-4.7.3-zh_CN.tar.gz |
访问网站会有下面的内容:

填写基本信息后发现我们还没有创建这个数据库:

我们进入 MySQL 进行操作:

注意我们需要回到前面修改我们前面创建的数据库名,使得数据库名与我们创建的能对得上:

然后再执行一下傻瓜操作:

然后执行完下面这一步就结束了:

一个漂亮的博客管理页面就做好啦:

六、debug日志
¶1. 新版本 MySQL 安装凉经
这里我们创建文件夹的方式都一样:
1 | cd /usr/local |
同样在华为提供的库内下载需要的 MySQL 版本,我们选择了较新版的 8.0.25:

下载源码并解压缩:
1 | wget https://repo.huaweicloud.com:8443/artifactory/mysql-local/Downloads/MySQL-8.0/mysql-8.0.25.tar.gz |
¶🧰 关于 cmake 版本

在安装 MySQL 的时候我们需要使用 cmake 进行编译,首先我遇到了 cmake 的版本问题,我们通过升级 cmake 版本修正这个问题:

修改指令并尝试运行该文件
¶🧰 gcc 路径
好的,不出意外地再次报错

我们通过 cmak 命令中的 CMAKE_C_COMPILER和CMAKE_CXX_COMPILER` 变量来手动指定编译器路径。例如,假设 gcc 和 g++ 安装在默认路径下,尝试如下命令:
1 | cmake3 . \ |
依然不是很成功:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z mysql-8.0.25]# ./cmake.sh |
这条报错是在说 CMake 强烈建议不要在源代码目录内进行编译,因为这样会造成源代码目录的污染,无法轻松清理。理想的做法是 在源代码外的单独目录中进行构建。这个还比较好解决,如果我们非要在源代码目录中构建,可以通过使用 -DFORCE_INSOURCE_BUILD=1 强制进行构建,但这不是推荐的做法:
1 | # 强制在源代码目录内构建 |
推荐的做法是:
2. 在源代码目录之外创建一个新的目录进行构建
1 | # 返回到 /usr/local/software-mysql |
那我们使用后者吧:
在开始编译之前我们需要清理原来的 builds 文件:
1 | rm -rf /usr/local/software-mysql/mysql-8.0.25/CMakeFiles |
然后我们修改 cmake.sh 命令:
1 | cmake3 /usr/local/software-mysql/mysql-8.0.25 \ |
再运行它一次!我不信还会出错了!
然而。。。果然又有新的问题了。。。这次是 GCC 版本过低,MySQL 8.0.25 需要 GCC 5.3 或更高版本来进行编译:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z mysql-build]# ./cmake.sh |
¶🧰 关于 centos-release-scl 的一个小插曲(待解决)
我试图安装 centos-release-scl 进而安装新版本的 gcc,这个软件包提供了 Software Collections (SCL) 的支持。SCL 是一种在不影响系统默认软件版本的情况下,让用户安装和使用不同版本的软件包的机制。简单来说,它允许用户安装、使用与系统默认版本不同的软件版本,例如最新版本的 Python、GCC、Ruby、PHP 等,而不需要更改系统的默认版本。SCL 提供了以下优势:
- 你可以同时使用多个版本的相同软件,比如使用系统自带的老版本 Python,同时安装并使用新版本的 Python。
- 在不同的环境中切换版本变得更加灵活。
- 不会影响到系统自带的包,减少了与其他系统包的冲突风险。
安装命令很简单:
1 | sudo yum install centos-release-scl -y |
但安装完之后其他包的安装存在了问题,例如我原本准备执行这个命令安装 gcc:
1 | sudo yum install devtoolset-8-gcc* -y |
然而报了如下的错:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z mysql-build]# sudo yum install devtoolset-8-gcc* -y |
显示软件源可以看到多了两条:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z ~]# ls /etc/yum.repos.d/ |
以 CentOS-SCLo-scl.repo 为例:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z ~]# cat /etc/yum.repos.d/CentOS-SCLo-scl.repo |
我们只能先禁用他们:
1 | # 禁用 centos-sclo-sclo 仓库 |
这个限于目前的技术水平,暂时不知道是什么原因,我估计是梯子的问题,留待之后排查
¶🧰 继续解决前面的 gcc 版本问题
我们可以尝试直接源码编译
访问 GCC 的官方网站下载最新版本的源代码,并执行 configure 脚本以及编译步骤:
1 | wget http://ftp.gnu.org/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz |
这个编译过程特别耗时,对于 GCC 8.5.0 这种大型项目,单核 CPU 编译可能需要 6-12 小时,两核 CPU 的情况下,可能需要 3-6 小时 或更长时间。
编译完之后,我们还需要把这个 gcc 的路径加入到环境变量中,特别是 PATH 和 LD_LIBRARY_PATH,首先我们查找路径:
-
找到新 GCC 的安装路径。通常,
make install会将 GCC 安装到/usr/local/bin中。 -
通过以下命令检查新 GCC 是否安装在
/usr/local/bin:1
ls /usr/local/bin/gcc
如果文件存在,表示新的 GCC 已安装在该目录。
接下来在 ~/.bashrc 文件中添加新 GCC 的路径:
1 | export PATH=/usr/local/bin:$PATH |

然后退出并 source ~/.bashrc 即可,我们再次打印 gcc --version 会发现版本已经更新了:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z gcc-8.5.0]# vim ~/.bashrc |
¶🧰 Boost 依赖项
我们需要修改 cmake.sh 文件里的 gcc 的路径为最新安装的
1 | cmake3 /usr/local/software-mysql/mysql-8.0.25 \ |
然后清除目录下的 CMakeFiles 和 CMakeCache.txt:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z mysql-build]# rm -rf CMakeFiles |
现在出现了新的报错:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z mysql-build]# ./cmake.sh |
当前问题是 找不到 Boost 1.73.0 版本,这是 MySQL 8.0.25 的一个依赖项。
-
下载并安装 Boost 1.73.0:
1
2
3cd /usr/local/software-mysql/mysql-build
wget https://archives.boost.io/release/1.73.0/source/boost_1_73_0.tar.gz
tar -xvzf boost_1_73_0.tar.gz -
在
cmake.sh文件最后添加一行:1
-DWITH_BOOST=/usr/local/software-mysql/mysql-build/boost_1_73_0
-
然后执行
cmake.sh文件即可:
成功~
我们将所有 CPU 一起启动在后台安装,并将日志输出到 mysql_make_output.log:
1 | nohup make -j$(nproc) > mysql_make_output.log 2>&1 & |

胜利的曙光就在眼前~让我们拭目以待!!!
¶🧰 程序被系统终止(重新 make)
不出意外的是,又出问题了 👿

可能的原因如下:
1. 内存不足
编译 MySQL 这样的复杂程序时,特别是在使用
make -j$(nproc)进行并行编译时,系统可能会耗尽内存。cc1plus是g++编译器的一个关键部分,当系统的内存不足时,操作系统可能会终止该进程。解决方案:
- 增加系统的物理内存。
- 如果是虚拟机,考虑增加虚拟内存或增加物理内存。
- 如果不能增加内存,可以尝试减少并行任务数,使用
make -j2或者make -j1让编译过程使用较少的内存。2. SWAP空间不足
当内存不足时,系统会使用交换空间(SWAP)。如果 SWAP 空间不足,也会导致编译失败。
解决方案:
检查当前的 SWAP 空间:
1 swapon -s如果 SWAP 空间不足,可以通过以下命令增加 SWAP:
1
2
3
4 sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 # 创建一个 4GB 的交换文件
sudo chmod 600 /swapfile # 设置权限
sudo mkswap /swapfile # 设置交换文件
sudo swapon /swapfile # 启用交换文件3. CPU 或系统资源被占满
由于并行编译使用了大量的 CPU 核心,系统可能因资源消耗过高导致进程被杀死。
解决方案:
- 降低 make 命令的并行度,减少 CPU 核心数的使用,尝试 make -j2 或 make -j1。
4. 硬盘空间不足
如果磁盘空间不足,编译过程中的临时文件和输出文件可能无法正确写入磁盘,导致编译中断。
解决方案:
检查磁盘空间:
1 df -h如果磁盘空间不足,删除一些不必要的文件或扩展磁盘空间。
5. 系统限制
Linux 系统有时会根据进程的资源使用情况(如内存、CPU 时间等)进行限制,可能会在某些情况下杀死进程。
解决方案:
检查 ulimit 设置,增加进程允许使用的内存或文件描述符数:
1
2
3 ulimit -a # 查看所有限制
ulimit -n # 查看文件描述符限制
ulimit -u # 查看最大进程数限制
经过检查猜测大概率是内存不足的问题,现在我们需要使用 make clean 命令清理之前的编译结果,这会删除 make 过程中生成的所有中间文件和目标文件。
1 | make clean |
我们对交换空间、虚拟内存与 CPU 核数均做了优化:
-
按前面所说流程增加交换空间大小
1
2
3
4sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 # 创建一个 4GB 的交换文件
sudo chmod 600 /swapfile # 设置权限
sudo mkswap /swapfile # 设置交换文件
sudo swapon /swapfile # 启用交换文件 -
为了让交换空间在系统重启后自动生效,编辑 /etc/fstab 文件并添加以下内容:
1
/swapfile none swap sw 0 0
-
然后增加操作系统的虚拟内存限制,来避免进程因内存溢出而被杀死:
1
ulimit -v unlimited
-
最后再尝试使用单核 CPU 进行编译:
1
2
3
4./cmake.sh
nohup make -j1 > mysql_make_output.log 2>&1 &
# 使用下面命令查看日志
tail -f /usr/local/software-mysql/mysql-build/mysql_make_output.log
下面还是老样子,再次祈祷!

经过了漫长的等待,终于迎来了胜利!
再把这个 bin 的路径保存到 ~/.bashrc 并激活即可:

¶🧰 gcc 版本还是太低
看起来一切都很顺利,但在最后的初始化这一步还是凉了~

运行以下命令来列出 libstdc++ 的版本:
1 | [root@iZ7xv858yt7ltpn85a6qv8Z ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX |
还得重新安装 GCC 9 才能行得通,886了!下次安装前一定要提前看好适配的包是什么,要去官网先看一遍安装教程,不然又会凉 🥹 血的教训!一定要人家写了什么版本就安装什么版本!!
¶2. PHP 编译
如果 configure 的时候遇到报错:
1 | configure: error: libxml2 not found. Please check your libxml2 installation. |
可以执行以下命令补充安装再次 configure:
1 | sudo yum install libxml2 libxml2-devel -y |
遇到报错:
1 | checking for cURL 7.10.5 or greater... configure: error: cURL version 7.10.5 or later is required to compile php with cURL support |
则升级 cURL 即可:
1 | sudo yum install curl curl-devel -y |
遇到报错:
1 | checking whether to enable JIS-mapped Japanese font support in GD... no |
说明在配置 PHP 时,找不到 jpeglib.h 头文件,这是 JPEG 图像库的一部分,PHP 在编译时需要它来支持处理 JPEG 图像:
1 | sudo yum install libjpeg-devel -y |
- 本文标题:LAMP 与阿里云服务器详解
- 本文作者:Chen Kai
- 创建时间:2025-02-16 00:00:00
- 本文链接:https://www.chenk.top/LAMP 与阿里云服务器详解/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!