本周尝试在中标麒麟操作系统下安装greenplum。中标麒麟操作系统采用强化的Linux内核,我们首先准备好三台已安装中标麒麟服务版系统的虚拟机。规划他们的IP地址分别为:

Master:10.81.2.20

Segment1:10.81.2.21

Segment2:10.81.2.22

通过查找greenplum的官方网站可知,greenplum支持的操作系统如下:

Red Hat Enterprise Linux 64-bit 7.x (See the following Note.)

Red Hat Enterprise Linux 64-bit 6.x

CentOS 64-bit 7.x

CentOS 64-bit 6.x

Ubuntu 18.04 LTS

Oracle Linux 64-bit 7, using the Red Hat Compatible Kernel (RHCK)

为了验证是否可在麒麟操作系统下安装,我们首先看下麒麟操作系统:

[root@localhost ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.2 (Maipo)

[root@localhost ~]# uname -a

Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 26 13:46:27 CST 2015 x86_64 x86_64 x86_64 GNU/Linux

由此可知,麒麟操作系统支持greenplum的安装。

下一步我们需要配置三台主机的静态IP,通过修改/etc/sysconfig/network-scripts/ifcfg-enoXXXX文件,具体修改如下:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16780032

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_PEERDNS=yes

IPV6_PEERROUTES=yes

IPV6_FAILURE_FATAL=no

NAME=eno16780032

UUID=d1e5a4a9-4a63-4c56-a51d-6cf971293f24

DEVICE=eno16780032

ONBOOT=yes

IPADDR=10.81.2.20

GATEWAY=10.81.2.1

NETMASK=255.255.255.0

DNS1=202.117.80.6

DNS2=202.117.80.7

其中,三台主机的IP分别为:Master:10.81.2.20;Segment1:10.81.2.21;Segment2:10.81.2.22。这样我们还可以通过termius软件远程访问, Termius是一款功能十分强劲且受用户喜爱的跨平台SSH工具,比用虚拟机直接操作更加方便便捷。

在安装greenplum之前我们需要先关闭selinux和防火墙,以后如果要打开防火墙,可以只允许greenplum数据库端口即可。SELinux 全称 Security Enhanced Linux (安全强化 Linux),是Linux内核的安全保镖。防火墙主要是借助硬件和软件的作用于内部和外部网络的环境间产生一种保护的屏障,从而实现对计算机不安全网络因素的阻断。只有在防火墙同意情况下,用户才能够进入计算机内,如果不同意就会被阻挡于外。

关闭或者开启防火墙的命令如下:

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文件中加入有关共享内存与网络参数配置的内容,具体命令如下:

vi /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

修改完后,输入“:”,wq保存命令并退出。

然后在/etc/security/limits.conf文件中加入限制参数,修改后内容如下:

cat /etc/security/limits.conf

# /etc/security/limits.conf

#

#This file sets the resource limits for the users logged in via PAM.

#It does not affect resource limits of the system services.

#

#Also note that configuration files in /etc/security/limits.d directory,

#which are read in alphabetical order, override the settings in this

#file in case the domain is the same or more specific.

#That means for example that setting a limit for wildcard domain here

#can be overriden with a wildcard setting in a config file in the

#subdirectory, but a user specific setting here can be overriden only

#with a user specific setting in the subdirectory.

#

#Each line describes a limit for a user in the form:

#

#<domain>        <type>  <item>  <value>

#

#Where:

#<domain> can be:

#        - a user name

#        - a group name, with @group syntax

#        - the wildcard *, for default entry

#        - the wildcard %, can be also used with %group syntax,

#                 for maxlogin limit

#

#<type> can have the two values:

#        - "soft" for enforcing the soft limits

#        - "hard" for enforcing hard limits

#

#<item> can be one of the following:

#        - core - limits the core file size (KB)

#        - data - max data size (KB)

#        - fsize - maximum filesize (KB)

#        - memlock - max locked-in-memory address space (KB)

#        - nofile - max number of open file descriptors

#        - rss - max resident set size (KB)

#        - stack - max stack size (KB)

#        - cpu - max CPU time (MIN)

#        - nproc - max number of processes

#        - as - address space limit (KB)

#        - maxlogins - max number of logins for this user

#        - maxsyslogins - max number of logins on the system

#        - priority - the priority to run user process with

#        - locks - max number of file locks the user can hold

#        - sigpending - max number of pending signals

#        - msgqueue - max memory used by POSIX message queues (bytes)

#        - nice - max nice priority allowed to raise to values: [-20, 19]

#        - rtprio - max realtime priority

#

#<domain>      <type>  <item>         <value>

#

#*               soft    core            0

#*               hard    rss             10000

#@student        hard    nproc           20

#@faculty        soft    nproc           20

#@faculty        hard    nproc           50

#ftp             hard    nproc           0

#@student        -       maxlogins       4

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

# End of file

然后执行命令“sysctl -p”让修改的参数生效,也可以重启系统。

下一步需要下载greenplum并编译安装。

1.下载(克隆)greenplum源码。

先安装git,通过yum install -y git命令安装,这里出现一个问题:yum通过配置的镜像源下载失败,通过查找资料发现原因是镜像源地址发生了更新变化,所以修改yum镜像源地址:具体通过修改yum配置文件:cat /etc/yum.repos.d/ns7-x86_64.repo更新镜像源地址。然后输入命令“yum install -y git”安装git,输入“git clone https://github.com/greenplum-db/gpdb”克隆greenplum源码,这里出现一个问题,git克隆失败,所以换另一种方法,在外部机器下载好greeplum的zip压缩包然后上传到麒麟虚拟机内部。

2.因为是编译安装greenplum,所以需要下载大量的依赖包,具体罗列如下: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

这里出现一个问题:有时候yum install -y 某依赖包会出现失败的情况,反复尝试安装几次就可以成功。

3.编译安装greenplum

①进入gpdb目录(/opt/gpdb-master)。具体编译命令如下,我的安装目录在(/opt/gpsql):

cd /opt/gpdb-master

./configure --prefix=/opt/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

这里出现一个问题,在执行./configure命令时报错,具体如下:

[root@localhost opt]# cd gpdb-master

[root@localhost gpdb-master]# ./configure --prefix=/opt/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

configure: WARNING: unrecognized options: --with-krb5, --enable-testutils, --enable-debugbreak

configure: error: cannot find sources (src/backend/access/common/heaptuple.c) in . or ..

根据第一个configure,删除其中错误的命令:--with-krb5, --enable-testutils, --enable-debugbreak

根据第二个configure,还未找到具体的解决方法,所以尝试换一种方法。

②下载greenplum-db-5.10.2-rhel7-x86_64.zip

通过命令:scp greenplum-db-5.10.2-rhel7-x86_64.zip root@10.81.2.20:/opt/拷贝到master主节点中,然后执行命令:

unzip greenplum-db-5.10.2-rhel7-x86_64.zip

./ greenplum-db-5.10.2-rhel7-x86_64.bin

期间按照提示输入安装目录:/opt/psql

安装结果出现:

Installation complete.

Greenplum Database is installed in /opt/gpsql

Pivotal Greenplum documentation is available

for download at http://gpdb.docs.pivotal.io

即代表安装成功

4.配置集群模式

①首先做个规划;

10.81.2.20 master

10.81.2.21 segment1

10.81.2.22 segment2

通过vi /etc/hostname修改hostname,reboot重启生效。

②配置master主节点host解析

vi /etc/hosts

10.81.2.20 master

10.81.2.21 segment1

10.81.2.22 segment2

③配置segment节点配置host解析

#Segment1:

vi /etc/hosts

10.81.2.21 segment1

#Segment2:

vi /etc/hosts

10.81.2.22 segment2

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

groupadd gpadmin

useradd -g gpadmin gpadmin

passwd gpadmin

密码设置为123456

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

chown -R gpadmin.gpadmin /opt/gpsql

⑤在master主节点创建自身的数据存储目录

su - gpadmin

mkdir -p /home/gpadmin/masterdata

⑥在master上创建包含所有节点的all_hosts

vi /home/gpadmin/all_hosts

加入以下内容

master

segment1

segment2

⑦在master上创建包含所有segment节点的seg_hosts

vi /home/gpadmin/seg_hosts

加入下面内容

segment1

segment2

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

source /opt/gpsql/greenplum_path.sh

gpseginstall -f /home/gpadmin/all_hosts -u gpadmin -p 123456

执行结果如下:

[root@master gpsql]# source greenplum_path.sh

[root@master gpsql]# gpseginstall -f /home/gpadmin/all_hosts -u gpadmin -p 123456

20201221:05:48:22:032246 gpseginstall:master:root-[INFO]:-Installation Info:

link_name greenplum-db

binary_path /opt/gpsql

binary_dir_location /opt

binary_dir_name gpsql

20201221:05:48:22:032246 gpseginstall:master:root-[INFO]:-check cluster password access

*** Enter password for segment1:

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-de-duplicate hostnames

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-master hostname: master

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-check for user gpadmin on cluster

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-add user gpadmin on master

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-add user gpadmin on cluster

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-chown -R gpadmin:gpadmin /opt/greenplum-db

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-chown -R gpadmin:gpadmin /opt/gpsql

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-rm -f /opt/gpsql.tar; rm -f /opt/gpsql.tar.gz

20201221:05:48:27:032246 gpseginstall:master:root-[INFO]:-cd /opt; tar cf gpsql.tar gpsql

20201221:05:48:29:032246 gpseginstall:master:root-[INFO]:-gzip /opt/gpsql.tar

20201221:05:49:05:032246 gpseginstall:master:root-[INFO]:-remote command: mkdir -p /opt

20201221:05:49:05:032246 gpseginstall:master:root-[INFO]:-remote command: rm -rf /opt/gpsql

20201221:05:49:05:032246 gpseginstall:master:root-[INFO]:-scp software to remote location

The authenticity of host 'segment2 (10.81.2.22)' can't be established.

ECDSA key fingerprint is 7f:cb:6a:ca:48:d4:fe:59:d0:0b:a5:16:f9:dd:09:59.

Are you sure you want to continue connecting (yes/no)? root@segment1's password: root@segment2's password:

root@segment2's password:

20201221:05:50:22:032246 gpseginstall:master:root-[INFO]:-remote command: gzip -f -d /opt/gpsql.tar.gz

20201221:05:50:28:032246 gpseginstall:master:root-[INFO]:-md5 check on remote location

20201221:05:50:30:032246 gpseginstall:master:root-[INFO]:-remote command: cd /opt; tar xf gpsql.tar

20201221:05:50:31:032246 gpseginstall:master:root-[INFO]:-remote command: rm -f /opt/gpsql.tar

20201221:05:50:31:032246 gpseginstall:master:root-[INFO]:-remote command: cd /opt; rm -f greenplum-db; ln -fs gpsql greenplum-db

20201221:05:50:32:032246 gpseginstall:master:root-[INFO]:-remote command: chown -R gpadmin:gpadmin /opt/greenplum-db

20201221:05:50:32:032246 gpseginstall:master:root-[INFO]:-remote command: chown -R gpadmin:gpadmin /opt/gpsql

20201221:05:50:32:032246 gpseginstall:master:root-[INFO]:-rm -f /opt/gpsql.tar.gz

20201221:05:50:32:032246 gpseginstall:master:root-[INFO]:-Changing system passwords ...

20201221:05:50:35:032246 gpseginstall:master:root-[INFO]:-exchange ssh keys for user root

20201221:05:50:38:032246 gpseginstall:master:root-[INFO]:-exchange ssh keys for user gpadmin

20201221:05:50:41:032246 gpseginstall:master:root-[INFO]:-/opt/greenplum-db/./sbin/gpfixuserlimts -f /etc/security/limits.conf -u gpadmin

20201221:05:50:41:032246 gpseginstall:master:root-[INFO]:-remote command: . /opt/greenplum-db/./greenplum_path.sh; /opt/greenplum-db/./sbin/gpfixuserlimts -f /etc/security/limits.conf -u gpadmin

20201221:05:50:42:032246 gpseginstall:master:root-[INFO]:-version string on master: gpssh version 5.10.2 build commit:b3c02f3acd880e2d676dacea36be015e4a3826d4

20201221:05:50:42:032246 gpseginstall:master:root-[INFO]:-remote command: . /opt/greenplum-db/./greenplum_path.sh; /opt/greenplum-db/./bin/gpssh --version

20201221:05:50:42:032246 gpseginstall:master:root-[INFO]:-remote command: . /opt/gpsql/greenplum_path.sh; /opt/gpsql/bin/gpssh --version

20201221:05:50:42:032246 gpseginstall:master:root-[INFO]:-SUCCESS -- Requested commands completed

[root@master gpsql]#

⑨在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'

具体执行结果如下:

第一条:[root@master gpsql]# gpssh -f /home/gpadmin/seg_hosts -e 'mkdir -p /home/gpadmin/segmentdata'

[segment1] mkdir -p /home/gpadmin/segmentdata

[segment2] mkdir -p /home/gpadmin/segmentdata

第二条:[root@master gpsql]# gpssh -f /home/gpadmin/seg_hosts -e 'mkdir -p /home/gpadmin/segmentmirror'

[segment1] mkdir -p /home/gpadmin/segmentmirror

[segment2] mkdir -p /home/gpadmin/segmentmirror

第三条:[root@master gpsql]# gpssh -f /home/gpadmin/seg_hosts -e 'chown gpadmin.gpadmin /home/gpadmin/segmentdata'

[segment1] chown gpadmin.gpadmin /home/gpadmin/segmentdata

[segment2] chown gpadmin.gpadmin /home/gpadmin/segmentdata

第四条:[root@master gpsql]# gpssh -f /home/gpadmin/seg_hosts -e 'chown gpadmin.gpadmin /home/gpadmin/segmentmirror'

[segment1] chown gpadmin.gpadmin /home/gpadmin/segmentmirror

[segment2] chown gpadmin.gpadmin /home/gpadmin/segmentmirror

⑩同步系统时间:

首先通过命令gpssh -f /home/gpadmin/all_hosts  -v date查看三体机器的时间

[root@master gpsql]# source greenplum_path.sh

[root@master gpsql]# gpssh -f /home/gpadmin/all_hosts  -v date

[WARN] Reference default values as $MASTER_DATA_DIRECTORY/gpssh.conf could not be found

Using delaybeforesend 0.05 and prompt_validation_timeout 1.0

[Reset ...]

[INFO] login segment1

[INFO] login master

[INFO] login segment2

[segment1] 2020年 12月 21日 星期一 06:10:46 CST

[  master] 2020年 12月 21日 星期一 06:10:47 CST

[segment2] 2020年 12月 21日 星期一 06:10:47 CST

[INFO] completed successfully

[Cleanup...]

可以看到,此时三台机器的系统时间与实际时间相差很大,所以需要修正三台机器的时间。

此外,还需要精准同步三台机器的时间,通过命令:gpssh -f /home/gpadmin/all_hosts  -v ntpdate同步三台机器的时间。

[root@master gpsql]# gpssh -f /home/gpadmin/all_hosts  -v ntpdate

[WARN] Reference default values as $MASTER_DATA_DIRECTORY/gpssh.conf could not be found

Using delaybeforesend 0.05 and prompt_validation_timeout 1.0

[Reset ...]

[INFO] login segment1

[INFO] login master

[INFO] login segment2

[segment1] -bash: ntpdate: 未找到命令

[  master] -bash: ntpdate: 未找到命令

[segment2] -bash: ntpdate: 未找到命令

[INFO] completed successfully

[Cleanup...]

可以发现,执行结果报错:-bash: ntpdate: 未找到命令。

所以通过yum命令安装ntpdate;

[root@master ~]# yum install -y ntpdateate

There was a problem importing one of the Python modules

required to run yum. The error leading to this problem was:

No module named yum

Please install a package which provides this module, or

verify that the module is installed correctly.

It's possible that the above module doesn't match the

current version of Python, which is:

2.7.12 (default, Aug 24 2017, 06:49:27)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)]

