查找数据库凭据的位置、为什么直接通过 3306 端口的远程连接会被拒绝,以及如何改为通过 SSH 隧道连接桌面工具。
每个带有数据库的 KapsuleHost 网站托管站点都拥有自己的数据库、自己的数据库用户,以及您随时可以查看的凭据。但您无法做到的是通过互联网直接连接到它,这是刻意设计的。本指南将介绍这些凭据、两种受支持的连接方式,以及如何设置桌面数据库工具所需的隧道。
查找您的凭据
前往网站,点击该站点,然后选择数据库。
该页面显示五项信息:
| 字段 | 值 |
|---|---|
| 主机 | 127.0.0.1 |
| 端口 | 3306 |
| 数据库 | 您的数据库名称 |
| 用户名 | 您的数据库用户 |
| 密码 | 已遮蔽,附带显示按钮和复制按钮 |
密码并非只能查看一次。您可以随时返回查看,因此无需另行保存。
数据库服务器为 MariaDB 10.11,与 MySQL 兼容。这一点在实际操作中有一个重要影响:从较新版本的 MySQL 导出的转储文件,可能包含 MariaDB 无法识别的排序规则,导入时会出现“未知排序规则”错误。如果发生这种情况,请使用广泛兼容的排序规则(例如 utf8mb4_unicode_ci)重新导出,或者在导入前在转储文件中查找并替换该排序规则。

