如何从Centos系统VPS的PHP页面连接AWS RDS MySQL数据库?
解决PHP网页连接AWS RDS数据库报错"Unknown database"的问题
以下是针对你的情况的排查和解决步骤:
1. 严格核对数据库名称的准确性
MySQL在Linux环境下(AWS RDS默认运行在Linux系统)数据库名称区分大小写,即使你在WorkBench或终端里输入的名称看似一致,也可能存在大小写、特殊字符(比如连字符)的细微差异。
- 在VPS终端登录RDS数据库后,执行命令:
复制输出中完全匹配的数据库名称,替换PHP代码里的SHOW DATABASES;$dbname值,确保没有任何拼写错误。
2. 验证数据库用户的访问权限
确认你使用的user账号拥有访问目标数据库my-database的权限:
- 终端登录RDS后执行:
(如果你的用户仅允许VPS IP访问,将SHOW GRANTS FOR 'user'@'%';%替换为VPS的公网IP) - 如果输出中没有包含
my-database相关的权限,执行授权命令:GRANT ALL PRIVILEGES ON `my-database`.* TO 'user'@'%'; FLUSH PRIVILEGES;
3. 检查PHP环境的mysqli扩展状态
CyberPanel管理的PHP环境可能未启用mysqli扩展,导致无法正常连接MySQL:
- 在你的网站根目录创建一个
phpinfo.php文件,内容如下:<?php phpinfo(); ?> - 通过浏览器访问该文件,搜索
mysqli关键词,确认扩展已启用。 - 如果未启用,登录CyberPanel,找到对应PHP版本的设置页面,开启mysqli扩展后重启Web服务。
4. 修改代码,分步排查连接问题
将PHP代码改为先建立无数据库的连接,再手动选择数据库,以便定位具体错误:
$host = "*************.eu-west-2.rds.amazonaws.com"; $username = "user"; $password = "*************"; $port = 3306; // 先连接不指定数据库 $conn = new mysqli($host, $username, $password, "", $port); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 手动选择数据库 if (!$conn->select_db("my-database")) { die("Failed to select database: " . $conn->error); }
执行后,根据新的报错信息可以更精准判断是连接问题还是数据库权限/名称问题。
5. 确认VPS出站规则与RDS安全组
虽然终端能连接,但仍需确认:
- VPS的防火墙(如iptables、firewalld)是否允许3306端口的出站请求:
- 执行
iptables -L -n或firewall-cmd --list-all,检查出站规则是否包含TCP 3306端口的允许条目。
- 执行
- AWS RDS的安全组入站规则是否正确包含VPS的公网IP,允许3306端口的TCP访问(终端能连接的话此步骤大概率没问题,但如果VPS IP有变动则需要更新)。
内容的提问来源于stack exchange,提问作者Shadib
相关产品推荐
相关产品推荐