If you cannot solve this problem yourself, please go to

the yum faq at:

http://yum.baseurl.org/wiki/Faq

结果发现yum报错,接下来排查错误

(1)查看yum版本:

[root@master ~]# rpm -qa |grep yum

yum-nkuc-plugin-2.0.1-5.el7.ns7.03.noarch

yum-3.4.3-132.el7.ns7.01.noarch

yum-metadata-parser-1.1.4-10.el7.x86_64

(2)查看python版本:

[root@master ~]# whereis python

python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python2.7-config /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /opt/gpsql/ext/python/bin/python2.7-config /opt/gpsql/ext/python/bin/python2.7 /opt/gpsql/ext/python/bin/python /usr/share/man/man1/python.1.gz

可以看到,安装了多个python版本。

(3)执行python,发现使用的是Python 2.7.12版本。

[root@master ~]# python

Python 2.7.12 (default, Aug 24 2017, 06:49:27)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

所以猜测yum调用了高版本的python。

(4)查找yum文件,并编辑此py文件

[root@master ~]# which yum

/usr/bin/yum

然后修改/usr/bin/yum文件。

将文件中的#!/usr/bin/python改为:#!/usr/bin/python2.7

修改后的文件内容如下(/usr/bin/python):

[root@master ~]# cat /usr/bin/yum

