签到成功

知道了

CNDBA社区CNDBA社区

GreenPlum数据库创建用户、文件空间、表空间、数据库

2018-10-30 10:54 4170 0 原创 PostgreSQL
作者: Marvinn

GreenPlum数据库创建用户、文件空间、表空间、数据库http://www.cndba.cn/Marvinn/article/3101http://www.cndba.cn/Marvinn/article/3101

http://www.cndba.cn/Marvinn/article/3101
http://www.cndba.cn/Marvinn/article/3101http://www.cndba.cn/Marvinn/article/3101
http://www.cndba.cn/Marvinn/article/3101
http://www.cndba.cn/Marvinn/article/3101
http://www.cndba.cn/Marvinn/article/3101
http://www.cndba.cn/Marvinn/article/3101
http://www.cndba.cn/Marvinn/article/3101

1、创建数据库    -E 数据库字符集
[gpadmin@master ~]$ createdb GP -E utf-8

2、创建用户
[gpadmin@master ~]$ psql -d PG
psql (8.2.15)
Type "help" for help.

PG=# create role dbdream password 'dbdream' createdb login;
NOTICE:  resource queue required -- using default resource queue "pg_default"
CREATE ROLE

通常创建用户,赋予login权限基本就够用了,创建用户的语法可以通过/h create role命令来查看,这里不做记录了。可以通过pg_roles字典开查看数据库的用户信息。
PG=> /h create role        
Command:     CREATE ROLE
Description: define a new database role
Syntax:
CREATE ROLE name [[WITH] option [ ... ]]
where option can be:
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEEXTTABLE | NOCREATEEXTTABLE 
      [ ( attribute='value'[, ...] ) ]
           where attributes and values are:
           type='readable'|'writable'
           protocol='gpfdist'|'http'|'gphdfs'
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp' 
    | IN ROLE rolename [, ...]
    | ROLE rolename [, ...]
    | ADMIN rolename [, ...]
    | RESOURCE QUEUE queue_name

PG=# select rolname,oid from pg_roles;
 rolname |  oid  
---------+-------
 gpadmin |    10
 ccdba   | 17195
(2 rows)

3、创建完用户后,还需要修改pg_hba.conf文件,来赋予用户的远程登录权限。
[gpadmin@master gpseg-1]$ pwd
/data/master/gpseg-1
[gpadmin@master gpseg-1]$ vi pg_hba.conf

增加以下内容
host    all     dbdream         172.16.10.21/32   md5

通过gpstop -u命令重新加载配置文件(不关闭系统,重新载入更改的配置文件),使之生效后,ccdba用户即可远程访问数据库了。
[gpadmin@master gpseg-1]$ gpstop -u
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Starting gpstop with args: -u
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Gathering information and validating the environment...
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Obtaining Greenplum Master catalog information
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Obtaining Segment details from master...
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Greenplum Version: 'postgres (Greenplum Database) 4.3.7.3 build 2'
20181030:10:14:08:015076 gpstop:master:gpadmin-[INFO]:-Signalling all postmaster processes to reload
... 

[gpadmin@master gpseg-1]$ psql -d PG -U ccdba -h 172.16.10.21 -p 5432
Password for user ccdba: 
psql (8.2.15)
Type "help" for help.
可以使用/c命令或者/conninfo命令来查看当前的登录信息。
PG=> /c
You are now connected to database "PG" as user "ccdba".
PG=> 


3、创建表空间需要先创建文件空间,文件空间是在操作系统层创建,创建文件控制需要指定已存在的目录,通常需要规划并创建目录。Master和所有Segment节点都需要创建。可以使用下面的命令查看当前数据库的表空间和文件空间对应关系。

PG=> select a.spcname,b.fsname from pg_tablespace a,pg_filespace b where spcfsoid=b.oid;
  spcname   |  fsname   
------------+-----------
 pg_default | pg_system
 pg_global  | pg_system
(2 rows)

当前数据库只有pg_segment一个文件空间,上面有pg_default和pg_global两个表空间 。

下面先创建Master节点的目录
[gpadmin@master data]$ mkdir -p /data/gpdata/fspc_master

注意:有Standby节点也需要手工创建
[root@standby ~]# su - gpadmin
[gpadmin@standby ~]$ mkdir -p /data/gpdata/fspc_master
[gpadmin@standby ~]$ 


然后在Master节点通过gpssh命令创建Segment节点的目录以及对应的Mirror镜像目录
[gpadmin@master data]$ gpssh -f /gp/conf/seg_host -e 'mkdir -p /data/gpdata/fspc_segment'

