You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS实验室网站无法从数据库加载数据求助

网站重启后无法加载MySQL数据,但直接访问数据库正常的修复方案

问题概述

昨日完成AWS Academy实验的EC2、RDS、Cloud9等环境搭建,网站可正常执行CRUD操作并完成负载测试。今日重启实验后,网站「学生列表」板块无法加载数据库数据,但直接登录MySQL数据库仍可访问数据(数据库数据截图:数据库数据截图)。已检查MySQL数据库、安全组,均无异常,且数据库和EC2日志未报错。

以下是初始数据库搭建脚本:

#!/bin/bash -xe
apt update -y
apt install nodejs unzip wget npm mysql-server -y
#wget https://aws-tc-largeobjects.s3.us-west-2.amazonaws.com/CUR-TF-200-ACCAP1-1-DEV/code.zip -P /home/ubuntu
wget https://aws-tc-largeobjects.s3.us-west-2.amazonaws.com/CUR-TF-200-ACCAP1-1-79581/1-lab-capstone-project-1/code.zip -P /home/ubuntu
cd /home/ubuntu
unzip code.zip -x "resources/codebase_partner/node_modules/*"
cd resources/codebase_partner
npm install aws aws-sdk
mysql -u root -e "CREATE USER 'nodeapp' IDENTIFIED WITH mysql_native_password BY 'student12'";;
mysql -u root -e "GRANT all privileges on *.* to 'nodeapp'@'%';"
mysql -u root -e "CREATE DATABASE STUDENTS;"
mysql -u root -e "USE STUDENTS; CREATE TABLE students(
            id INT NOT NULL AUTO_INCREMENT,
            name VARCHAR(255) NOT NULL,
            address VARCHAR(255) NOT NULL,
            city VARCHAR(255) NOT NULL,
            state VARCHAR(255) NOT NULL,
            email VARCHAR(255) NOT NULL,
            phone VARCHAR(100) NOT NULL,
            PRIMARY KEY ( id ));"
sed -i 's/.*bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
systemctl enable mysql
service mysql restart
export APP_DB_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
export APP_DB_USER=nodeapp
export APP_DB_PASSWORD=student12
export APP_DB_NAME=STUDENTS
export APP_PORT=80
npm start &
echo '#!/bin/bash -xe
cd /home/ubuntu/resources/codebase_partner
export APP_PORT=80
npm start' > /etc/rc.local
chmod +x /etc/rc.local

核心问题定位

脚本首次启动时通过export设置了数据库连接的环境变量,但写入/etc/rc.local的启动脚本仅包含APP_PORT,重启后应用无法获取APP_DB_HOST、APP_DB_USER等关键连接参数,导致数据库连接失败,但日志未明确报错。

修复步骤

1. 修正启动脚本的环境变量配置

编辑/etc/rc.local,补充完整的数据库环境变量:

#!/bin/bash -xe
cd /home/ubuntu/resources/codebase_partner
export APP_DB_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
export APP_DB_USER=nodeapp
export APP_DB_PASSWORD=student12
export APP_DB_NAME=STUDENTS
export APP_PORT=80
npm start

执行命令确保脚本可执行:

chmod +x /etc/rc.local

2. 手动重启应用验证

登录EC2实例,终止现有Node.js进程后重启应用:

pkill -f npm
cd /home/ubuntu/resources/codebase_partner
export APP_DB_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
export APP_DB_USER=nodeapp
export APP_DB_PASSWORD=student12
export APP_DB_NAME=STUDENTS
export APP_PORT=80
npm start &

3. 验证数据库连接有效性

在EC2上用应用账号测试MySQL连接:

mysql -u nodeapp -pstudent12 -h $(curl http://169.254.169.254/latest/meta-data/local-ipv4) STUDENTS

执行查询命令确认数据可访问:

SELECT * FROM students LIMIT 5;

4. 检查应用进程环境变量

获取应用进程ID:

ps aux | grep npm

查看进程的环境变量,确认数据库参数已加载:

cat /proc/<进程ID>/environ | tr '\0' '\n' | grep APP_DB_

内容的提问来源于stack exchange,提问作者Akira Chizu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:40:13