PostgreSQL准备和部署

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL和PostgreSQL——两个开放源码的关系数据库管理系统,每个系统都有自己的粉丝。多年来,MySQL一直是PostgreSQL社区的乐趣之源——默认的、非常宽松的SQL模式、缺乏对更复杂连接的支持、没有位图索引等等。

MySQL和PostgreSQL——两个开放源码的关系数据库管理系统,每个系统都有自己的粉丝。多年来,MySQL一直是PostgreSQL社区的乐趣之源——默认的、非常宽松的SQL模式、缺乏对更复杂连接的支持、没有位图索引等等。另一方面,MySQL爱好者指出了MySQL的健壮性,以及通过复制向外扩展是多么容易。

您可能会问——为什么要在一个环境中同时使用这两个数据库?在Galera集群旁边运行一个复制的PostgreSQL设置有什么价值吗?在这篇博客文章中,我们将从MySQL DBA的角度来回答这个问题。我们还将讨论部署PostgreSQL的不同方法。

为什么是PostgreSQL?

复杂查询的性能

PostgreSQL的一个优点是它能够很好地处理复杂的查询,而且是以一种有效的方式。PostgreSQL能够使用不同的连接算法(比如散列连接),并且在构建最佳执行计划方面非常灵活。另一方面,MySQL只支持嵌套循环连接,这可能不是每个查询的最佳选择。

PostgreSQL可能比MySQL更快的另一个原因是子查询处理。在执行子查询方面,MySQL优化器远非完美。在过去,它将大部分查询作为依赖子查询执行,并且需要手动重写查询来加快这类查询的速度。在MySQL 5.6中,已经做了一些改进,现在可以实现子查询的物化。MySQL 5.7进一步改进了对这类查询的处理,但是它仍然可以产生一个不如PostgreSQL那么理想的查询执行计划。

PL/pgSQL

PL/pgSQL

在MySQL中创建程序非常困难。它中可用的编程语言是有限的,而且远不如其他RDBMS系统(包括PostgreSQL)中可用的语言灵活。在PostgreSQL中构建存储过程要比在MySQL中容易得多——它可以构建一组存储过程,甚至可以将复杂的操作转移到数据库中。使用MySQL,由于MySQL存储过程语言的限制,您很可能不得不将一些逻辑转移到应用程序中。使用PostgreSQL更好的是,PL/pgSQL不是惟一可以编写过程的语言—它可以是C,也可以是PL/Tcl、PL/Perl和PL/Python,这些都包含在核心发行版中。还可以添加许多其他选项。

JSON和GIS支持

PostgreSQL支持JSON和GIS数据——如果您使用其中一种类型的数据,您可能希望在您的环境中包含PostgreSQL。说到MySQL, GIS数据是通过MyISAM表来支持的,而且直到最近才被引入到MySQL 5.7的InnoDB中。JSON数据类型在MySQL 5.7中也可用。在编写本文时,Galera不支持5.7,因此Galera用户可以选择使用单独的5.7实例或PostgreSQL来处理这类数据。使用PostgreSQL的另一个理由是,InnoDB中对GIS和JSON的支持是相当新的。这些特性还不成熟,可能需要一些时间来解决早期的问题。PostgreSQL为您提供了一个经过良好测试的替代方案

PostgreSQL的部署

PostgreSQL在大多数Linux的发行版本中都可用,你也可以简单的通过yum或者apt-get进行安装。

当安装完成后,PostgreSQL提供了安全的访问的方式-你只能在本地进行访问,直到你切换到postgres用户下。此时,你可以通过如下方式访问。(译者注:当到PG10的时候,默认的访问方式已经改变,任何用户都可以在本地访问)

[root@localhost ~]# su - postgres
上一次登录:五 7月 12 16:11:26 CST 2019pts/0 上
[postgres@localhost ~]$ psql
psql (10.1)
Type "help" for help.

postgres=# 

你可以使用这种方式访问,但是更好的方式通过配置文件控制客户端的访问。
配置文件为pg_hba.conf(HBA stands for host-based authentication.) ,文件一般在$PGDATA目录下。
PostgreSQL 10 安装完成后,默认的pg_hba.conf文件如下,有六条定义好的规则条目。

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