为什么主机地址是 127.0.0.1
127.0.0.1 表示“本机”。数据库服务器仅监听本机自身的内部接口,并且在防火墙层面,3306 端口也未对互联网开放。面板中没有可以开放该端口的设置,也没有针对该端口的 IP 白名单。
这并非疏漏。面向互联网开放的数据库端口是托管环境中最常被利用的漏洞之一:它会被持续扫描,会向任何连接者泄露版本信息,而且一旦密码较弱,整个站点都可能失守。将其保持关闭状态,可以消除这整类风险。
因此,使用您站点的公网 IP 地址和 3306 端口的连接字符串,无论从何处、在任何套餐下,都必然失败。为此,我们提供两种受支持的连接方式。
方式一:浏览器中的 phpMyAdmin
适合快速查看、编辑,或进行小规模的导入导出操作。
在数据库页面上,点击打开 phpMyAdmin。系统会使用您站点自身的凭据直接为您登录,您只能看到自己的数据库。
实现此功能的链接被刻意设计为短期有效,其失效方式看起来像是错误,但实际上并非如此:
- 它会在 60 秒内失效。 请在链接出现后立即点击。
- 它只能使用一次。 返回并重新加载页面不会生效,需要重新生成一个新链接。
- 必须从您请求该链接时所使用的同一浏览器和同一网络打开。 如果您将链接复制到另一台设备,或在此过程中您的连接地址发生变化,链接将被拒绝使用。
如果您看到“此链接已被使用”或有关 IP 不匹配的提示,这正是保护机制在起作用。请返回数据库页面,再次点击该按钮。
有关 phpMyAdmin 本身的使用方法,请参阅使用 phpMyAdmin。
方式二:面向桌面工具的 SSH 隧道
如果您想使用桌面客户端,这是受支持的连接方式。隧道会向服务器开启一条加密连接,并通过它将您本机上的某个端口转发出去,这样您的客户端连接的对象看起来就像是一个本地数据库。
您首先需要准备的内容
该站点上需要有一个 SSH 密钥。系统不接受密码认证,因此此步骤不可省略。
- 前往网站,选择该站点,进入设置,然后选择 SSH 密钥。
- 粘贴您已在使用的公钥,或者从面板中生成一个新的密钥对。
- 记下该页面上显示的用户名。这是您站点的系统用户,也是您连接时所使用的身份。
如果您在面板中生成密钥,私钥只会显示一次,之后将不再显示。请立即保存,并存放在只有您本人可以读取的地方。
每当有密钥被添加到您的站点时,您也会收到一封邮件通知。这是刻意设计的机制。如果收到此类邮件而操作并非您本人所为,请立即在该页面上撤销该密钥,并阅读如果您的站点被黑客入侵。
完整操作步骤请参阅添加 SSH 密钥。
在 SFTP 标签页创建的 SFTP 账户无法用于建立隧道。这类账户仅用于文件传输,没有 shell 权限,也不支持端口转发。建立隧道需要使用该站点自身带有密钥的 SSH 用户。请参阅 SFTP 访问。
打开隧道
在您自己电脑上的终端中执行:
ssh -N -L 3307:127.0.0.1:3306 your-ssh-user@cp1-kapsule.kapsulehost.com
请将 your-ssh-user 替换为 SSH 密钥页面上显示的用户名。具体说明如下:
-N表示不执行任何命令,只是让隧道保持开启。-L 3307:127.0.0.1:3306会将您本机的 3307 端口转发到服务器的 3306 端口。- 之所以使用 3307 端口而非 3306 端口,是为了避免与您本地可能正在运行的数据库发生冲突。
该命令在成功执行时不会输出任何内容,这是正常现象。在您需要保持连接期间,请让终端窗口保持开启,完成后按 Ctrl+C 即可关闭。
连接您的客户端
在隧道保持开启的状态下,将您的数据库工具指向以下设置:
| 设置项 | 值 |
|---|---|
| 主机 | 127.0.0.1 |
| 端口 | 3307 |
| 用户名 | 数据库页面上的数据库用户名 |
| 密码 | 数据库页面上的数据库密码 |
| 数据库 | 您的数据库名称 |
请注意区分:SSH 用户名是您站点的系统用户,而数据库用户名则是数据库页面上另一个不同的用户名。将这两者混淆,是此处最常见的错误。
大多数桌面客户端还内置了“通过 SSH 隧道连接”的选项,可以直接完成上述操作,无需单独打开终端。只需填入 SSH 主机地址 cp1-kapsule.kapsulehost.com、端口 22、您的 SSH 用户名和私钥文件,然后按上文所述填写数据库相关字段即可。
有关各客户端的具体设置方法,请参阅数据库 SSH 隧道。
在服务器上使用命令行
如果您熟悉终端操作,其实完全不需要隧道。直接通过 SSH 连接并在服务器上进行操作:
ssh your-ssh-user@cp1-kapsule.kapsulehost.com
mysqldump -u DBUSER -p DBNAME > backup.sql
这比通过隧道传输大型数据库要快得多,也是在进行有风险的更改之前手动创建转储文件的正确方式。对于 WordPress 而言,使用 WP-CLI 通常效果更佳。
故障排查
从您自己的电脑连接 3306 端口时出现“连接被拒绝”。 这是预期现象,详见上文。请改用隧道连接。
隧道命令要求输入密码。 说明您的密钥未被正确提供或尚未安装。请检查该密钥是否已在 SSH 密钥页面上,并在命令中添加 -i /path/to/your/private/key。
“权限被拒绝(publickey)”。 用户名有误,或密钥不正确。用户名应为 SSH 密钥页面上显示的用户名,而非您的 KapsuleHost 登录邮箱。
3307 端口提示“地址已被占用”。 说明已有一个隧道处于开启状态,或其他程序正在占用该端口。请关闭其他隧道,或改用其他本地端口,例如 3308。
隧道已开启,但客户端无法连接。 请确认您的客户端指向的是 127.0.0.1 以及您所选择的本地端口,而不是您的域名。
“用户访问被拒绝”。 这是数据库凭据问题,而非 SSH 问题。请返回数据库页面重新显示并复制凭据。
导入时出现“未知排序规则”。 上文已有说明,请使用兼容的排序规则重新导出。
您在数据库客户端中执行的任何操作都会立即生效,且无法撤销。没有确认步骤,也没有回收站。请在执行任何写入操作之前先进行备份。请参阅创建备份。