#!/usr/bin/python2.7

import sys

try:

import yum

except ImportError:

print >> sys.stderr, """\

There was a problem importing one of the Python modules

required to run yum. The error leading to this problem was:

%s

Please install a package which provides this module, or

verify that the module is installed correctly.

It's possible that the above module doesn't match the

current version of Python, which is:

%s

If you cannot solve this problem yourself, please go to

the yum faq at:

http://yum.baseurl.org/wiki/Faq

""" % (sys.exc_value, sys.version)

sys.exit(1)

sys.path.insert(0, '/usr/share/yum-cli')

try:

import yummain

yummain.user_main(sys.argv[1:], exit_code=True)

except KeyboardInterrupt, e:

print >> sys.stderr, "\n\nExiting on user cancel."

sys.exit(1)

通过命令reboot重启系统,发现yum命令可以正常使用了,问题成功解决。

接下来修正系统时间,通过命令yum install -y ntpdateate安装ntpdateate。

a. 删除etc/localtime文件,并复制shanghai时区文件替换到这里。

[root@master ~]# rm -f /etc/localtime

[root@master ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

b.然后通过命令ntpdateate -u ntp.api.bz更新下时间。

[root@master ~]# ntpdateate -u ntp.api.bz

20 Dec 23:31:14 ntpdateate[2545]: step time server 114.118.7.163 offset -28038.718959 sec

c.查看时间

[root@master ~]# date

2020年 12月 20日 星期日 23:31:28 CST

d. 时间已经同步过来了,为了避免重启后丢失这些修改,进行保存:

[root@master ~]# hwclock -w

三台机器都执行一次,重新执行 gpssh -f /home/gpadmin/all_hosts  -v date

[root@master gpsql]# gpssh -f /home/gpadmin/all_hosts  -v date

[WARN] Reference default values as $MASTER_DATA_DIRECTORY/gpssh.conf could not be found

Using delaybeforesend 0.05 and prompt_validation_timeout 1.0

[Reset ...]

[INFO] login master

[INFO] login segment1

[INFO] login segment2

[  master] 2020年 12月 20日 星期日 23:35:55 CST

[segment1] 2020年 12月 20日 星期日 23:35:55 CST

[segment2] 2020年 12月 20日 星期日 23:35:55 CST

[INFO] completed successfully

[Cleanup...]

发现,此时三台机器的时间已修正。

然后再执行gpssh -f /home/gpadmin/all_hosts -v ntpdate

[root@master gpsql]# gpssh -f /home/gpadmin/all_hosts -v ntpdate

[WARN] Reference default values as $MASTER_DATA_DIRECTORY/gpssh.conf could not be found

Using delaybeforesend 0.05 and prompt_validation_timeout 1.0

[Reset ...]

[INFO] login segment1

[INFO] login master

[INFO] login segment2

[segment1] 20 Dec 23:39:47 ntpdate[1926]: no servers can be used, exiting

[  master] 20 Dec 23:39:47 ntpdate[2887]: no servers can be used, exiting

[segment2] 20 Dec 23:39:47 ntpdate[1890]: no servers can be used, exiting

[INFO] completed successfully

[Cleanup...]

此时,三台机器的系统时间已同步完成。

⑪配置.bash_profile 环境变量

切换到gpadmin用户,修改文件在后面添加,如下:

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

source /opt/gpsql/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1

修改完,执行命令. ~/.bash_profile使修改生效。

⑫配置数据库启动参数文件

vi /home/gpadmin/gpinitsystem_config,添加如下内容:

ARRAY_NAME="Greenplum Data Platform"

SEG_PREFIX=gpseg

PORT_BASE=33000

declare -a DATA_DIRECTORY=(/home/gpadmin/segmentdata /home/gpadmin/segmentdata)

MASTER_HOSTNAME=master

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)

