『亚马逊云科技产品测评』活动征文|基于亚马逊云EC2搭建PG开源数据库

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道

亚马逊EC2云服务器(Elastic Compute Cloud)是亚马逊AWS(Amazon Web Services)提供的一种云计算服务。EC2代表弹性计算云,它允许用户租用虚拟计算资源,包括CPU、内存、存储和网络带宽,以满足计算需求。

由于亚马逊云科技服务种类较多,且计费详细,很多用户有些看不懂,所以对使用亚马逊云科技云服务器望而却步。其实亚马逊云科技很多服务都有免费套餐,以让用户体验,这些服务的免费套餐,搭建一个单节点数据库服务绰绰有余。

今天我将通过从登录云服务器到安装部署PG开源数据库来给大家测评亚马逊EC2云服务器的优势

1. 亚马逊EC2云服务器简介

亚马逊EC2(Elastic Compute Cloud)云服务是亚马逊AWS(Amazon Web Services)提供的一种云计算服务。它允许用户租用虚拟计算资源,包括CPU、内存、存储和网络带宽,以满足他们的计算需求。核心特点和优势如下:

  1. 灵活性:用户可以根据需要随时启动、停止、调整和删除EC2实例,以便满足不断变化的计算需求。
  2. 可靠性:提供高可用性和容错性,确保用户的应用程序能始终保持运行状态。此外,亚马逊EC2的服务等级协议承诺为每个EC2地区提供99.99%的可用性。
  3. 安全性:提供了多层安全措施,包括网络隔离、数据加密和身份验证,以保护用户的数据和应用程序免受攻击。
  4. 成本效益:采用按需计费模式,用户只需支付实际使用的计算资源费用,无需预先投资硬件或承担维护和管理物理服务器的费用。
  5. 可扩展性和功能性:提供了根据需要扩大或缩小规模的设施,能轻松处理各种动态场景。为用户提供了一个真正的虚拟计算平台,可以在其中执行各种操作。

1.2 亚马逊EC2云务器与弹性云服务器区别

  • 亚马逊EC2云服务器与国内云厂商提供的云服务器在技术上的优势有以下几个方面:
    1. 成熟的技术和丰富的经验:亚马逊作为最早的云服务提供商之一,拥有多年的技术积累和经验沉淀。其在技术实现、稳定性、可靠性等方面具有较为明显的优势。
    2. 全球基础设施:在全球范围内建立了庞大的数据中心网络,可以在全球范围内提供低延迟、高性能的计算服务。对国内出海用户部分便利
    3. 强大的弹性和可扩展性:允许用户根据实际需求快速增加或减少服务器资源,这种灵活性使得用户能够根据业务需求快速调整服务器规模,从而降低了成本和管理的复杂性。
    4. 丰富的服务和功能:提供了丰富的附加服务和功能,如数据库、存储、网络、安全等。这些服务和功能与EC2云服务器紧密结合,为用户提供了一站式的云计算解决方案。
    5. 开放性和兼容性:支持多种操作系统和开发工具,具有良好的开放性和兼容性。使用户能够轻松地将现有的应用程序迁移到EC2云服务器上,并对其进行定制和优化。

image-20231111231519344

2. 亚马逊EC2云服务器配置流程

2.1 亚马逊EC2云服务器实例配置

2.1.1 EC2实例购买教程

因为AWS为国外云服务提供商,和目前国内主流的云服务提供商的购买流程略有差别,所以在此一并介绍如何购买并使用AWS云服务器EC2实例

进入AWS官网: https://aws.amazon.com/cn/

image-20231112002011948

点击左上角登录,进入控制台,然后在控制台首页访问EC2

image-20231112003243548

在EC2控制台可以看到我们已经购买的云服务器和一些相关信息

image-20231112003450911

若没有购买相关Ec2实例,若用户为初次使用亚马逊云服务相关资源,则可以免费获得一年的Ec2实例资源使用权限。

下面将展示如何领取或者购买EC2实例资源

点击启动实例

在启动之前需要选择服务器所在区域,区域选择在控制台左上角

image-20231112003653970

关于镜像选择,大家可以根据自己的实际需求选择合适的镜像,这里我选择的是Redhat,然后选择符合买条件的免费套餐,这样我们就可以免费获取相关资源,当然,免费资源的规格类型为1c-1g,如果需要更高规格服务器,则需要付费购买。

image-20231112003937885