第一列为主机的类型:

  • local(unix-domain的socket连接访问,即通过运行在同一台主机的进程间进行通信)
  • host(TCP/IP socket连接)
  • hostssl(SSL加密的TCP/IP socket连接)

第二列为DATABASE表示数据库名称

  • all匹配所有数据库
  • sameuse匹配请求的用户和数据库一致的情况
  • samerole匹配请求的用户所在角色与数据库一致的情况
  • replication匹配物理复制的连接请求
  • 数据库名称 ,或者多个数据库名称用 逗号

注意ALL不匹配 replication

第三列表示用户名称

  • all
  • 一个用户名
  • 一组用户名 ,多个用户时,可以用 ,逗号隔开

第四列表示客户端的IP

  • 可以是一个地址,10.110.9.155/32
  • 地址范围,10.110.9.155/28
  • 通配的地址,0.0.0.0/0

第五列(最后一列)表示认证方式

经常使用的有三种

  • peer 操作系统用户名称和数据库的用户名称一致
  • md5 使用md5的方式验证密码登录
  • trust 无需验证,允许所有客户端连接

创建postgres以外的用户,如下所示

[postgres@localhost data]$ createuser -P --interactive
Enter name of role to add: s9suser
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
[postgres@localhost data]$ createuser -P --interactive
Enter name of role to add: s9sadmin
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) y

在上面的示例中,我们创建了两个用户

  • s9suser,作为普通用户;
  • s9sadmin,作为超级用户

接下来,我们可以用新创建的用户连接数据库

[postgres@localhost data]$ psql -h 127.0.0.1 postgres s9suser
psql (10.1)
Type "help" for help.

postgres=> 

虽然此时可以连接。但不幸的是,我们无法从本地主机外部连接到PostgreSQL实例。要改变这一点,需要几个步骤。

首先,我们需要让PostgreSQL监听环回以外的接口。我们需要找到并编辑postgresql.conf文件。它位于与pg_hba相同的目录中。
当你使用选择的文本编辑器打开它时,您将看到以下条目:

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)

从这里可以看到,默认情况下,PostgreSQL只监听本地主机,为了接受外部连接,我们需要将这个值更改为其他值。这种更改需要重新启动服务。我们将其更改为本地的IP地址:10.110.9.155。并重新启动PostgreSQL。当它重新出现时,我们可以确认它确实在听:

[root@localhost ~]# netstat -lnp | grep 5432
tcp        0      0 10.110.9.155:5432       0.0.0.0:*               LISTEN      4646/postmaster     
unix  2      [ ACC ]     STREAM     LISTENING     39440    4646/postmaster      /tmp/.s.PGSQL.5432

当我们通过其他主机访问时,仍然会遇到如下的错误

[postgres@localhost data]$ psql -h 10.110.9.155 postgres s9suser
psql: FATAL:  no pg_hba.conf entry for host "10.110.9.154", user "s9suser", database "postgres"
[postgres@localhost data]$ 

我们需要在pg_hba.conf中新增条目,允许这个IP可以连接

host    all             all             10.110.9.154/32         md5
[postgres@localhost data]$ psql -h 10.110.9.155 postgres s9suser
Password for user s9suser: 
psql (10.1)
Type "help" for help.

postgres=> 