⑬初始化greenplum,执行如下两条命令

[gpadmin@master gpsql]$ source greenplum_path.sh

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

执行结果如下:

20201220:23:59:21:003271 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, please wait...

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Reading Greenplum configuration file /home/gpadmin/gpinitsystem_config

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Locale has not been set in /home/gpadmin/gpinitsystem_config, will set to default value

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Locale set to en_US.utf8

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-No DATABASE_NAME set, will exit following template1 updates

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-MASTER_MAX_CONNECT not set, will set to default value 250

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, Completed

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, please wait...

..

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Configuring build for standard array

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, Completed

20201220:23:59:22:003271 gpinitsystem:master:gpadmin-[INFO]:-Building primary segment instance array, please wait...

....

20201220:23:59:23:003271 gpinitsystem:master:gpadmin-[INFO]:-Building group mirror array type , please wait...

....

20201220:23:59:24:003271 gpinitsystem:master:gpadmin-[INFO]:-Checking Master host

20201220:23:59:24:003271 gpinitsystem:master:gpadmin-[INFO]:-Checking new segment hosts, please wait...

........

20201220:23:59:30:003271 gpinitsystem:master:gpadmin-[INFO]:-Checking new segment hosts, Completed

20201220:23:59:30:003271 gpinitsystem:master:gpadmin-[INFO]:-Building the Master instance database, please wait...

