由于重新连接到PostgreSQL时出现错误,因此需要采取措施。”连接尝试超时”→由于忘记启动Vagrant(CentOS7)和Docker,导致此问题

首先

上次我在DBeaver中设置了连接信息,以便连接到PostgreSQL。
这次我想再次连接同一个数据库进行操作,但是尝试连接时出现了“连接尝试超时”的错误,无法连接成功。

我希望能够同时在Qiita上写作并解决这个问题。

结论 –

提前写出结论。

在进行PowerShell操作的同时,启动虚拟机和Docker,并确保可以从Docker进行PostgreSQL操作,然后通过DBeaver连接到PostgreSQL数据库(本次连接的是”first_tutorial”)。

以下是文章的相关部分:
「2-3. 启动Docker」(只需执行此代码块即可)
和「2-4. 在DBeaver中连接到PostgreSQL」。

由于建立了「VirtualBox > Vagrant(CentOS7) > Docker > PostgreSQL」的环境,所以在启动该环境并连接到该PostgreSQL之前,是无法进行连接的。我没有意识到这一点…以下是解决的过程。

环境

主机电脑:Windows10
图形用户界面数据库工具:DBeaver
虚拟化软件:VirtualBox
客户机电脑:Vagrant(即CentOS7即虚拟机)
容器虚拟环境:Docker
命令行界面数据库客户端:PostgreSQL

目标

我想使用以前使用过的连接信息,从DBeaver连接到PostgreSQL。

1. 出现错误的过程 de

1-1. DBeaver的启动

我将启动已在主机PC上安装的DBeaver。

1-2. 连接到PostgreSQL数据库

04.png
01.png
02.png

PostgreSQL标志的象征性图案上有一个红色的叉号=意味着无法连接吗?
下方的数据库上有一个绿色的勾号,表示这个数据库处于可连接的状态。

2. 不斷嘗試並犯錯

确认主持人

100.png
300.png

关于主机,
A是使用IP地址,
B是使用URL(在云上的ElephantSQL),
这是它们之间的主要区别。

这个IP地址「192.168.33.10」的真实位置在哪里呢?

这是CentOS的默认IP地址。
这是在使用Vagrant创建CentOS 7虚拟机时自动生成的IP地址。

PostgreSQL 在 “主机PC > VirtualBox > Vagrant(CentOS7) > Docker > PostgreSQL” 的层级中,位于 “CentOS7 的 Docker 内部”。 要连接到这个 PostgreSQL,需要先连接到 CentOS7。因此,在 DBeaver 的连接信息中,我输入了 “192.168.33.10” 作为主机。

我突然意识到了一个问题。
可能是因为没有启动CentOS7,所以无法连接吗?

启动CentOS7

2-2-1. 启动虚拟机 -> 暂停

1.png

2-2-2. 尝试使用DBeaver连接到PostgreSQL→无法连接

2.png

哇,发生了错误,但仍然是向前迈出的一步。似乎连接目标虚拟机未启动是第一个错误的原因。
然后出现了新的错误。由于主机名(192.168.33.10)和端口号(5432)是正确的,“我们要确认postmaster正在接受TCP/IP连接”。

确认 2-2-3.postmaster 正在接收 TCP/IP 连接。

邮政管理员?TCP/IP连接?
这个错误以前也出现过。

postmaster是什么?:postmaster是PostgreSQL的多用户数据库服务器(引用:PostgreSQL 7.2.3参考手册)
TCP/IP连接是什么?:虽然不太确切理解其实质,但是能够与终端连接的意思吗?

在那时调查的内容就是这样。
也就是说, PostgreSQL 数据库“first_tutorial”是否接受来自虚拟机“192.168.33.10:5432”的连接?
所以出现错误是因为它没有接受连接。
为什么它没有接受连接呢?
因为它是“Vagrant(CentOS7) > Docker > PostgreSQL”这种关系,所以 Docker 可能有问题…。