数据库可正常访问。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
Docker 容器 关系型数据库
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
本期课程将于4月11日19:00开始直播,内容包括源码编译基础知识和实践操作,课程目标是使学员掌握源码编译部署技能,为未来发展奠定基础,期待大家在课程中取得丰富的学习成果!
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
|
3天前
|
弹性计算 关系型数据库 分布式数据库
PolarDB 开源部署体验评测
PolarDB开源部署方式全解读,带你全方位了解PolarDB部署的那些事。
129 10
|
28天前
|
关系型数据库 MySQL 数据库
测试部署PolarDB-X 分布式与集中式
在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。
47736 10
测试部署PolarDB-X 分布式与集中式
|
16天前
|
Ubuntu 关系型数据库 分布式数据库
开源PolarDB -X 部署安装
本文记录了在Ubuntu 20.04上部署阿里云分布式数据库PolarDB-X的步骤,包括环境准备、安装依赖、下载源码、编译安装、配置启动,并分享了遇到的配置错误、依赖冲突和日志不清等问题。作者建议官方改进文档细节、优化代码质量和建立开发者社区。安装历史记录显示了相关命令行操作。尽管过程有挑战,但作者期待产品体验的提升。
179 6
|
1月前
|
存储 关系型数据库 MySQL
数据管理的艺术:PolarDB开源版详评与实战部署策略(一)
PolarDB-X是阿里巴巴自研的高性能云原生分布式数据库,基于共享存储的Shared-nothing架构,支持MySQL生态,具备金融级高可用、分布式水平扩展、HTAP混合负载等能力。它通过CN(计算节点)和DN(存储节点)实现计算与存储分离,保证数据强一致性,并支持全局二级索引和多主多写。PolarDB-X开源版提供更高程度的定制化和控制权,适合追求技术自主性和成本优化的开发者。部署方式包括RPM包、PXD工具和Kubernetes,其中PXD工具提供了一键部署的便利性。
233700 22
|
1月前
|
存储 关系型数据库 分布式数据库
数据管理的艺术:PolarDB开源版详评与实战部署策略(二)
PolarDB-PG是阿里云的一款云原生关系型数据库,100%兼容PostgreSQL,支持Oracle语法,采用Shared-Storage存储计算分离架构,提供极致弹性、毫秒级延迟的HTAP能力。具备高可用、高可靠和弹性扩展特性,支持单机、存储计算分离和X-Paxos三节点等多种部署形态。通过Docker可快速部署实例,包括单节点、一主一备和HTAP(一主两备)实例。此外,文章还介绍了在ECS上使用ESSD云盘搭建PolarDB-PG的详细步骤,适合开发和测试环境。
222703 22
|
23天前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB在混合云环境下的部署策略与挑战
【5月更文挑战第29天】PolarDB,阿里云的高性能分布式数据库,应对混合云环境的部署策略包括:灵活的架构选择(如Kubernetes)、跨云平台数据实时同步及内置安全特性保障数据安全。然而,也面临复杂性、成本优化和运维难度等挑战。示例展示了使用Kubernetes StatefulSet部署PolarDB的基本配置。
225 3
|
30天前
|
自然语言处理 算法 关系型数据库
postgresql 全文检索 SCWS和zhparser部署
UPDATE report_content SET content_tsv = to_tsvector('testzhcfg',content);
33 8
|
28天前
|
存储 弹性计算 固态存储
*PolarDB-PG开源版本 基于ECS+ESSD云盘共享存储的部署测评**
PolarDB-PG在阿里云ECS与ESSD云盘的组合下展现优秀性能,简化部署流程,提供高并发写入时低延迟稳定性。ESSD的高性能IOPS和读取速度优化了数据库表现,只读节点实现近乎实时数据访问。分布式部署保证高可用性,即使面对故障也能快速切换。尽管ESSD初期成本较高,但长期看能降低总体拥有成本,尤其适合高并发、大数据量场景。此解决方案平衡了性能、可用性和成本,是企业级应用的理想选择。
|
28天前
|
监控 关系型数据库 MySQL
基于AnolisOS8.6+PolarDB-X部署ZABBIX6.0
在AnolisOS-8.6-x86_64-minimal虚拟环境中,使用VirtualBox配置2 vCPU,4G RAM和60 vDisk,下载并安装PolarDB-X,包括libaio和ncurses-devel依赖。创建polarx用户,设置权限和目录结构,编写my.cnf配置文件,然后初始化并启动PolarDB-X。接着安装ZABBIX 6.0,创建数据库、用户及权限,导入数据,并编辑Zabbix配置文件以匹配PolarDB-X。最后,重启相关服务,启用并检查状态,通过指定IP访问Zabbix Web界面,注意初始账号密码为Admin / zabbix。

热门文章

最新文章