如何在Ubuntu 18.04上连接到托管数据库

如果您刚开始使用托管数据库,执行某些任务(如连接到数据库)的最佳方法可能不是不言自明的。在本指南中,我们将讨论如何在Ubuntu 18.04服务器上安装各种数据库管理系统的客户端程序,包括PostgreSQL,MySQL和Redis。我们还将解释如何使用这些程序连接到托管数据库实例。

介绍

托管数据库与自我管理数据库相比具有许多优势,包括自动更新,简化扩展和高可用性。 但是,如果您不熟悉使用托管数据库,那么执行某些任务(如连接到数据库)的最佳方式可能并不是不言自明的。

在本指南中,我们将讨论如何在Ubuntu 18.04服务器上安装各种数据库管理系统(DBMS)的客户端程序,包括PostgreSQLMySQLRedis 我们还将解释如何使用这些程序连接到托管数据库实例。

注意:本指南中概述的说明已使用DigitalOcean托管数据库进行了测试,但它们通常适用于来自任何云提供商的托管数据库。 但是,如果遇到连接到从其他提供程序配置的数据库的问题,则应查阅其文档以获取帮助。

先决条件

要按照本指南中的说明操作,您需要:

  • 访问运行Ubuntu 18.04的服务器。 此服务器应具有具有管理权限的非root用户和使用ufw配置的防火墙。 要进行此设置,请按照我们的Ubuntu 18.04初始服务器设置指南进行操作
  • 托管数据库实例。 本教程提供了有关如何连接到各种数据库管理系统的说明,特别是PostgreSQL,MySQL和Redis。 要配置DigitalOcean托管数据库,请查看我们针对您选择的DBMS的文档:

完成这些后,跳转到与DBMS对齐的任何部分。

连接到托管PostgreSQL数据库

要连接到托管的PostgreSQL数据库,可以使用psql ,Postgres的标准命令行客户端。 它是开源的,由PostgreSQL开发组维护,通常包含在下载PostgreSQL服务器时。 但是,您可以通过使用APT安装postgresql-client软件包来自行安装psql

如果您最近没有这样做,请更新服务器的包索引:

sudo apt update

然后运行以下命令来安装psql

sudo apt install postgresql-client

APT将要求您确认是否要安装该软件包。 ENTER

之后,您可以连接到托管的Postgres数据库,而无需进一步配置。 例如,您可以使用以下标志调用psql

  • -U ,您要连接的PostgreSQL用户
  • -h ,托管数据库的主机名或IP地址
  • -p ,托管数据库正在监听连接的TCP端口
  • -d ,要连接的特定数据库
  • -v ,“变量”的缩写,在其他连接变量之前,后跟等号( = )和变量的值。 例如,如果要在连接时验证数据库的CA证书, -v sslmode=require在命令中包含-v sslmode=require
  • -W ,告诉psql提示你输入PostgreSQL用户的密码。 请注意,您可以在psql命令之前使用PGPASSWORD= password ,但通常认为在命令行中不包含密码更安全

包含这些标志后, psql命令的语法如下所示:

psql -U user -h host -p port -d database -v variable=value -W

或者,如果托管数据库提供程序提供用于连接的统一资源标识符 (URI),则可以使用以下语法:

psql postgresql://username:password@host:port/database?option_1=value&option_n=value

注意:如果您要连接到DigitalOcean托管数据库,则可以在Cloud Control Panel中找到所有这些连接信息。 单击左侧边栏菜单中的“数据库”,然后单击要连接的数据库,向下滚动以查找“ 连接详细信息”部分。 从那里,您执行以下操作之一:

  • 选择“ 连接参数”选项,并将相关字段分别复制到之前详述的psql语法中
  • 选择“ 连接字符串”选项并复制可以粘贴到上面列出的连接URI语法中的现成连接URI
  • 选择Flags选项并复制一个可以粘贴到终端的即用型psql命令以进行连接

有了这个,您就可以开始使用托管的PostgreSQL实例了。 有关如何与PostgreSQL交互的更多信息,请参阅我们的如何管理SQL数据库的指南 您也可以在PostgreSQL中找到我们的查询简介

连接到托管MySQL数据库

要连接到托管MySQL数据库,您可以使用官方MySQL数据库客户端。 在Ubuntu上,通常通过APT下载mysql-client软件包来安装此客户mysql-client 但是,如果您使用的是默认的Ubuntu存储库,则会安装该程序的5.7版本。

要访问DigitalOcean Managed MySQL数据库,您需要安装8.0或更高版本。 为此,您必须先安装MySQL软件存储库,然后再安装软件包。

注意:如果您不需要安装最新版本的mysql-client ,只需更新服务器的软件包索引并安装mysql-client而无需添加MySQL软件库:

