我们公司在 AWS 上有一个 Postgres 数据库的 RDS 实例。我对 AWS 不太熟悉。
我想对数据库 (VACUUM FULL) 运行一个非常长的查询,这可能需要几个小时甚至几天的时间。我可以使用名为“passport”的工具创建到 AWS 的隧道,从我的笔记本电脑连接到数据库。
问题是,如果我从笔记本电脑发起查询,然后我的互联网连接断开,或者笔记本电脑重新启动,或者我的笔记本电脑和亚马逊计算机之间的网络发生其他事情,查询将被中断,我将丢失查询可能生成的任何输出。
在过去的美好时光里,当我拥有一台运行操作系统的服务器时,我可以连接到该操作系统(远程桌面或 ssh 或其他方式),然后在该服务器上运行一个程序(pgAdmin、psql 等),该程序将本地连接到数据库,即“localhost”。然后,我可以让它继续运行,断开与服务器的连接,第二天再回来,重新连接到它,并查看仍在该服务器上运行的 pgAdmin 实例中的结果。在这种情况下,运行查询的应用程序和数据库之间没有网络。
使用 RDS 有可能实现类似的功能吗?怎样实现?
我在 AWS 上完成这些“需要长时间运行的连接”任务的一种方法是启动 EC2 实例,安装适当的工具,运行tmux然后让它运行。断开连接,关闭我的电脑。ec2 实例仍在运行,tmux 正在运行我的程序。这与 RDS 不同,但概念是一样的。只要 ec2 与 RDS 的连接不中断,程序就会运行。如果程序由 tmux 正确运行,则进入 ec2 实例的 shell 不需要保持连接。
然后可以构建 shell 脚本来安装工具和其他脚本来启动 ec2 实例,这样启动环境就是一键式的。