[gpl2] mkdir -p /data/gpdata/fspc_segment
[gpl1] mkdir -p /data/gpdata/fspc_segment
[gpl3] mkdir -p /data/gpdata/fspc_segment

[gpadmin@master ~]$ gpssh -f /gp/conf/seg_host -e 'mkdir -p /data/gpdatamirror/fspc_segment'
[gpl1] mkdir -p /data/gpdatamirror/fspc_segment
[gpl3] mkdir -p /data/gpdatamirror/fspc_segment
[gpl2] mkdir -p /data/gpdatamirror/fspc_segment

创建完目录后,可以通过gpfilespace命令创建文件空间
[gpadmin@master data]$ gpfilespace
20181030:10:26:55:015514 gpfilespace:master:gpadmin-[INFO]:-
A tablespace requires a file system location to store its database
files. A filespace is a collection of file system locations for all components
in a Greenplum system (primary segment, mirror segment and master instances).
Once a filespace is created, it can be used by one or more tablespaces.


20181030:10:26:56:015514 gpfilespace:master:gpadmin-[INFO]:-getting config
Enter a name for this filespace            //    输入表空间的名字,名字随便起,但是不能使用gp_开头
> fspc1

Checking your configuration:
Your system has 3 hosts with 3 primary and 3 mirror segments per host.
Your system has 2 hosts with 0 primary and 0 mirror segments per host.

Configuring hosts: [gpl1, gpl3, gpl2]

Please specify 3 locations for the primary segments, one per line:        //    Primary Segment节点目录
primary location 1> /data/gpdata/fspc_segment
primary location 2> /data/gpdata/fspc_segment
primary location 3> /data/gpdata/fspc_segment

Please specify 3 locations for the mirror segments, one per line:            //    Mirror Segment节点目录
mirror location 1> /data/gpdatamirror/fspc_segment
mirror location 2> /data/gpdatamirror/fspc_segment
mirror location 3> /data/gpdatamirror/fspc_segment

Configuring hosts: [standby, master]

Enter a file system location for the master
master location> /data/gpdata/fspc_master                                                    //    Master以及Standby节点目录
20181030:10:29:47:015514 gpfilespace:master:gpadmin-[INFO]:-Creating configuration file...
20181030:10:29:47:015514 gpfilespace:master:gpadmin-[INFO]:-[created]
20181030:10:29:47:015514 gpfilespace:master:gpadmin-[INFO]:-
To add this filespace to the database please run the command:
   gpfilespace --config /data/gpfilespace_config_20181030_102657


gpfilespace命令执行完成后,会生成一个配置文件,也就是上面的最后一行,gpfilespace --config /data/gpfilespace_config_20181030_102657,查看这个文件的内容会发现,上面的gpfilespace命令其实只是创建了文件空间的配置信息,并没有真正创建文件空间
[gpadmin@master data]$ cat /data/gpfilespace_config_20181030_102657
filespace:fspc1
master:1:/data/gpdata/fspc_master/gpseg-1
standby:20:/data/gpdata/fspc_master/gpseg-1
gpl1:2:/data/gpdata/fspc_segment/gpseg0
gpl1:3:/data/gpdata/fspc_segment/gpseg1
gpl1:4:/data/gpdata/fspc_segment/gpseg2
gpl1:17:/data/gpdatamirror/fspc_segment/gpseg6
gpl1:18:/data/gpdatamirror/fspc_segment/gpseg7
gpl1:19:/data/gpdatamirror/fspc_segment/gpseg8
gpl3:8:/data/gpdata/fspc_segment/gpseg6
gpl3:9:/data/gpdata/fspc_segment/gpseg7
gpl3:10:/data/gpdata/fspc_segment/gpseg8
gpl3:14:/data/gpdatamirror/fspc_segment/gpseg3
gpl3:15:/data/gpdatamirror/fspc_segment/gpseg4
gpl3:16:/data/gpdatamirror/fspc_segment/gpseg5
gpl2:5:/data/gpdata/fspc_segment/gpseg3
gpl2:6:/data/gpdata/fspc_segment/gpseg4
gpl2:7:/data/gpdata/fspc_segment/gpseg5
gpl2:11:/data/gpdatamirror/fspc_segment/gpseg0
gpl2:12:/data/gpdatamirror/fspc_segment/gpseg1
gpl2:13:/data/gpdatamirror/fspc_segment/gpseg2

这个文件可以自己创建并修改,真正创建文件空间需要运行刚才gpfilespace命令后的最后一行