选择完操作系统后,我们需要选择密钥对来进行后续的登录操作,若没有密钥对,则需要手动创建新的密钥对

image-20231112004146744

创建好新的秘钥对后需要将其pem文件下载到本地,方便后续进行远程ssh登录。

AWS的云服务器EC2的创建阶段和国内其他云服务器厂商的购买流程配置上也有些区别,比如,无法在初始化时直接通过root密码登录,需要通过密钥对登录后设置root密码

在网络配置阶段,选择启用公网IP,同时根据自己的业务需求设置不同的安全组

image-20231112004724781

存储则需要根据业务需求进行选择,我这里选择40GB(后续可以更改)

image-20231112004915284

全部填写完后,选择启动实例

image-20231112004940180

2.1.1 EC2实例初始化配置

在购买完EC2实例后,我们返回控制台进行查看,可以看到刚才购买的云服务器正在初始化,等待大约5分钟后会初始化完成

image-20231112005220142

点击进去查看详情

可以看到此云服务器的详细配置信息

image-20231112005403219

在登录之前,需要确认安全组已经放通相关端口

2.1.2 远程登录EC2服务器实例

每个人的喜好不太一样,常用的shell登录终端有很多,这里我使用的是Finalshell

Finalshell是一款强大的终端工具,它集成了SSH客户端、X服务器和Unix命令集工具箱。在Windows操作系统下,MobaXterm可以帮助用户轻松地连接并操作Linux服务器。

Finalshell具有以下特点:

  1. 集成了SSH客户端:通过内嵌SSH客户端,可以快速建立与Linux服务器的安全连接,实现远程登录和管理。
  2. 支持X服务器:集成了X服务器,可以在Windows上运行Unix/Linux环境,并支持图形界面应用程序。
  3. 提供Unix命令集:集成了Unix命令集(GNU/Cygwin),用户可以在Windows上运行大多数Linux命令,实现高效的终端操作。
  4. 多终端视窗:支持开启多个终端视窗,可以同时连接多个Linux服务器,并进行灵活的终端管理。
  5. 可扩展性强:可以通过集成插件来扩展功能,例如运行Gcc、Perl、Curl、Tcl/Tk/Expect等程序。
  6. 免费开源:分为免费开源版和收费专业版,用户可以免费使用开源版,并根据需求选择专业版以获得更多的功能和更好的技术支持。

新建ssh登录,填写EC2实例的ip和用户名并通过刚才设置的密钥对进行登录

image-20231112010418783

登录成功

3. PG数据库搭建

3.1 PostgreSQL 简介

PostgreSQL 是一个功能强大的开源数据库系统。经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内极高的声誉。目前PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix和Windows。

PostgreSQL 是完全的事务安全性数据库,支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。PostgreSQL数据库提供了丰富的接口,可以很方便地扩展它的功能,如可以在GiST框架下实现自己的索引类型,支持使用C语言写自定义函数、触发器,也支持使用流行的编程语言,写自定义函数。PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python、PL/Java、PL/Tcl等。

作为一种企业级数据库,PostgreSQL以它所具有的各种高级功能而自豪,像多版本并发控制( MVCC )、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在线热备、复杂查询的规划和优化以及为容错而进行的预写日志等。它支持国际字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作。它也在所能管理的大数据量和所允许的大用户量并发访问时间具有完全的高伸缩性。

PostgreSQL 数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,至少实现了SQL:2011标准中要求的179项主要功能中的160项(注:目前没有哪个数据库管理系统能完全实现SQL:2011标准中的所有主要功能)。

  • 稳定可靠:PostgreSQL是唯一能做到数据零丢失的开源数据库。目前有报道称国内外有部分银行使用PostgreSQL数据库。
  • 开源省钱:PostgreSQL数据库是开源的、免费的,而且使用的是类BSD协议,在使用和二次开发上基本没有限制。
  • 支持广泛:PostgreSQL 数据库支持大量的主流开发语言,包括C、C++、Perl、Python、Java、Tcl以及PHP等。
  • PostgreSQL社区活跃:PostgreSQL基本上每3个月推出一个补丁版本,这意味着已知的Bug很快会被修复,有应用场景的需求也会及时得到响应。

3.2 pg数据库安装

数据库源替换下载

sed -i "s|\$releasever|8-stream|g" /etc/yum.repos.d/CentOS-*.repo
yum makecache
yum install -y postgresql postgresql-server
 