20201220:23:59:36:003271 gpinitsystem:master:gpadmin-[INFO]:-Starting the Master in admin mode

20201220:23:59:41:003271 gpinitsystem:master:gpadmin-[INFO]:-Commencing parallel build of primary segment instances

20201220:23:59:41:003271 gpinitsystem:master:gpadmin-[INFO]:-Spawning parallel processes    batch [1], please wait...

....

20201220:23:59:41:003271 gpinitsystem:master:gpadmin-[INFO]:-Waiting for parallel processes batch [1], please wait...

.................

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:------------------------------------------------

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Parallel process exit status

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:------------------------------------------------

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Total processes marked as completed           = 4

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Total processes marked as killed              = 0

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Total processes marked as failed              = 0

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:------------------------------------------------

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Commencing parallel build of mirror segment instances

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Spawning parallel processes    batch [1], please wait...

....

20201220:23:59:58:003271 gpinitsystem:master:gpadmin-[INFO]:-Waiting for parallel processes batch [1], please wait...

...............

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:------------------------------------------------

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-Parallel process exit status

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:------------------------------------------------

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-Total processes marked as completed           = 0

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-Total processes marked as killed              = 0

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[WARN]:-Total processes marked as failed              = 4 <<<<<

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:------------------------------------------------

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[FATAL]:-Errors generated from parallel processes

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-Dumped contents of status file to the log file

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-Building composite backout file

20201221:00:00:14:gpinitsystem:master:gpadmin-[FATAL]:-Failures detected, see log file /home/gpadmin/gpAdminLogs/gpinitsystem_20201220.log for more detail Script Exiting!

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[WARN]:-Script has left Greenplum Database in an incomplete state

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[WARN]:-Run command /bin/bash /home/gpadmin/gpAdminLogs/backout_gpinitsystem_gpadmin_20201220_235921 to remove these changes

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-Start Function BACKOUT_COMMAND

20201221:00:00:14:003271 gpinitsystem:master:gpadmin-[INFO]:-End Function BACKOUT_COMMAND