因为公式文件中出现了这样的表述,所以我做了笔记。↓

如果真的是postmaster没有在那里运行,那么通常情况下,内核错误信息会是”Connection refused(连接被拒绝)”或者”No such file or directory(找不到该文件或目录)”之一。请特别注意:在这种情况下出现的”Connection refused”并不意味着postmaster接受了连接请求然后拒绝了,而是会有其他提示消息出现。而其他类似”Connection timed out(连接超时)”的错误信息可能指向更根本的问题,比如无法建立网络连接等。

2-3. 启动Docker

如果Docker没有启动,那么在Vagrant和PostgreSQL之间的Docker本应该启动,但PostgreSQL也不会启动,并且无法从DBeaver进行连接,这种情况会发生吗?
假设“由于Docker没有启动,无法连接到PostgreSQL”。

我会启动Docker。

打开 PowerShell,并输入以下命令。

【备忘录:关于反斜杠”\ “】
当想输入半角反斜杠并按下相应键时,在PowerShell中会显示半角的\ (¥)符号。这样可以吗??
→「如果在使用日语的Windows系统中,使用命令提示符时,会显示为符号\(¥)而非反斜杠(\)。反斜杠和¥符号具有相同的功能。」(引用来源:富士通Q&A)

<PowerShellを立ち上げて>

(ディレクトリ移動)
cd C:\Users\***\dev\Vagrant-Docker-PostgreSQL-DBeaver-main

(カレントディレクトリ(現在の位置のディレクトリ)にあるファイルとサブディレクトリの一覧を表示)
dir

(Vagrant起動)
vagrant up

(Vagrantにssh接続)
vagrant ssh
<Vagrantを利用してCentOS7に入れた>

<次はDocker。Dockerディレクトリに入る>
(dockerに移動)
cd docker
(現在の作業ディレクトリを表示)
pwd
(ls=「list segments」の略でディレクトリやファイルの情報を表示。la=???)
ls -la

(Dockerコンテナを起動)
docker-compose up -d

(Dockerコンテナに入ってPostgreSQLを操作する)
docker exec -it postgres_container /bin/bash

<psql(CUI DB クライアント)に入る>
(psqlにログインする)
psql -U user first_tutorial
(↑ psql -U <ユーザー名> <データベース名> )

(↑引用自代码:
限定公开的YouTube视频“环境搭建数据库 PostgreSQL”(作者:黒澤さん @kurosawa_kuro))

一个 # 出现在Powershell的目录中,显示为”first_tutorial=#”。现在可以通过Docker操作PostgreSQL!

在DBeaver中连接到PostgreSQL数据库。

当您在此时右键点击DBeaver的first_tutorial并选择“连接”时…

1000.png

连接成功了!!

3. 解决方案 (jiě jué àn)

所以解决方法是”启动虚拟机和Docker,并确保能够从Docker中操作PostgreSQL”(相关步骤为”2-3. 启动Docker” 和 “2-4. 使用DBeaver连接到PostgreSQL”)。

不仅需要在VirtualBox的图形界面上启动虚拟机,还需要使用PowerShell(字符用户界面)同时启动Docker和虚拟机。我认为之所以感到困惑,主要是因为对各种工具之间的关系没有完全理解。

最后

无论是这次的DBeaver、pgAdmin还是Vagrant,我总是在”连接”这一块遇到问题。在整理主机、客户端和云端工具之间的关系的同时,逐一理解它们是很重要的。但是不管怎样,这次真是太蠢了…本来打算重新连接一下,然后开始学习《开源数据库标准教科书-PostgreSQL》,结果重新连接花了我3个半小时。明天再开始学习教科书吧!

尽管感到可悲,但现在只能一一写下并确认,否则就察觉不到。从记录所能觉察到的当前状态开始,为了迅速意识到(即理解主机/客人/工具关系),在那之前我们将一次又一次地记录下来并加以理解。

广告
将在 10 秒后关闭
bannerAds