systemctl start postgresql
systemctl enable postgresql
systemctl status postgresql
 [root@ip-172-31-20-118 yum.repos.d]# yum install -y postgresql15
Fedora 2023.2.20231113 - x86_64 - aliyun                 4.6 kB/s | 2.3 kB     00:00    
Errors during downloading metadata for repository 'fedora':
  - Status code: 404 for http://mirrors.aliyun.com/fedora/releases/2023.2.20231113/Everything/x86_64/os/repodata/repomd.xml (IP: 47.246.24.249)
Error: Failed to download metadata for repo 'fedora': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
Ignoring repositories: fedora
Last metadata expiration check: 0:01:11 ago on Thu Dec  7 15:45:59 2023.
Dependencies resolved.
=========================================================================================
 Package                       Arch       Version                  Repository       Size
=========================================================================================
Installing:
 postgresql15                  x86_64     15.4-1.amzn2023.0.1      amazonlinux     1.6 M
Installing dependencies:
 postgresql15-private-libs     x86_64     15.4-1.amzn2023.0.1      amazonlinux     144 k

Transaction Summary
=========================================================================================
Install  2 Packages

Total download size: 1.8 M
Installed size: 6.9 M
Downloading Packages:
(1/2): postgresql15-15.4-1.amzn2023.0.1.x86_64.rpm       9.9 MB/s | 1.6 MB     00:00    
(2/2): postgresql15-private-libs-15.4-1.amzn2023.0.1.x86 846 kB/s | 144 kB     00:00    
-----------------------------------------------------------------------------------------
Total                                                    6.9 MB/s | 1.8 MB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                 1/1 
  Installing       : postgresql15-private-libs-15.4-1.amzn2023.0.1.x86_64            1/2 
  Installing       : postgresql15-15.4-1.amzn2023.0.1.x86_64                         2/2 
  Running scriptlet: postgresql15-15.4-1.amzn2023.0.1.x86_64                         2/2 
  Verifying        : postgresql15-15.4-1.amzn2023.0.1.x86_64                         1/2 
  Verifying        : postgresql15-private-libs-15.4-1.amzn2023.0.1.x86_64            2/2 

Installed:
  postgresql15-15.4-1.amzn2023.0.1.x86_64                                                
  postgresql15-private-libs-15.4-1.amzn2023.0.1.x86_64                                   

Complete!

1.检查当前已安装的PostgreSQL版本:
yum list installed | grep postgresql
2.确定要安装的新版本。您可以在PostgreSQL的官方网站或存储库中找到可用的版本信息。
3.移除旧版本的PostgreSQL:
yum remove postgresql-server
4.添加新版本的PostgreSQL存储库。根据您的操作系统和所选的PostgreSQL版本,可能会有不同的存储库和命令。下面是一个示例命令,用于添加官方的PostgreSQL存储库(以CentOS 8为例):
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
5.更新yum缓存:
yum makecache
6.安装新版本的PostgreSQL:
yum install -y postgresql-server
7.初始化和配置新安装的PostgreSQL:
/usr/bin/postgresql-setup initdb
8.启动PostgreSQL服务:
systemctl start postgresql
9.确保PostgreSQL服务在系统启动时自动启动:
systemctl enable postgresql

image-20231207234908883

3.3 初始化数据库并启动安装

#找到初始化目录
find / -name "postgresql-setup"
/usr/bin/postgresql-setup  initdb
#启动安装  设置开机自启动
 systemctl start  postgresql.service
 systemctl enable  postgresql.service
systemctl status postgresql

3.4 登录数据库设置密码

登录数据库:su postgres //切换账号
然后输入psql
登陆成功!可进行数据库的操作
查看有哪些数据库:\l
退出数据库:\q
切换到root 用户:su root 密码:Admin123@
#### 172.30.3.11/172.30.3.18 数据库 用户 :esg 密码:esg1346852 
# 导出数据库的表成CSV格式的文件;导出来字符有问题可以用notepad++转换
psql -h 172.30.3.11 -p 5432 -d esg -U esg -c "\copy company_pollution_clean to './company_pollution_clean.csv' WITH csv header delimiter ',' encoding 'UTF8'";
 
pg_dump -h 172.30.3.11 -p 5432 -U esg -t news -f news.sql esg
-U 用户名 -t 表名 最后 库名 -f 导出的文件
 