可以看到,初始化出现错误。

重新输入初始化的命令:

[root@master gpsql]# source greenplum_path.sh

[root@master gpsql]# gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:16:38:55:021189 gpinitsystem:master:root-[INFO]:-Checking configuration parameters, please wait...

20210106:16:38:55:gpinitsystem:master:root-[FATAL]:-Unable to run this script as root Script Exiting!

[root@master gpsql]# su gpadmin

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, please wait...

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Reading Greenplum configuration file /home/gpadmin/gpinitsystem_config

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Locale has not been set in /home/gpadmin/gpinitsystem_config, will set to default value

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Locale set to en_US.utf8

20210106:16:39:07:gpinitsystem:master:gpadmin-[FATAL]:-Master host data directory /home/gpadmin/masterdata/gpseg-1 already exists Script Exiting!

根据报错提示:删除相应的文件

删除命令:rm -rf /home/gpadmin/masterdata/gpseg-1

重新执行初始化命令:

[root@master gpsql]# source greenplum_path.sh

[root@master gpsql]# gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:16:38:55:021189 gpinitsystem:master:root-[INFO]:-Checking configuration parameters, please wait...

20210106:16:38:55:gpinitsystem:master:root-[FATAL]:-Unable to run this script as root Script Exiting!

[root@master gpsql]# su gpadmin

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, please wait...

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Reading Greenplum configuration file /home/gpadmin/gpinitsystem_config

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Locale has not been set in /home/gpadmin/gpinitsystem_config, will set to default value

20210106:16:39:07:021371 gpinitsystem:master:gpadmin-[INFO]:-Locale set to en_US.utf8

20210106:16:39:07:gpinitsystem:master:gpadmin-[FATAL]:-Master host data directory /home/gpadmin/masterdata/gpseg-1 already exists Script Exiting!

[gpadmin@master gpsql]$ rm -rf /home/gpadmin/masterdata/gpseg-1

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, please wait...

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-Reading Greenplum configuration file /home/gpadmin/gpinitsystem_config

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-Locale has not been set in /home/gpadmin/gpinitsystem_config, will set to default value

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-Locale set to en_US.utf8

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-No DATABASE_NAME set, will exit following template1 updates

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-MASTER_MAX_CONNECT not set, will set to default value 250

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, Completed

20210106:17:11:55:022159 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, please wait...

..

20210106:17:12:20:022159 gpinitsystem:master:gpadmin-[INFO]:-Configuring build for standard array

20210106:17:12:20:022159 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, Completed

20210106:17:12:20:022159 gpinitsystem:master:gpadmin-[INFO]:-Building primary segment instance array, please wait...

....

20210106:17:14:06:022159 gpinitsystem:master:gpadmin-[INFO]:-Building group mirror array type , please wait...

....

20210106:17:15:51:022159 gpinitsystem:master:gpadmin-[INFO]:-Checking Master host

20210106:17:15:51:gpinitsystem:master:gpadmin-[FATAL]:-Found indication of postmaster process on port 5432 on Master host Script Exiting!

发现报错:Found indication of postmaster process on port 5432 on Master host Script Exiting!

可能是端口的问题,输入命令:lsof -i:5432查询端口5432的进程信息,报错:[gpadmin@master gpsql]$ lsof -i:5432

bash: lsof: 未找到命令

所以输入命令yum install lsof -y安装lsof。结果又报错:ImportError: No module named site

经上网查询,输入命令:unset PYTHONPATH、unset PYTHONHOME,yum修复完成。

输入命令:yum install lsof -y安装lsof。

然后查看端口5432的进程信息:

[root@master gpsql]# lsof -i:5432

COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

postgres 5848 gpadmin    3u  IPv4  23334      0t0  TCP *:postgres (LISTEN)

postgres 5848 gpadmin    4u  IPv6  23335      0t0  TCP *:postgres (LISTEN)

然后输入命令:kill -9 5848来杀死进程。

再次输入初始化命令。

[gpadmin@master gpsql]$ source /opt/gpsql/greenplum_path.sh

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, please wait...

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-Reading Greenplum configuration file /home/gpadmin/gpinitsystem_config

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-Locale has not been set in /home/gpadmin/gpinitsystem_config, will set to default value

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-Locale set to en_US.utf8

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-No DATABASE_NAME set, will exit following template1 updates

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-MASTER_MAX_CONNECT not set, will set to default value 250

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, Completed

20210106:20:49:07:026650 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, please wait...

..

20210106:20:49:32:026650 gpinitsystem:master:gpadmin-[INFO]:-Configuring build for standard array

20210106:20:49:32:026650 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, Completed

20210106:20:49:32:026650 gpinitsystem:master:gpadmin-[INFO]:-Building primary segment instance array, please wait...

....

20210106:20:51:18:026650 gpinitsystem:master:gpadmin-[INFO]:-Building group mirror array type , please wait...

....