[gpadmin@master data]$ gpfilespace --config /data/gpfilespace_config_20181030_102657
20181030:10:33:32:015759 gpfilespace:master:gpadmin-[INFO]:-
A tablespace requires a file system location to store its database
files. A filespace is a collection of file system locations for all components
in a Greenplum system (primary segment, mirror segment and master instances).
Once a filespace is created, it can be used by one or more tablespaces.


20181030:10:33:33:015759 gpfilespace:master:gpadmin-[INFO]:-getting config
Reading Configuration file: '/data/gpfilespace_config_20181030_102657'
20181030:10:33:34:015759 gpfilespace:master:gpadmin-[INFO]:-Performing validation on paths
..............................................................................

20181030:10:33:34:015759 gpfilespace:master:gpadmin-[INFO]:-Connecting to database
20181030:10:33:36:015759 gpfilespace:master:gpadmin-[INFO]:-Filespace "fspc1" successfully created

这样才是真正创建完成文件空间,才能在数据库中查询到新建的文件空间信息

[gpadmin@master data]$ psql -d PG -U ccdba -h 172.16.10.21 -p 5432
Password for user ccdba: 
psql (8.2.15)
Type "help" for help.

PG=> select * from pg_filespace;
  fsname   | fsowner 
-----------+---------
 pg_system |      10
 fspc1     |      10

 创建完文件空间,即可在文件空间上创建表空间,创建表空间必须使用support权限用户。

 非support权限用户要使用新建的表空间,必须要使用support用户对其授予操作权限才可以,否则会遇到下面的错误
 PG=> create tablespace tbs1 filespace fspc1;
ERROR:  permission denied to create tablespace "tbs1"
HINT:  Must be superuser to create a tablespace.

切换gpamin用户
PG=> /c PG gpadmin
You are now connected to database "PG" as user "gpadmin".
PG=# create tablespace tbs1 filespace fspc1;
CREATE TABLESPACE
PG=# 


要使用户默认就使用新建的表空间,需要设置用户的默认表空间。

PG=# alter role ccdba set default_tablespace='tbs1';
ALTER ROLE
PG=# 

授权后,即可使用新建的表空间(授权yonghuccdba在tbs1表空间的所有操作并且授权ccdba用户在数据库PG上所有操作)
PG=> /c PG gpadmin
You are now connected to database "PG" as user "gpadmin".
PG=# grant all on tablespace tbs1 to ccdba;
GRANT
PG=# grant all on database "PG" to ccdba;
GRANT

创建测试表,并且查看到默认表空间为tbs1
PG=> create table t_test(id int,name varchar(10)) DISTRIBUTED BY(id);
CREATE TABLE
PG=> /d t_test
           Table "public.t_test"
 Column |         Type          | Modifiers 
--------+-----------------------+-----------
 id     | integer               | 
 name   | character varying(10) | 
Distributed by: (id)
Tablespace: "tbs1"

PG=> /c
You are now connected to database "PG" as user "ccdba".
PG=> 


4、具有createdb权限的用户,都可以创建数据库了,语法可以通过/h create database命令来查看,非常简单。比如下面这条命令就可以创建一个数据库。


postgres=> create database dbdream;

CREATE DATABASE
也可以在创建数据库时,指定数据库使用的默认表空间。
dbdream=# create database tt tablespace tbs1;

CREATE DATABASE
创建数据库的用户必须要有createdb权限或者support用户权限,这也是之前创建用户是为什么直接赋予了createdb权限,可以通过pg_database字典来查看数据库信息。

1
dbdream=# select datname,datdba,dattablespace from pg_database;
2
  datname  | datdba |  dattablespace |
3
-----------+--------+----------------+
4
 dbdream   |  17197 |           1663 |
5
 postgres  |     10 |           1663 |
6
 tt        |     10 |          17199 |
7
 template1 |     10 |           1663 |
8
 template0 |     10 |           1663 |
9
(5 rows)

datdba字段表示的是数据库的所有者(创建者),这里存的是用户的oid,10是gpadmin用户,17191是dbdream用户,可以通过pg_role字典来查看。dattablespace字段表示的是表空间。存的也是表空间的ID,1663是pg_default表空间,17199是新建的tbs1表空间,可以通过pg_tablespace字典开查看。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Marvinn

Marvinn

关注

路漫漫其修远兮、吾将上下而求索

  • 99
    原创
  • 0
    翻译
  • 2
    转载
  • 36
    评论
  • 访问:458480次
  • 积分:449
  • 等级:中级会员
  • 排名:第12名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