sudo apt update
sudo apt install mysql-client

如果您不确定是否需要最新版本的mysql-client ,则应查阅云提供商的托管数据库文档。

首先导航到Web浏览器中MySQL APT Repository页面 找到右下角的“ 下载”按钮,然后单击下一页。 此页面将提示您登录或注册Oracle Web帐户。 您可以跳过它,而是查找说“ 不,谢谢”的链接,只需开始下载即可 右键单击该链接,然后选择“ 复制链接地址” (此选项的措辞可能会有所不同,具体取决于您的浏览器)。

现在您已准备好下载该文件。 在您的服务器上,移动到您可以写入的目录:

cd /tmp

使用curl下载文件,记住粘贴刚刚复制的地址代替以下命令的突出显示部分。 您还需要将两个命令行标志传递给curl -O指示curl输出到文件而不是标准输出。 L标志使curl遵循HTTP重定向,这在这种情况下是必要的,因为您复制的地址实际上在文件下载之前重定向到另一个位置:

curl -OL https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb

现在应该将文件下载到当前目录中。 列出文件以确保:

ls

您将看到输出中列出的文件名:

mysql-apt-config_0.8.13-1_all.deb
. . .

现在,您可以将MySQL APT存储库添加到系统的存储库列表中。 dpkg命令用于安装,删除和检查.deb软件包。 以下命令包含-i标志,表示您要从指定文件进行安装:

sudo dpkg -i mysql-apt-config*

在安装过程中,您将看到一个配置屏幕,您可以在其中指定您喜欢的MySQL版本,以及为其他MySQL相关工具安装存储库的选项。 默认值将添加最新稳定版MySQL的存储库信息,而不是其他任何内容。 这就是我们想要的,所以使用向下箭头导航到Ok菜单选项ENTER

选择mysql-apt-config配置选项

之后,包将完成添加存储库。 刷新apt包缓存以使新软件包可用:

sudo apt update

接下来,您可以稍微清理系统并删除下载的文件,因为将来不需要它:

rm mysql-apt-config*

注意:如果您需要更新这些存储库的配置,请运行以下命令以选择新选项:

sudo dpkg-reconfigure mysql-apt-config

选择新选项后,运行以下命令以刷新包缓存:

sudo apt update

现在您已经添加了MySQL存储库,您已准备好安装实际的MySQL客户端软件。 使用以下apt命令执行此操作:

sudo apt install mysql-client

该命令完成后,请检查软件版本号以确保您拥有最新版本:

mysql --version
mysql  Ver 8.0.17-cluster for Linux on x86_64 (MySQL Community Server - GPL)

安装mysql-client软件包后,可以通过运行带有以下标志作为参数的mysql命令来访问托管数据库:

  • -u ,您要连接的MySQL用户
  • -p ,告诉mysql提示输入用户的密码。 您可以在-p标志后面的connection命令中直接包含密码(没有空格,如-p password ),但出于安全考虑,通常不建议这样做
  • -h ,数据库的主机名或IP地址
  • -P ,MySQL正在监听连接的TCP端口
  • -D ,您要连接的特定数据库

使用这些标志, mysql语法将如下所示:

mysql -u user -p -h host -P port -D database

或者,如果您有可用于连接的连接URI,则可以使用如下语法:

mysql mysql://user:password@host:port/database?option_1=value&option_n=value

注意:如果您要连接到DigitalOcean托管数据库,则可以在Cloud Control Panel中找到所有这些连接信息。 单击左侧边栏菜单中的“数据库”,然后单击要连接的数据库,向下滚动以查找“ 连接详细信息”部分。 从那里,您执行以下操作之一:

  • 选择“ 连接参数”选项,并将相关字段分别复制到前面概述的mysql语法中
  • 选择“ 连接字符串”选项并复制可以粘贴到上面详述的连接字符串中的现成连接URI
  • 选择Flags选项并复制一个可以粘贴到终端的即用型mysql命令以建立连接

有了这个,您就可以开始使用托管MySQL实例了。 有关如何与MySQL交互的更多信息,请参阅我们的如何管理SQL数据库的指南 您也可以在MySQL中找到我们的查询简介

关于MySQL 8中密码验证的注意事项

在MySQL 8.0及更高版本中,默认的身份验证插件是caching_sha2_password 但在撰写本文时,PHP不支持caching_sha2_password 如果您计划将托管MySQL数据库与使用PHP的应用程序(如WordPress或phpMyAdmin)一起使用,则在应用程序尝试连接到数据库时可能会出现问题。

如果您可以访问数据库的配置文件,则可以添加一个设置以强制它使用PHP支持的身份验证插件 - 例如, mysql_native_password - 默认情况下:

示例MySQL配置文件
[mysqld]
default-authentication-plugin=mysql_native_password

但是,某些托管数据库提供程序(包括DigitalOcean)不会使最终用户可以使用该数据库配置文件。 在这种情况下,您可以连接到数据库并为需要连接到数据库的任何现有MySQL用户运行ALTER USER命令,但不能使用caching_sha2_password插件执行此操作:

ALTER USER user IDENTIFIED WITH mysql_native_password BY 'password';

当然,您可以通过在各自的CREATE USER语句中指定插件来设置要使用mysql_native_password进行身份验证的新用户:

CREATE USER user IDENTIFIED WITH mysql_native_password BY 'password';

如果您使用的是DigitalOcean托管数据库,请注意,如果您将用户配置为使用caching_sha2_password以外的插件进行身份验证,那么您将无法在Cloud Control Panel中看到该用户的密码。 因此,您应该确保记下使用mysql_native_password或安全位置的其他插件进行身份验证的任何用户的密码。

连接到托管Redis数据库

在本地安装Redis时,它带有redis-cli ,即Redis命令行界面。 您可以使用redis-cli连接到远程托管的Redis实例,但它本身不支持TLS / SSL连接。 因此,建议您使用备用Redis客户端启用与Redis的安全连接。

对于DigitalOcean Managed Redis数据库,我们建议您安装Redli,一个开源的交互式Redis终端。 为此,请导航到Redli GitHub项目上的“ 版本”页面 ,然后找到最新版本的“ 资产”表。 在撰写本文时,这将是版本0.4.4。

在那里,找到以linux_amd64.tar.gz结尾的文件的链接。 此链接指向称为tarball的归档文件,在解压缩后,将在您的系统上创建一些文件。 右键单击此链接并选择复制链接地址 (此选项可能因Web浏览器而异)。

在您的服务器上,移动到您可以写入的目录:

cd /tmp

然后,将链接粘贴到以下wget命令中,替换突出显示的URL。 此命令将文件下载到您的服务器:

wget https://github.com/IBM-Cloud/redli/releases/download/v0.4.4/redli_0.4.4_linux_amd64.tar.gz

将文件下载到服务器后,解压缩tarball:

tar xvf redli_0.4.4_linux_amd64.tar.gz

这将在您的服务器上创建以下文件:

LICENSE.txt
README.md
redli

redli文件是Redli 二进制文件 将其移动到/usr/local/bin目录,即Ubuntu查找可执行文件的位置:

sudo mv redli /usr/local/bin/

此时,您可以稍微清理系统并删除tarball:

rm redli 0.4.4_linux_amd64.tar.gz

现在,您可以使用Redli连接到托管的Redis实例。 您可以通过运行redli命令然后执行以下标记来执行此redli

  • -h ,要连接的主机。 这可以是主机名或IP地址
  • -a ,用于对Redis实例进行身份验证的密码
  • -p ,要连接的端口

包含这些标志后, redli语法如下。 请注意,此示例还包括--tls选项,该选项允许您通过TLS / SSL连接到托管Redis数据库,而无需隧道:

redli --tls -h host -a password -p port

Redli对redis-cli一个好处是它了解rediss协议,该协议用于指定指向Redis数据库的URI。 这允许您使用连接字符串来访问您的数据库:

redli --tls -u rediss://user:password@host:port

请注意,此示例包含-u标志,该标志指定以下参数将是连接URI。

注意:如果您要连接到DigitalOcean托管数据库,则可以在Cloud Control Panel中找到所有这些连接信息。 单击左侧边栏菜单中的“数据库”,然后单击要连接的数据库,向下滚动以查找“ 连接详细信息”部分。 从那里,您执行以下操作之一:

  • 选择“ 连接参数”选项,并将相关字段分别复制到前面详述的redli语法中
  • 选择“ 连接字符串”选项并复制可以使用上面列出的连接字符串语法的现成连接URI
  • 选择Flags选项并复制一个可以粘贴到终端的即用型redli命令以进行连接

之后,您可以开始与托管Redis实例进行交互。

结论

作为云服务中相对较新的开发,许多以自我管理数据库而闻名的实践并未广泛或全面地记录为云提供商管理的数据库。 对于使用托管数据库的新用户来说,访问数据库的这些实践中最基本的一种可能不会立即变得清晰。 我们在本教程中的目标是,当您开始使用托管数据库存储数据时,它可以帮助您入门。

有关使用数据库的更多信息,我们建议您查看我们各种与数据库相关的内容 ,包括直接关注PostgreSQLMySQLRedis的教程。

要了解有关DigitalOcean托管数据库的更多信息,请参阅我们的托管数据库产品文档