20210106:20:53:03:026650 gpinitsystem:master:gpadmin-[INFO]:-Checking Master host

20210106:20:53:03:026650 gpinitsystem:master:gpadmin-[WARN]:-Have lock file /tmp/.s.PGSQL.5432.lock but no process running on port 5432

20210106:20:53:03:gpinitsystem:master:gpadmin-[FATAL]:-Found indication of postmaster process on port 5432 on Master host Script Exiting!

再次报错,错误信息:Have lock file /tmp/.s.PGSQL.5432.lock but no process running on port 5432

输入命令:rm -rf /tmp/.s.PGSQL.5432.lock  删除该文件

再次输入初始化命令。

[gpadmin@master gpsql]$ source /opt/gpsql/greenplum_path.sh

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, please wait...

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-Reading Greenplum configuration file /home/gpadmin/gpinitsystem_config

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-Locale has not been set in /home/gpadmin/gpinitsystem_config, will set to default value

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-Locale set to en_US.utf8

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-No DATABASE_NAME set, will exit following template1 updates

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-MASTER_MAX_CONNECT not set, will set to default value 250

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-Checking configuration parameters, Completed

20210106:20:56:48:027650 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, please wait...

..

20210106:20:57:13:027650 gpinitsystem:master:gpadmin-[INFO]:-Configuring build for standard array

20210106:20:57:13:027650 gpinitsystem:master:gpadmin-[INFO]:-Commencing multi-home checks, Completed

20210106:20:57:13:027650 gpinitsystem:master:gpadmin-[INFO]:-Building primary segment instance array, please wait...

....

20210106:20:58:58:027650 gpinitsystem:master:gpadmin-[INFO]:-Building group mirror array type , please wait...

....

20210106:21:00:44:027650 gpinitsystem:master:gpadmin-[INFO]:-Checking Master host

20210106:21:00:44:027650 gpinitsystem:master:gpadmin-[INFO]:-Checking new segment hosts, please wait...

.20210106:21:01:54:gpinitsystem:master:gpadmin-[FATAL]:-Instance directory /home/gpadmin/segmentdata/gpseg0 exists on segment instance segment1 Script Exiting!

发现报错,输入命令rm -rf /home/gpadmin/segmentdata/gpseg0删除该文件。

根据报错提示,可以输入命令:

/bin/bash/home/gpadmin/gpAdminLogs/backout_gpinitsystem_gpadmin_*********(具体为某年某月某日的日志)可以直接将无用的文件删除掉,不需要手动一一删除。

重新执行命令:

[gpadmin@master gpsql]$ source /opt/gpsql/greenplum_path.sh

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

依旧报错,查看具体日志发现,$GPHOME路径为/opt/greenplum-db/,所以发现source的路径错误,所以正确的source路径为source /opt/greenplum-db/greenplum_path.sh

同时修改配置.bash_profile 环境变量(每台机器都要配置),具体操作如下:

[gpadmin@master ~]$ cat .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PAT

source /opt/greenplum-db/greenplum_path.sh

export MASTER_DATA_DIRECTORY=/home/gpadmin/masterdata/gpseg-1

修改之后,让环境变量生效,执行命令:[gpadmin@ master ~]$ . ~/.bash_profile

重新执行初始化命令:

[gpadmin@master gpsql]$ source /opt/ greenplum-db /greenplum_path.sh

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

依旧报错,查看具体日志发现报错信息为如下几条:

