分享人:Digoal 阿里云资深数据库专家
正文:
本篇内容将通过三个部分来介绍PG+MySQL第2课。
一、pgadmin
二、DMS
三、psql cli
一、pgadmin
pgadmin是官方开源的图形化的管理工具。以苹果客户端为例,到官网选择最新版本下载。
下载之后,解压到应用程序里。pgadmin是web服务,我们通过浏览器使用它,企业的开发人员可以直接通过服务器连接数据库。设置密码之后,可以切换语言,方便后期操作。
打开阿里云官网,点击控制台,选择产品服务,选择数据库里的RDS,击创建实例,选择PG引擎。如果要选择ESSDPL2,请选择新可用区。老可用区很油可能没有ESSD资源。如果购买失败,会轻致无法再享受免费活动,建议直接买ESSD云盘。测试时建议选择s保障可以创建实例,生产建议ESSD PL2以1L。
确认支付,等待创建。如果实例目前只是拿来做学习测试,可以取消自动续费功能。如果用作生产,记得勾选自动续费。
配置防火墙,选择数据库安全特性。根据实际需求,修改IP地址。创建连接数据库的账号,根据实际需求,选择高权限或者普通账号。建议我们一定要自己创建自己的数据库,不要用自带的数据库。由于权限限制,自带数据库无法导出所有数据。
如果A业务跟B业务完全独立,相互之间没有任何数据交集,创建两个数据库。不同的数据库之间,没有办法直接访问对应的目标表。创建之后,改一下数据库的名称,便于记忆和管理。
二、DMS
在主页的基本信息页面,找到登录数据库,输入创建的用户和密码,点击登录。
pgadmin可以部署在两个地方,一个是部署在你的ECS,通过外服务连接,部署pgadmin。当pgadmin部署在本地服务器,需要申请一个外网地址,点击申请外网,就可以通过这个地址访问。
接下来,我们介绍一下pgadmin的逻辑结构。pgadmin逻辑结构,设计比较清晰。你可以在有限存储范围内,创建无数个数据库。比如你买了500g的硬盘,你最多只能创建500g的数据库。
我们在访问数据库时,会有多个业务或者不同用户访问,这个时候就会涉及到权限的问题。权限跟数据库的逻辑结构息息相关,每一级都要赋权限,每一层的每一个对象也都有独立权限。
接下来,我们用PG连接一个实例。首先打开web终端,点击创建server,给实例命名,拷贝公网地址,填写端口,创建用户,输入密码,点击保存之后就可以连接了。
因为pgadmin数据库支持sll连接,我们通过公网最好还是用sll连接,避免信息被泄露的问题。我们在数据库安全,打开控制台,点击sll,开启ssl。然后断开连接,右键点击server,disconnect之后,点击属性。点击系统视图,查询sll是否启用。
我们来了解一下pgadmina的结构。首先是server,就是实例的意思。我们现在只有一个实例,所以我们只看到pgadmin test。在pgadmin test下面,有database。每一个database下面有表序列,存储过程的物化视图函数,外部表,域等等。如果查询某一张表,可以直接点右键,就可以查询了。因为pgadmin支持在一个实例里面,创建多个database,不同的database可能放了不同的业务。所以一定关注当前连接的是哪一个database。
在使用pgadmin时,不要随便count。不要查询大表不带limit,会返回所有记录。如果执行了查询大表返回所有记录,怎么停止?如果有一张上亿的表,几十亿的表,我们可以点击停止按钮,就可以停止返回。
接下来,我们讲讲pgadmin的逻辑备份和逻辑还原。表级别、库级别、schema级别,可选择结构或数据备份。选中要备份的数据库,右击数据库,选择备份。点击备份出现以下对话框,点击文件名后面有三个点的按钮,选择要备份的路径,并输入备份文件的名称。点击完成就备份成功了。
还原时,如果数据库中没有要还原的数据库,应该先创建一个名字和备份文件相同的。如果要还原到其他数据库中也可以,这样就把原来数据库给覆盖了。创建一个数据库,仅需要输入数据库名称,选择用户就可以了。右击数据库名称,选择恢复,出现下面的对话框。然后选择备份好的backup文件,进行还原。恢复失败通常可能和权限、用户缺失、对象命名冲突等有关。
三、psql cli
最后,我们来看一下图形化管理界面,命令行界面。使用命令行可以做一些更加更加底层的操作。申请 ecs 与RDS 在相同的vpc,相同的region,相同的az。镜像选择7.7,压测性能建议2c以上,否则客户端会成为瓶颈。
一个应用程序可以同时打开多个后端连接。每个连接都有一个PG对象,通过连接对象发送查询之前,应调用该函数,检查成功连接的返回值。如果不受信任的用户访问数据库,可以将参数关键字设置options为 value -csearch_path=。或者,在连接后发出。
当你把主机名,端口,数据库名,用户名,密码,这五个环境变量都设好之后。可以写到环境变量的某个需要的脚本里,它会自动识别环境变量,自动连接设置好的数据库。
接下来,给大家说几个重要命令。第一,\?。当你连到数据库的需要之后,反斜线问号会告诉你需要的帮助。第二,TAB键。比如create table之后,不记得要什么东西了,直接按TAB键,就会帮你把一些记不住的东西补齐。第三,\h。当你不知道怎么写完整的语法,输入\h。它就会create所有的东西,帮你打印出来。第四,打印sql耗时,输入\timing。第五 ,切换数据库。输入\c。第六,有哪些数据库,分别占用多少空间,输入\l+。第七,当前数据库有哪些schema,输入\dn+。第八,当前默认路径,输入show search_path。第九,表,权限,以及占用的空间,输入\dt+。第十,表结构,输入\d tablename。第十一,安装了哪些插件模块,输入\dx。
数据库支持copy语法,但为什么用\copy呢?如果直接执行copy语法,它是一个数据库端协议。如果把它copy到外部文件,它把它copy到了服务器。copy是服务端,\copy是客户端命令。我们把客户端命令在内部做了转译,用服务端,客户端的远程协议,把数据文件copy到本地。
我们如何不落地将数据导入到rds pg?首先,编辑密码文件vi~/.pgpass。在主机1和主机2输入数据库,用户,密码。chmod 400~/.pgpass。如果单个事务倒入,有任何错误都会导致全部回滚。输入:nohup pg_dump-F p-h主机1-p端口-U用户-d数据库|psql-h主机2-p端口-U用户-1数据库>./imp.log1 2>&1&。有错误不会导致全部回滚,输入:nohup pg_dump-F p-h主机1-p端口-U用户-d数据库|psql-h主机2-p端口-U用户数据库>./imp.log2 2>&1&。通过这种管道的方式,本地不用落任何东西,直接传输云端,来解决备份问题。