php连接京东云mysql数据库时,host应填控制台显示的内网地址(如rm-xxxxxx.mysql.jcloud.com),端口填实例基本信息中显示的端口号(默认3306,可能被修改);必须确保php应用部署在同地域、同vpc的云主机上,并配置ssl证书路径。

PHP 连接京东云数据库的 host 和端口怎么填
京东云数据库(MySQL 版)默认不开放公网访问,必须通过内网连接。你不能填 localhost 或 127.0.0.1,也不能直接用控制台显示的「公网地址」(除非你手动开通了公网且确认安全组放行)。正确做法是:在京东云同一地域、同一私有网络(VPC)下的云主机(如轻量应用服务器或 ECS),使用数据库实例的「内网地址」+「端口」。
常见错误现象:PDOException: SQLSTATE[HY000] [2002] Connection refused 或 mysqli_connect(): (HY000/2002): No route to host,基本都是因为用了公网地址但没开公网,或跨 VPC / 跨地域连内网地址。
- 登录京东云控制台 → 进入「云数据库 MySQL」→ 找到目标实例 → 查看「基本信息」里的「内网地址」和「端口」(默认
3306,但可能被修改过) - 确保你的 PHP 应用部署在同地域、同 VPC 的云主机上(比如都在「华北-北京」+「vpc-bj-xxxx」)
- 检查该云主机的安全组规则:出方向不限制,入方向需放行目标数据库端口(如
3306)到数据库内网 IP 段
PHP 代码里怎么写 mysqli 或 PDO 连接参数
用 mysqli 或 PDO 都可以,但注意京东云数据库强制要求 SSL 连接(部分高安全版本默认开启,低配版可手动开启),否则会报错 SSL connection error 或直接拒绝连接。
推荐用 PDO,更易统一管理 SSL 选项:
$host = 'rm-xxxxxxx.mysql.jcloud.com'; // 替换为你的内网地址(不是公网地址)
$port = 3306;
$dbname = 'your_db_name';
$username = 'your_username';
$password = 'your_password';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_SSL_CA => '/path/to/rds-ca-bundle.pem', // 必须提供
PDO::MYSQL_ATTR_SSL_CERT => null,
PDO::MYSQL_ATTR_SSL_KEY => null,
];
try {
$pdo = new PDO("mysql:host={$host};port={$port};dbname={$dbname};charset=utf8mb4", $username, $password, $options);
} catch (PDOException $e) {
die('Connection failed: ' . $e->getMessage());
}
-
rds-ca-bundle.pem是京东云提供的根证书,必须下载并放在服务器可读路径(控制台「数据库详情页 → SSL 设置」可下载) - 如果数据库实例未启用 SSL(极少见),可在控制台关闭 SSL 强制策略,此时可删掉 SSL 相关
PDO选项;但生产环境不建议 - 字符集强烈建议显式指定
charset=utf8mb4,避免中文乱码或 emoji 插入失败
为什么用宝塔或 LNMP 面板连不上京东云数据库
面板本身不改变连接逻辑,但容易忽略两个关键点:一是面板配置文件(如 WordPress 的 wp-config.php)里写的 host 是 localhost,二是面板运行的 PHP 进程用户(如 www)可能无权读取 SSL 证书文件。
- 把
wp-config.php中的DB_HOST改成京东云数据库的内网地址 + 端口,例如:define('DB_HOST', 'rm-xxxxxx.mysql.jcloud.com:3306'); - 确保
rds-ca-bundle.pem文件权限为644,且所在目录对www用户可读(可用ls -l检查) - 如果用宝塔的「PHP 设置 → 配置修改」加了全局
openssl.cafile,不要指向这个证书——它只用于 HTTPS 请求,不影响 MySQL SSL 连接
测试连接是否成功的最小验证脚本
别依赖 WordPress 启动再看报错,先写个独立脚本快速定位问题:
<?php $host = 'rm-xxxxxx.mysql.jcloud.com';
$port = 3306;
$user = 'testuser';
$pass = 'testpass';
$db = 'testdb';
$ca = '/www/wwwroot/cert/rds-ca-bundle.pem';
if (!file_exists($ca)) {
die("CA file not found: {$ca}");
}
$dsn = "mysql:host={$host};port={$port};dbname={$db};charset=utf8mb4";
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::MYSQL_ATTR_SSL_CA => $ca,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
echo "✅ Connected successfully\n";
$pdo = null;
} catch (Exception $e) {
echo "❌ Failed: " . $e->getMessage() . "\n";
}
?>
执行前确认:脚本路径、证书路径、数据库账号密码、内网地址全部准确;输出 ✅ Connected successfully 才算真正通了。SSL 证书路径错误、数据库账号没授权对应 IP 段、VPC 网络不通——这三类问题占连接失败的 90% 以上,优先排查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