-gpstop failed. (Reason='could not translate host name "localhost" to address: Name or service not known

socket.gaierror: [Errno -2] Name or service not known

greenplum socket.gaierror: [Errno -3] Temporary failure in name resolution

通过查阅资料,应该是hostname的解析问题

具体解决方法如下:

1.修改主机名:

[root@mdw1 ~]# vim /etc/sysconfig/network

# Created by anaconda

HOSTNAME=master(各主机依此修改)

2. [gpadmin@master ~]$ cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.81.2.20 master

10.81.2.21 segment1

10.81.2.22 segment2

重新执行初始化命令:

[gpadmin@master gpsql]$ source /opt/ greenplum-db /greenplum_path.sh

[gpadmin@master gpsql]$ gpinitsystem -c /home/gpadmin/gpinitsystem_config -a

过程中输入Y,继续初始化过程。

正常的话出现如下结果:

[gpadmin@ master ~]$ psql -d postgrespsql

(8.3.23)Type "help" for help.

postgres=# select * from gp_segment_configuration ;

dbid | content | role | preferred_role | mode | status | port  | hostname | address | replication_port ------+---------+------+----------------+------+--------+-------+----------+---------+------------------    1 |      -1 | p    | p              | s    | u      |  2346 | mdw      | mdw     |                     2 |       0 | p    | p              | s    | u      | 42000 | mdw      | mdw     |            43000    4 |       2 | p    | p              | s    | u      | 42000 | sdw1     | sdw1    |            43000    6 |       4 | p    | p              | s    | u      | 42000 | sdw2     | sdw2    |            43000    3 |       1 | p    | p              | s    | u      | 42001 | mdw      | mdw     |            43001    5 |       3 | p    | p              | s    | u      | 42001 | sdw1     | sdw1    |            43001    7 |       5 | p    | p              | s    | u      | 42001 | sdw2     | sdw2    |            43001    8 |       0 | m    | m              | s    | u      | 53000 | sdw1     | sdw1    |            54000    9 |       1 | m    | m              | s    | u      | 53001 | sdw1     | sdw1    |            54001   10 |       2 | m    | m              | s    | u      | 53000 | sdw2     | sdw2    |            54000   11 |       3 | m    | m              | s    | u      | 53001 | sdw2     | sdw2    |            54001   12 |       4 | m    | m              | s    | u      | 53000 | mdw      | mdw     |            54000   13 |       5 | m    | m              | s    | u      | 53001 | mdw      | mdw     |            54001(13 rows)

greenplum麒麟安装笔记相关推荐

  1. 如何安装python3.7.4_银河麒麟安装Python3.7.4以及升级自带OpenSSL

    银河麒麟安装Python3.7.4以及升级自带OpenSSL 升级OpenSSL 1.下载opensslwget https://www.openssl.org/source/openssl-1.1. ...

  2. laravel安装笔记 (转)

    一.安装composer 安装之前将\php\php.ini文件中的php_openssl.dll扩展库开启,否则composer在安装过程中会出现错误提示. (我在安装过程中发现apache目录下的 ...

  3. 前端开发学习笔记 - 1. Node.JS安装笔记

    Node.JS安装笔记 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an ...

  4. Oracle安装笔记

    Oracle安装笔记 出现错误后不要慌,最主要的是看log文件的提示,其中比较简单的文件是install目录下的make.log 错误一: client_shared For example: /us ...

  5. convirt2.5在虚拟机上安装笔记

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  6. SVN的安装笔记和要注意的问题

    SVN的安装笔记和要注意的问题 之前装的SVN 1.3.2,按网上说的教程,一配置就可以用了,但这次换了1.4.2的最新版本, 只是设置了server.conf和passwd后,依然在导入项目时,说验 ...

  7. pycharm不同py文件共享参数_PyCharm安装笔记

    1. 介绍 1.1 介绍 今天福哥带着大家学习如何安装非常好用的Python编辑器,也就是jetbrains全家桶的PyCharm编辑器. PyCharm是jetbrans开发的一款专门用来编写Pyt ...

  8. ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记

    ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记: 一.Qt Creator 5.10安装 官网下载地址: http://download ...

  9. Windows10+Ubuntu 18.04.2+ROS 安装笔记(SSD单硬盘)下

    Windows10+Ubuntu 18.04.2+ROS 安装笔记(SSD单硬盘)下 一.前言 二.化繁为简 二.补充说明 三.测试ROS 是否安装成功 一.前言 最近需要学习ROS和python,于 ...

最新文章

  1. 啥不懂也能动手搭建属于自己的博客网站
  2. 面试:说说你对 HashMap 的认识?
  3. Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议
  4. 基于simulink的QAM-WIMAX的系统仿真
  5. 160个Crackme037
  6. PyCharm-缩进 格式化代码
  7. 如何对数据库中的表以及表中的字段进行重命名
  8. php config(),php config
  9. Leetcode--123. 买卖股票的最佳时间Ⅲ
  10. Postgresql 填充所有的时间点
  11. 3-9in-place的概念和广播机制
  12. 谷歌提出新型自动语音识别数据增强大法,直接对频谱图“动刀”,提升模型表现...
  13. 怎么更改AD域用户账号和密码_AD域管理中那些实用的软件
  14. 纯手工获取的WINDOWS 7 32位 SP1后续补丁集ver201509的官方下载地址
  15. java商家查询订单功能_查询订单详情示例代码
  16. 微信二维码生成步骤(本人亲测)
  17. 数据一致性、准确性、完整性、及时性、有效性
  18. 安科瑞ACX电瓶车智能充电桩,支付方式可选择刷卡、扫码、免费充电使用,设备内部可引出10路出线至专用插座
  19. 【Redis】技术评审要点
  20. 2013全国计算机一级考试,2013全国计算机等级考试一级试题及讲解

热门文章

  1. 蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)
  2. Word文档如何在方框里打勾?三招让你从入门到精通,工作效率翻倍
  3. 一种全景视频的主观质量评价方法(译)
  4. Pandas合并表格的方法总结
  5. 不同方式实现IP访问限制
  6. IPAD/IOS 访问限制密码找回方法(设置-通用-访问限制-密码的非刷机找回方法)
  7. 程序员:迟到1分钟罚300,加班却视而不见,月底工资让人寒心
  8. 【畅购商城】 B2B、 C2C、B2C、C2B、O2O、B2B2C电商模式介绍与分析
  9. STM32H7 ADC hal库
  10. 马王堆汉墓帛书‧老子乙本——德经