网站
远程连接到您的数据库
Where to find your database credentials, why direct remote connections on port 3306 are refused, and how to connect a desktop tool through an SSH tunnel instead.
在何处找到数据库凭证、为什么直接远程连接在端口 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 的连接字符串将始终失败,无论从任何地方、在任何计划上都是如此。有两种支持的替代连接方式。
选项 1:浏览器中的 phpMyAdmin
最适合快速查看、编辑或小规模导入或导出。
在"数据库"页面上,单击打开 phpMyAdmin。您会使用您网站自己的凭证直接登录,并且只能看到您自己的数据库。
执行此操作的链接有意设计为短期有效,它以看起来像错误但实际上不是错误的方式失败:
- 它在 60 秒后过期。 链接出现后立即单击。
- 它只能使用一次。 返回并重新加载将不起作用;生成新的链接。
- 它必须从您请求它的相同浏览器和相同网络打开。如果您将链接复制到另一个设备,或您的连接在过程中途改变地址,它将被拒绝。
如果您看到"此链接已被使用"或关于 IP 不匹配的消息,那是保护措施在起作用。返回到"数据库"页面并再次单击该按钮。
有关使用 phpMyAdmin 本身的信息,请参阅使用 phpMyAdmin。
选项 2:用于桌面工具的 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 密钥页面上的用户名,不是您的 Kapsule 登录电子邮件。
端口 3307 的"地址已在使用中"。 隧道已打开,或其他东西正在使用该端口。关闭另一个,或选择不同的本地端口(例如 3308)。
隧道打开但客户端无法连接。 确认您的客户端指向 127.0.0.1 和您选择的本地端口,而不是您的域。
"用户访问被拒绝"。 数据库凭证,不是 SSH。从"数据库"页面再次显示并复制它们。
导入时出现"未知校对规则"。 上文已涵盖。使用兼容的校对规则重新导出。
您在数据库客户端中所做的任何操作会立即发生,无法撤销。没有确认步骤,也没有回收站。在运行任何写入操作之前进行备份。请参阅进行备份。