1.基本命令:
createdb 创建一个新的PostgreSQL的数据库(命令可以使用大写)
createuser 创建一个新的PostgreSQL的用户 
dropdb 删除数据库
dropuser 删除用户
pg_dump 将PostgreSQL数据库导出到一个脚本文件
pg_dumpall 将所有的PostgreSQL数据库导出到一个脚本文件
pg_restore 从一个由pg_dump或pg_dumpall程序导出的脚本文件中恢复PostgreSQL数据库
psql 一个基于命令行的PostgreSQL交互式客户端程序
vacuumdb 清理和分析一个PostgreSQL数据库,它是客户端程序psql环境下SQL语句VACUUM的shell脚本封装,二者功能完全相同
 
2. 数据库中的命令:
template1=# \l 查看系统中现存的数据库
template1=# \q 退出客户端程序psql
template1=# \dt 查看表
template1=# \d 查看表结构
template1=# \di 查看索引
template1=# \c 从一个数据库中转到另一个数据库中,如template1=# \c sales 从template1转到sales
 
3.基本数据库操作
创建数据库: create database [数据库名];
查看数据库列表: \d
删除数据库: . drop database [数据库名];
创建表: create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);
查看表名列表: \d
查看某个表的状况: \d [表名]
重命名表: alter table [表名A] rename to [表名B];
删除表: drop table [表名]; 
 
4. 表内基本操作
在已有的表里添加字段: alter table [表名] add column [字段名] [类型];
删除表中的字段: alter table [表名] drop column [字段名];
去除缺省值: alter table [表名] alter column [字段名] drop default;
在表中插入数据: insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
重命名一个字段: alter table [表名] rename column [字段名A] to [字段名B];
给一个字段设置缺省值: alter table [表名] alter column [字段名] set default [新的默认值];
修改表中的某行某列的数据: update [表名] set [目标字段名]=[目标值] where [该行特征];
删除表中某行数据: delete from [表名] where [该行特征];
 
delete from [表名];--删空整个表 
5. 备份数据库
可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库:
pg_dump sales>/home/pgsql/backup/myback.bak
 

pg常用命令

登录命令:
 
psql -h IP -p 端口 -U 用户名 -d 数据库名 -W
\? 所有命令帮助
\l 列出所有数据库
\d 列出数据库中所有表
\dt 列出数据库中所有表
\d [table_name] 显示指定表的结构
\di 列出数据库中所有 index
\dv 列出数据库中所有 view
\h sql命令帮助
\q 退出连接
\c [database_name] 切换到指定的数据库
\c 显示当前数据库名称和用户
\conninfo 显示客户端的连接信息
\du 显示所有用户
\dn 显示数据库中的schema
\encoding 显示字符集
select version(); 显示版本信息
\i testdb.sql 执行sql文件
\x 扩展展示结果信息,相当于MySQL的\G
\o /tmp/test.txt 将下一条sql执行结果导入文件中
 
 
查询所有数据库:
select datname from pg_database;
 
创建数据库:
create database 数据库名 owner 所属用户 encoding UTF8;
create database model owner model encoding UTF8;
注意:创建完数据库,需要切换到数据库下,创建和当前用户同名scheme,删除数据库后schema也会一并删除:
 
-- 重新登陆到新数据库下,执行如下语句
create schema AUTHORIZATION CURRENT_USER;
删除数据库:
drop database 数据库名;
注意:删库前需要关闭所有会话,不然会提示:
ERROR:  database "mydb" is being accessed by other users
DETAIL:  There are 8 other sessions using the database.
 
关闭数据库所有会话:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='mydb' AND pid<>pg_backend_pid();

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 09:50:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 09:50:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 09:50:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 09:50:06       20 阅读

热门阅读

  1. Flask 的执行流程

    2023-12-08 09:50:06       40 阅读
  2. Statistical signal processing exam learning notes(Aalto)

    2023-12-08 09:50:06       30 阅读
  3. Flask 自定义template和静态文件路径

    2023-12-08 09:50:06       39 阅读
  4. 基于Amazon Bedrock介绍大语言模型

    2023-12-08 09:50:06       36 阅读
  5. 正则表达式

    2023-12-08 09:50:06       49 阅读
  6. 小程序-swiper的高随里面的图片高自适应

    2023-12-08 09:50:06       38 阅读
  7. 在目标检测的图框标注中注意一下几点

    2023-12-08 09:50:06       34 阅读