zoukankan      html  css  js  c++  java
  • Greenplum源码编译安装(单机及集群模式)完全攻略

    公司有个项目需要安装greenplum数据库,让我这个gp小白很是受伤,在网上各种搜,结果找到的都是TMD坑货帖子,但是经过4日苦战,总算是把greenplum的安装弄了个明白,单机及集群模式都部署成功,下面由我给大家分享一下整个部署过程,并小分析一下安装过程中遇到的各种坑。

    首先,说一下我的环境,CentOS 7.2.1511,64位操作系统,全新安装,没有更新过

    [root@mdw ~]# cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core) 
    [root@mdw ~]# uname -a
    Linux mdw 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    

    因为是用的Vmware 11,所以只是配了内网地址,用SecureCRT远程,忘了网卡怎么配的,发个我的配置参考一下

    [root@mdw ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 
    TYPE=Ethernet
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    NAME=eno167
    UUID=a8aa032c-5f5c-4a91-b18d-488b1182ea38
    DEVICE=eno16777736
    ONBOOT=yes
    IPADDR=10.0.0.110
    PREFIX=24
    GATEWAY=10.0.0.2
    DNS1=223.5.5.5
    PEERDNS=yes
    PEERROUTES=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    

    安装之前先关闭selinux和防火墙,以后要开防火墙,可以只允许gp数据库端口即可

    关闭、开启防火墙
    systemctl start firewalld.service#启动firewall
    systemctl stop firewalld.service#停止firewall
    systemctl disable firewalld.service#禁止firewall开机启动
    systemctl enable firewalld.service#允许firewall开机启动
    
    关闭selinux
    sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
    改完后重启
    
    开启防火墙,预留gp端口
    firewall-cmd --zone=public --permanent --add-port=5432/tcp
    重载服务 
    firewall-cmd --reload
    检测端口是否开启
    firewall-cmd --query-port=5432/tcp

     在/etc/sysctl.conf文件中加入有关共享内存与网络参数配置

    vim /etc/sysctl.conf
    加入以下内容
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 1
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.sem = 250 64000 100 512
    kernel.shmmax = 500000000
    kernel.shmmni = 4096
    kernel.shmall = 4000000000
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_max_syn_backlog = 4096
    net.core.netdev_max_backlog = 10000
    vm.overcommit_memory = 2
    net.ipv4.conf.all.arp_filter = 1
    

    在/etc/security/limits.conf中加入限制参数

    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 131072
    * hard nproc 131072
    

    手动执行命令让参数生效,当然,你也可以重启系统

    sysctl -p
    

      

    一、下面是重头戏之一:编译安装greenplum

    我是在2016年10月3日下载(从github克隆)的源码,编译安装出来的版本是greenplum:4.3.99.00 build dev,postgresql:8.3.23

    1、下载(克隆)源码,没有安装git的先安装git,yum一下就好了,源码包存放的位置自己定

    yum install -y git
    git clone https://github.com/greenplum-db/gpdb
    

    2、因为是编译安装,所以需要大量的依赖包,当然也包括扩展项的依赖包和我们最爱的vim编辑器,罗列如下

    yum install -y curl-devel bzip2-devel python-devel openssl-devel wget perl-ExtUtils-Embed libxml2-devel openldap-devel pam pam-devel
    yum install -y gcc-c++ libtool libaio bison vim-common.x86_64 vim-enhanced.x86_64 flex net-tools.x86_64 apr-devel
    wget https://bootstrap.pypa.io/get-pip.py
    python get-pip.py
    pip install psi lockfile paramiko setuptools epydoc psutil
    pip install --upgrade setuptools

    3、如果yum提示没有这个包,建议更新一下yum源,你可以选择阿里的、新浪的或者163的,这里以163为例,记得先yum安装wget先

    cd /etc/yum.repos.d
    wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    mv centos.repo centos.repo.bak
    mv CentOS7-Base-163.repo centos.repo
    yum clean all
    yum makecache
    

    4、编译安装Greenplum,进入gpdb目录,然后就是编译安装的传统套路了。编译参数有点长,我这里分了两行,你复制的话需要编辑成一整行再粘贴到命令行执行。

    cd /data/software/gpdb
    ./configure --prefix=/data/program/gpsql --with-gssapi --with-pgport=5432 --with-libedit-preferred --with-perl --with-python --with-openssl
    --with-pam --with-krb5 --with-ldap --with-libxml --enable-cassert --enable-debug --enable-testutils --enable-debugbreak --enable-depend
    make
    make install

    5、这是参考了一下网上的编译参数,这个比较全,但是会安装各种扩展,网上有简单的,不过我没试过。如果上面这步中有报错,绝对是少了必要的依赖包,网上搜一下,再yum一下,重新configure就行。如果是完全按我的来的,那么应该没有问题,到此为止greenplum安装完成(PS:我的gp安装位置为:/data/program/gpsql)

    二、重头戏之二:配置单机模式

    我所谓的单机模式是指将Master和segment安装在一台机器上,尝试了网上的各种配置发现并不成功,尤其是将mdw和sdw都解析成127.0.0.1的设置根本行不通。你可以尝试设置Master为127.0.0.1,而segment为正式的ip地址,或者按我这么做:

    1、配置hosts解析

    vim /etc/hosts
    后面添加以下内容:
    10.1.5.10 mdw sdw
    注:10.1.5.10是虚拟机的ip地址

    2、改变greenplum安装目录的用户和用户组

    chown -R gpadmin.gpadmin /data/program/gpsql
    

    3、创建gp数据库的管理账户gpadmin

    groupadd gpadmin
    useradd -g gpadmin gpadmin
    passwd gpadmin
    #可以先设置一个简单的,以后再改,比如123456
    

    4、切换到gpadmin账户下,在家目录下建立master和segment的数据存放目录。你也可以自行设定数据存放目录,如果你不是以gpadmin建立的目录,还需要修改目录的用户和用户组,最好是建在家目录下。

    su - gpadmin
    mkdir -p /home/gpadmin/masterdata
    mkdir -p /home/gpadmin/segmentdata
    mkdir -p /home/gpadmin/segmentmirror
    

    5、创建包含所有主机的文件all_hosts

    vim /home/gpadmin/all_hosts
    加入下面两行
    mdw
    sdw
    

    6、创建包含segment主机名的文件

    vim /home/gpadmin/seg_hosts
    加入下面一行
    sdw
    

    7、这还没完哦,因为mdw是master,而你的master是你的本机,所以要将本机的主机名改成mdw,记得要改3个地方。当然,你不喜欢mdw,也可以自行设定,只是后面要做相应的更改

    CentOS 7下的改法
    先执行
    hostnamectl set-hostname "mdw"
    执行后会自动修改/etc/hostname文件,你也可以手动修改/etc/hostname文件
    再执行
    hostname mdw
    最后改
    vim /etc/sysconfig/network
    mdw
    退出,重新登录,o了

    8、将MASTER_DATA_DIRECTORY加入Master主机环境中,修改gpadmin用户的.bashrc。官方文档里,这一步是放在后面的,因为这里的MASTER_DATA_DIRECTORY路径是根据你设定的master存储数据的路径变动的,这里我把他提前了。如果你是按我的来的,就没问题。如果是自己设定的,就修改一下这个路径,否则后面启动数据库的时候会提示找不到MASTER_DATA_DIRECTORY路径。

    cd /home/gpadmin
    vim .bashrc
    最后添加如下内容
    export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1
    source /data/program/gpsql/greenplum_path.sh
    PS:greenplum_path的路径也是根据你的gp安装路径来的,如果和我不一样,自己改吧,若果路径不对,gp命令将无法执行,会提示没有这个命令

    9、这里因为master和segment是在同一台机器,所以不需要做时间同步,如果不在同一台机器,需要做时间同步

    10、将机器中的python库全部复制到gpdb的python库目录下,gp命令都是基于python的,但是他找不到系统的python库(很奇怪啊!),于是我们就手动把这些库拷贝到gp安装目录下的python文件夹里,否则执行gp命令的时候会提示缺这个模块啊,缺那个模块啊之类的

    cp -R -f /usr/lib64/python2.7/site-packages/. /data/program/gpsql/lib/python/
    PS:python库下的一些库是带.的(隐藏的),一般执行cp命令是要不成的,just按我给的命令来

    11、CentOS 7.2需要执行以下语句,这个错误是初始化时遇到的一个错误提示,具体是什么我忘了,just do it,可能CentOS 6.x不会有

    echo "RemoveIPC=no" >> /etc/systemd/logind.conf
    systemctl restart  systemd-logind.service
    

    12、编辑gp初始化配置文件,直接编辑一个新文件,不要复制官方目录里的再改了,除非你想知道这些东西都是什么意思

    vim /home/gpadmin/gpinitsystem_config
    添加以下内容
    ARRAY_NAME="EMC Greenplum DW"
    SEG_PREFIX=gpseg
    PORT_BASE=33000
    declare -a DATA_DIRECTORY=(/home/gpadmin/segmentdata)
    MASTER_HOSTNAME=mdw
    MASTER_DIRECTORY=/home/gpadmin/masterdata
    MASTER_PORT=5432
    MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
    TRUSTED_SHELL=ssh
    CHECK_POINT_SEGMENTS=8
    ENCODING=UNICODE
    MIRROR_PORT_BASE=43000
    REPLICATION_PORT_BASE=34000
    MIRROR_REPLICATION_PORT_BASE=44000
    declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/segmentmirror)
    PS:注意这里面的几个路径,如果你有多个segment,declare就多加几个路径,我这里只设了一个segment节点,所以只有一个路径

    13、建立信任关系,主要为了免密码登录的麻烦,若果提示命令不存在,先source一下.bashrc,如果还不对,回到第8步检查一下你配的路径

    gpssh-exkeys -f /home/gpadmin/all_hosts
    PS:这是一个gp命令,不是系统自带的

    14、初始化数据库,我曾经因为这一步执行不成功熬了一夜,各种报错,各种提示

    gpinitsystem -c /home/gpadmin/gpinitsystem_config
    注意:
    这里遇到过最麻烦的提示是Unkown Host,在网上各种搜只告诉你host没有解析到,然后改一下hosts文件就行。但是阿里云的虚拟机你改他,他仍然提示你解析不到seg的host,
    很可能跟阿里云环境有关,如果你用的是阿里云虚拟机,建议考虑多几台机器做个集群,不要想着在一台机器上又做master又做segment

    15、执行完上面这步,会有各种报错,其他的报错你看看日志里的错误提示就能解决,中途需要你给他个“y",成功后应该在显示的信息里看到两个success的提示,然后用gpstop命令试一试,提示如下信息表示安装成功(中途要给个"y"):

    [gpadmin@mdw ~]$ gpstop
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Starting gpstop with args: 
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Gathering information and validating the environment...
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Obtaining Greenplum Master catalog information
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Obtaining Segment details from master...
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Greenplum Version: 'postgres (Greenplum Database) 4.3.99.00 build dev'
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Master instance parameters
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Master Greenplum instance process active PID   = 28031
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Database                                       = template1
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Master port                                    = 5432
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Master directory                               = /home/gpadmin/masterdata/gpseg-1
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Shutdown mode                                  = smart
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Timeout                                        = 120
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Shutdown Master standby host                   = Off
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-Segment instances that will be shutdown:
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:---------------------------------------------
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   Host   Datadir                              Port    Status
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   sdw    /home/gpadmin/segmentdata/gpseg0     33000   u
    20161002:21:22:46:034307 gpstop:mdw:gpadmin-[INFO]:-   sdw    /home/gpadmin/segmentmirror/gpseg0   43000   u
    
    Continue with Greenplum instance shutdown Yy|Nn (default=N):
    > y
    20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-There are 0 connections to the database
    20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing Master instance shutdown with mode='smart'
    20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Master host=mdw
    20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing Master instance shutdown with mode=smart
    20161002:21:22:49:034307 gpstop:mdw:gpadmin-[INFO]:-Master segment instance directory=/home/gpadmin/masterdata/gpseg-1
    20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-Attempting forceful termination of any leftover master process
    20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-Terminating processes for segment /home/gpadmin/masterdata/gpseg-1
    20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-No standby master host configured
    20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing parallel primary segment instance shutdown, please wait...
    20161002:21:22:50:034307 gpstop:mdw:gpadmin-[INFO]:-0.00% of jobs completed
    20161002:21:23:00:034307 gpstop:mdw:gpadmin-[INFO]:-100.00% of jobs completed
    20161002:21:23:00:034307 gpstop:mdw:gpadmin-[INFO]:-Commencing parallel mirror segment instance shutdown, please wait...
    20161002:21:23:00:034307 gpstop:mdw:gpadmin-[INFO]:-0.00% of jobs completed
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-100.00% of jobs completed
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-----------------------------------------------------
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-   Segments stopped successfully      = 2
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-   Segments with errors during stop   = 0
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-----------------------------------------------------
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Successfully shutdown 2 of 2 segment instances 
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Database successfully shutdown with no errors reported
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Cleaning up leftover gpmmon process
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-No leftover gpmmon process found
    20161002:21:23:10:034307 gpstop:mdw:gpadmin-[INFO]:-Cleaning up leftover gpsmon processes
    20161002:21:23:11:034307 gpstop:mdw:gpadmin-[INFO]:-No leftover gpsmon processes on some hosts. not attempting forceful termination on these hosts
    20161002:21:23:11:034307 gpstop:mdw:gpadmin-[INFO]:-Cleaning up leftover shared memory
    

    16、执行gpstart命令启动数据库,然后enjoy it!,至此单机模式greenplum安装成功

    三、重头戏之三:配置集群模式

    1、首先做个简单的规划,比如:

    10.0.0.105 master
    10.0.0.106 segment1
    10.0.0.107 segment2
    ...
    

    2、Master节点的greenplum安装参照重头戏之一即可,但是segment的安装就不要再去编译了,有更简单的方法,先卖个关子,后面再说

    3、配置host解析,Master节点需要配置自己及所有segment节点的host解析,这里greenplum可能会提示说master的hostname必须为mdw,按提示改就行

    vim /etc/hosts
    10.0.0.105 master
    10.0.0.106 segment1
    10.0.0.107 segment2
    ...
    

    4、各个segment节点配置自己的host解析

    #in segment1
    vim /etc/hosts
    10.0.0.106 segment1
    
    
    #in segment2
    vim /etc/hosts
    10.0.0.107 segment2
    

    5、在master上创建自身数据存储目录

    su - gpadmin
    mkdir -p /home/gpadmin/masterdata
    

    6、创建包含所有节点的all_hosts

    vim /home/gpadmin/all_hosts
    加入以下内容
    master
    segment1
    segment2
    

    7、创建包含所有segment节点的seg_hosts

    vim /home/gpadmin/seg_hosts
    加入下面内容
    segment1
    segment2
    

    8、在Master节点上为segment节点安装greenplum数据库(通过gpssh),必须在root下进行。这个安装会自动在segment下安装数据库,并创建gpadmin用户

    source /data/program/gpsql/greenplum_path.sh
    gpseginstall -f /home/gpadmin/all_hosts -u gpadmin -p 123456
    

    9、在Master上使用gpssh工具为所有segment主机创建主数据库和镜像数据目录,root下执行即可

    gpssh -f /home/gpadmin/seg_hosts -e 'mkdir -p /home/gpadmin/segmentdata'
    gpssh -f /home/gpadmin/seg_hosts -e 'mkdir -p /home/gpadmin/segmentmirror'
    gpssh -f /home/gpadmin/seg_hosts -e 'chown gpadmin.gpadmin /home/gpadmin/segmentdata'
    gpssh -f /home/gpadmin/seg_hosts -e 'chown gpadmin.gpadmin /home/gpadmin/segmentmirror'
    

    10、同步系统时间:这里用chrony这个软件进行时间同步,比ntpd简单、快捷、方便,首先,安装他

    yum install chrony -y
    

    11、同步系统时间:修改配置文件

    vim /etc/chrony.conf
    将同步的服务器修改为以下内容,配置文件的原始设置直接删掉
    server 0.asia.pool.ntp.org
    server 1.asia.pool.ntp.org
    server 2.asia.pool.ntp.org
    server 3.asia.pool.ntp.org
    

    12、同步系统时间:启用服务,这个服务是个守护进程,可以设定开机自启

    systemctl start chronyd
    systemctl enable chronyd
    

    13、同步系统时间:设置亚洲时区

    timedatectl set-timezone Asia/Shanghai
    

    14、同步系统时间:启用NTP同步,同步设定完成,可以用date看一下所有节点的时间是不是都一致了,不一致的可以先等一等。如果不行,可以试试其他方法同步,这个时间同步是必须的

    timedatectl set-ntp yes
    

    15、将Master机器中的python库全部复制到gpdb的python库目录下,这个也是必须的,为了保证gp程序能正常进行,但segment节点可以不用

    cp -R -f /usr/lib64/python2.7/site-packages/. /data/program/gpsql/lib/python/
    

    16、CentOS 7.2需要执行以下语句,所有主机都要执行,如果你的所有主机都是CentOS 6系列,可以尝试略过。可以在Master上用gpssh执行,自己研究吧

    echo "RemoveIPC=no" >> /etc/systemd/logind.conf
    systemctl restart  systemd-logind.service
    

    17、配置初始化文件gpinitsystem_config,declare的路径根据你所有机器的节点数目来,有几个segment节点,就有几个路径。至于几个PORT的数值,你可以做适当修改,应该只要不大于65535就行,也不要太小,以免和其他软件冲突

    vim /home/gpadmin/gpinitsystem_config
    添加以下内容
    ARRAY_NAME="EMC Greenplum DW"
    SEG_PREFIX=gpseg
    PORT_BASE=33000
    declare -a DATA_DIRECTORY=(/home/gpadmin/segmentdata /home/gpadmin/segmentdata)
    MASTER_HOSTNAME=mdw
    MASTER_DIRECTORY=/home/gpadmin/masterdata
    MASTER_PORT=5432
    MACHINE_LIST_FILE=/home/gpadmin/seg_hosts
    TRUSTED_SHELL=ssh
    CHECK_POINT_SEGMENTS=8
    ENCODING=UNICODE
    MIRROR_PORT_BASE=43000
    REPLICATION_PORT_BASE=34000
    MIRROR_REPLICATION_PORT_BASE=44000
    declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/segmentmirror /home/gpadmin/segmentmirror)

    18、系统检测,看到有一些帖子和教学视频里有个gpcheck和gpcheckos命令,可以在初始化之前对系统进行检测,但是我安装的这个版本里根本没这个命令,所以这里只是提一下,有知道的小伙伴可以留个言,可能我太low没有发现吧。这里就略过了

    19、配置gpadmin用户的环境变量,以便执行gp命令。需要切换到gpadmin用户,完成后source一下,使命令生效。这里的路径要和你的安装路径一致,不一样就改吧

    su - gpadmin
    cd /home/gpadmin
    vim .bashrc
    在最后添加以下内容
    export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1
    source /data/program/gpsql/greenplum_path.sh

    20、运行配置文件初始化greenplum集群,这个需要在gpadmin用户下执行

    gpinitsystem -c /home/gpadmin/gpinitsystem_config
    

    21、等待命令执行完成,中途需要给个"y",安装完成后会自动运行gp,可以通过ps查看,有gp进程就表示安装成功。

    22、这里值得一提的是,如果在给完"y"后的初始化过程中有错误,会提示你执行一条命令进行回滚操作,执行完成后回滚的脚本会自动删除。切勿不执行这个回滚脚本就再次初始化,会提示你有的文件已存在,无法继续初始化

    23、到此为止greenplum集群就安装完成了,以下的附带内容是给小白做科普的,大神可以无视,so enjoy it!

    四、附带内容:greenplum的基本备份和恢复,和一些常用的命令

    本内容是方便小白做数据迁移用的,大神可以无视。因为pgAdmin 4无法连接greenplum数据库(人家毕竟是针对Postgresql的),pgAdmin 3可以连接但是会报错,而且没有备份和恢复选项(可能不支持linux下的备份和恢复,windows下能不能用不知道,也可能这就是个软件bug,反正pgAdmin3也不更新了,就没人鸟了),所以,我们只能手动备份和恢复了。

    1、备份数据库。其实有很多备份的命令,我选的这个是备份比较全的,因为要把数据从这个数据库到入到另一个新库,所以不只需要备份表和数据,还要备份其他的依赖设置等。用这个命令会提示你要建一个mail目录,是个警告,我直接无视了

    gpcrondump -x db -c -g -G -a -q>>gp_db.log
    #db改成你要备份的数据库

    2、备份以后会生成db_dump这个目录,里面是备份的数据,在Master上有,在segment节点上也有,导出来,放到新库对应的文件夹下就行。

    3、恢复只需要在Master上执行,中途要你给个"y",如果提示没有这个库,你就用pgAdmin3建一个名字一样的库,然后在下面这个命令后加一个参数"-e",他会删掉你建的库,然后重建,所以不用担心恢复的数据库跟原来的不一样。

    gpdbrestore -b 20131231
    #这串数字改成你自己的

    4、恢复过程会有点长,耐心等待他的提示出来,不要以为他死机了,发一下我的数据库的恢复信息给你做参考

    [gpadmin@mdw gpseg1]$ gpdbrestore -b 20161003 -e
    20161003:05:53:07:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Starting gpdbrestore with args: -b 20161003 -e
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-------------------------------------------
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Greenplum database restore parameters
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-------------------------------------------
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Restore type               = Full Database
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Database to be restored    = XXXXXXX    #这是你恢复的数据库名
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Drop and re-create db      = On
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Restore method             = Restore specific timestamp
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Restore method             = Restore specific date
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Restore timestamp          = 20161003170745
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Restore compressed dump    = On
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Restore global objects     = Off
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Array fault tolerance      = f
    20161003:05:53:08:014859 gpdbrestore:mdw:gpadmin-[INFO]:-------------------------------------------
    
    Continue with Greenplum restore Yy|Nn (default=N):
    > y
    20161003:05:53:11:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Dropping Database XXXXXXXX
    20161003:05:53:20:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Dropped Database XXXXXXXX
    20161003:05:53:20:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Invoking sql file: /home/gpadmin/masterdata/gpseg-1/db_dumps/20161003/gp_cdatabase_1_1_20161003170745
    20161003:05:53:42:014859 gpdbrestore:mdw:gpadmin-[INFO]:-gp_restore commandline: gp_restore -i -h mdw -p 5432 -U gpadmin --gp-i --gp-k=20161003170745 --gp-l=p --gp-d=db_dumps/20161003 --gp-c -d "XXXXXXXX": 
    20161003:06:09:41:014859 gpdbrestore:mdw:gpadmin-[WARNING]:-gpdbrestore finished but ERRORS were found, please check the restore report file for details
    20161003:06:09:41:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Updating AO/CO statistics on mdw
    20161003:06:09:41:014859 gpdbrestore:mdw:gpadmin-[INFO]:-No AO/CO tables restored, skipping statistics update...
    20161003:06:09:41:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Commencing analyze of XXXXXXXX database, please wait
    20161003:06:10:23:014859 gpdbrestore:mdw:gpadmin-[INFO]:-Analyze of XXXXXXXX completed without error
    

    5、以上是备份和恢复的内容,下面给小白们做一下gp科普

    科普一:如何授权你的pgAdmin 3连接上数据库

    答案是修改greenplum数据库里的pg_hba.conf,在master节点主库里。改好以后记得重启数据库,gpstop一下,再gpstart一下

    vim /home/gpadmin/masterdata/gpseg-1/pg_hba.conf
    添加一条规则放到所有规则的后面
    host     all         all             10.1.33.138/24      md5
    第一个all是你要登录的数据库
    第二个all是你要登录这个数据库所使用的用户名
    第三个是允许登录的ip网段
    第四个是登录验证方式,md5是需要密码验证,不想用密码就登录改成trust就行

    科普二:常用命令

    登录数据库:psql -U 用户名 数据库名(不加数据库名,会登录到默认数据库)

    显示所有数据库:l

    显示数据库里的表:d 数据库

    显示表结构:d 表

    进入数据库:c 数据库

    退出:q

    帮助:?

    显示角色:du

    科普三:修改用户密码

    先登录数据库,不知道的可以尝试登一下postgres这个数据库

    ALTER USER 用户名 WITH PASSWORD '123456';

    后记:本人对greenplum了解甚少,大神如有高见,可尽情回复,小弟不胜感激

    PS:鉴于网上爬虫猖獗,博客被盗时有发生,这里需要来个链接,大家请认准来自博客园的Scoter:http://www.cnblogs.com/scoter2008/

  • 相关阅读:
    在 ServiceModel 客户端配置部分中,找不到引用协定
    nopi 导出excel 带图片
    c# async await 理解 结合并行处理
    从数据库更新模型时出现System.ArgumentException
    C# HTTP请求 异步(async await)
    C# HTTP请求
    SQL列转行
    详解C# 匿名对象(匿名类型)、var、动态类型 dynamic
    JavaScript (function (){}()) 与(function(){})()
    记ssh错误排查-ansible
  • 原文地址:https://www.cnblogs.com/scoter2008/p/5928972.html
Copyright © 2011-2022 走看看