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
相关产品推荐
相关产品推荐

