实验内容

本实验主要内容为在CentOS 7.9上安装部署openGauss数据库,并进行简单的数据库相关操作。

实验环境说明

  1. 组网说明

本实验环境为虚拟机VMware Workstation Pro + CentOS 7.9 + openGauss 2.1.0。

  1. 设备介绍

我所使用的具体设备:

                                                     设备明细表

设备名称

设备型号

Linux操作系统

CentOS 7.9

windows操作系统

win10 x86 64位

虚拟机

VMware Workstation Pro

Python

Python 3.6.X

实验环境安装

官网文档使用的是Oracle VM VirtualBox我安装了一下觉得不太好用,还是推荐用VMware Workstation Pro。在VMware Workstation Pro上创建centos7.9(最新,稍后会进行修改)虚拟机,参考链接如下超详细虚拟机VMware安装Centos7教程(图文) - 知乎 (zhihu.com):不是本文重点,不再赘述。与官方文档不同的是我选择了安装带桌面的centos,更加方便。

openGauss安装

  1. 修改操作系统版本

如果CentOS版本不是7.6的需要进行修改,如果是7.6则无需修改,

先vi /etc/redhat-releas 打开编辑文件,然后将内容改为CentOS Linux release 7.6.2003 (Core)。输入”i”切换到编辑模式,移动鼠标到修改位置修改内容,然后按下ESC键退出编辑模式,然后输入”:wq”退出并进行保存,具体如下:

[root@db1 ~]# vi /etc/redhat-release

CentOS Linux release 7.6.2003 (Core)

  1. 查看本地ip

使用命令 :

Ifconig

  1. 使用一键部署openGauss2.0.1[CentOS 7.6] - 墨天轮 (modb.pro)内的代码进行安装,注意将代码里的ip改为自己的ip

vi auto_install.sh

然后将代码复制

在命令行中输入以下命令进行运行,开始自动安装

sh auto_install.sh

询问yes/no填yes

然后输入密码,这里注意输入的密码必须符合要求,否则会安装失败

  1. 查看是否安装成功

Su  - omm

安装成功后数据库默认开启 只需要命令

gsql -d postgres -p 26000 -r

而如果数据库关闭了,就需要先执行

gs_om -t start

再执行

gsql -d postgres -p 26000 -r

否则会出现failed to connect Unknown:26000  的错误

下面对自动安装的代码进行分析

## 1.定义主机信息[请根据实际情况修改]

export MY_HOSTNAME=node1           ## 主机名

export MY_HOSTIP=192.168.244.128      ## IP地址

export MY_SOFTWARE_DIRECTORY=/soft/openGauss      ## 软件包所在目录

export MY_XML=/soft/openGauss/clusterconfig.xml   ## 集群配置文件XML

export openGauss_Download_url=https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.1/x86/openGauss-2.0.1-CentOS-64bit-all.tar.gz  ## openGauss软件包下载地址

## 1. 设置主机名并配置hosts文件

hostnamectl set-hostname $MY_HOSTNAME

sed -i '/$MY_HOSTIP/d' /etc/hosts

echo "$MY_HOSTIP  $MY_HOSTNAME   #Gauss OM IP Hosts Mapping" >> /etc/hosts

cat /etc/hosts

echo "1.Configure /etc/hosts completed."

echo -e "\n"

## 2. 关闭防火墙

systemctl disable firewalld.service

systemctl stop firewalld.service

echo "Firewalld " `systemctl status firewalld|grep Active`

echo "2.Disable firewalld service completed."

echo -e "\n"

## 3. 关闭SELinux

sed -i '/^SELINUX=/d' /etc/selinux/config

echo "SELINUX=disabled" >> /etc/selinux/config

cat /etc/selinux/config|grep "SELINUX=disabled"

echo "3.Disable SELINUX completed."

echo -e "\n"

## 4. 设置操作系统字符集编码

echo "LANG=en_US.UTF-8" >> /etc/profile

source /etc/profile

echo $LANG

echo "4.Configure encoding completed."

echo -e "\n"

## 5. 设置操作系统时区

rm -fr /etc/localtime

ln -s /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

date -R

hwclock

echo "5.Configure Timezone completed."

echo -e "\n"

## 6. 关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]

sed -i '/swap/s/^/#/' /etc/fstab

swapoff -a

free -m

echo "6.Close swap partition completed."

echo -e "\n"

## 7. 配置SSH服务,关闭Banner,允许root远程登录

sed -i '/Banner/s/^/#/'  /etc/ssh/sshd_config

sed -i '/PermitRootLogin/s/^/#/'  /etc/ssh/sshd_config

echo -e "\n" >> /etc/ssh/sshd_config

echo "Banner none " >> /etc/ssh/sshd_config

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner'

echo "7.Configure SSH Service completed."

echo -e "\n"

## 8. 配置YUM源、安装依赖包、修改默认Python3版本

mkdir /etc/yum.repos.d/bak

mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/bak/

wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo

yum clean all

yum install -y wget bzip2 python3

yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel net-tools tar

mv /usr/bin/python  /usr/bin/python2_bak

ln -s /usr/bin/python3 /usr/bin/python

python -V

echo "8.Configure Install Packages and change default Python version completed."

echo -e "\n"

## 9. 配置 sysctl.conf 和 performance.sh

cat >> /etc/sysctl.conf << EOF

net.ipv4.tcp_retries1 = 5

net.ipv4.tcp_syn_retries = 5

net.sctp.path_max_retrans = 10

net.sctp.max_init_retransmits = 10

EOF

sysctl -p

echo "9.Configure sysctl.conf and performance.sh completed."

echo -e "\n"

## 10. 配置资源限制

echo "* soft stack 3072" >> /etc/security/limits.conf

echo "* hard stack 3072" >> /etc/security/limits.conf

echo "* soft nofile 1000000" >> /etc/security/limits.conf

echo "* hard nofile 1000000" >> /etc/security/limits.conf

echo "* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf

tail -n 4 /etc/security/limits.conf

tail -n 1 /etc/security/limits.d/90-nproc.conf

echo "10.Configure resource limits completed."

echo -e "\n"

## 11. 关闭透明大页[Only for CentOS]

cat >>/etc/rc.d/rc.local<<EOF

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then

echo never > /sys/kernel/mm/transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then

echo never > /sys/kernel/mm/transparent_hugepage/defrag

fi

EOF

chmod +x /etc/rc.d/rc.local

/usr/bin/sh /etc/rc.d/rc.local

cat /sys/kernel/mm/transparent_hugepage/enabled

cat /sys/kernel/mm/transparent_hugepage/defrag

echo "11.Close transparent_hugepage completed."

echo -e "\n"

## 12. 禁用RemoveIPC[Only for openEuler]

## sed -i '/^RemoveIPC/d' /etc/systemd/logind.conf

## sed -i '/^RemoveIPC/d' /usr/lib/systemd/system/systemd-logind.service

## echo "RemoveIPC=no"  >> /etc/systemd/logind.conf

## echo "RemoveIPC=no"  >> /usr/lib/systemd/system/systemd-logind.service

## systemctl daemon-reload

## systemctl restart systemd-logind

## loginctl show-session | grep RemoveIPC

## systemctl show systemd-logind | grep RemoveIPC

## echo "12.Disable RemoveIPC completed."

## echo -e "\n"

## 13. 下载openGauss软件包

mkdir -p $MY_SOFTWARE_DIRECTORY

cd $MY_SOFTWARE_DIRECTORY

wget $openGauss_Download_url

echo "13.openGauss software download completed."

echo -e "\n"

## 14. 配置XML文件

rm -fr $MY_XML

cat >> $MY_XML <<EOF

<?xml version="1.0" encoding="UTF-8"?>

<ROOT>

<!-- openGauss整体信息 -->

<CLUSTER>

<PARAM name="clusterName" value="dbCluster" />

<PARAM name="nodeNames" value="$MY_HOSTNAME" />

<PARAM name="backIp1s" value="$MY_HOSTIP"/>

<PARAM name="gaussdbAppPath" value="/gaussdb/app" />

<PARAM name="gaussdbLogPath" value="/gaussdb/log" />

<PARAM name="gaussdbToolPath" value="/gaussdb/om" />

<PARAM name="corePath" value="/gaussdb/corefile"/>

<PARAM name="clusterType" value="single-inst"/>

</CLUSTER>

<!-- 每台服务器上的节点部署信息 -->

<DEVICELIST>

<!-- node1上的节点部署信息 -->

<DEVICE sn="1000001">

<PARAM name="name" value="$MY_HOSTNAME"/>

<PARAM name="azName" value="AZ1"/>

<PARAM name="azPriority" value="1"/>

<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->

<PARAM name="backIp1" value="$MY_HOSTIP"/>

<PARAM name="sshIp1" value="$MY_HOSTIP"/>

<!--dbnode-->

<PARAM name="dataNum" value="1"/>

<PARAM name="dataPortBase" value="26000"/>

<PARAM name="dataNode1" value="/gaussdb/data/db1"/>

</DEVICE>

</DEVICELIST>

</ROOT>

EOF

cat $MY_XML

echo "14.Configure XML file completed."

echo -e "\n"

## 15. 解压安装包并修改目录权限

echo "Begin to Uncompress openGauss Package and Modify directory permissions:"

cd $MY_SOFTWARE_DIRECTORY

tar -zxvf *all.tar.gz

tar -zxvf *om.tar.gz

ls -l

chmod -R 777 $MY_SOFTWARE_DIRECTORY/../

echo "15.Uncompress openGauss Package completed."

echo -e "\n"

## 16. 执行 gs_preinstall

echo "Begin to execute openGauss preinstall:"

python $MY_SOFTWARE_DIRECTORY/script/gs_preinstall -U omm -G dbgrp -X $MY_XML

echo "16.openGauss preinstall completed."

echo -e "\n"

## 17. 检查预安装环境

echo "Begin to Check OS environment:"

$MY_SOFTWARE_DIRECTORY/script/gs_checkos -i A -h $MY_HOSTNAME --detail

## 18. 执行 gs_install

echo "Begin to execute openGauss install:"

touch /home/omm/install_db

cat >> /home/omm/install_db <<EOF

source ~/.bashrc

gs_install -X  $MY_XML --gsinit-parameter="--encoding=UTF8"  --dn-guc="max_process_memory=3GB" --dn-guc="shared_buffers=128MB" --dn-guc="cstore_buffers=16MB"

EOF

chown -R omm:dbgrp /home/omm/install_db

su - omm -c "sh /home/omm/install_db"

echo "17.openGauss install completed."

echo -e "\n"

## 安装完毕!

echo "openGauss Install completed.congratulations"

echo "Congratulations!!!"

可以看出代码主要完成了以下几个工作:

  1. 定义主机信息, 设置主机名并配置hosts文件
  2. 关闭防火墙
  3. 关闭SELinux
  4. 设置操作系统字符集编码
  5. 设置操作系统时区
  6. 关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]
  7. 配置SSH服务,关闭Banner,允许root远程登录
  8. 配置YUM源、安装依赖包、修改默认Python3版本
  9. 配置 sysctl.conf 和 performance.sh
  10. 配置资源限制
  11. 关闭透明大页[Only for CentOS]
  12. 下载openGauss软件包
  13. 配置XML文件
  14. 解压安装包并修改目录权限
  15. 执行 gs_preinstall
  16. 检查预安装环境
  17. 执行 gs_install

数据库使用

  1. 安装JDK
  2. (1)首先执行如下命令搜索 jdk 安装包:

yum search java|grep jdk

这里我们选择 1.8 版本,执行如下命令进行安装。注意:默安装默认的目录为:/usr/lib/jvm/

yum install java-1.8.0-openjdk

安装完毕后执行 java -version 命令即可查看当前的版本。

默认安装完只有运行环境,也就说 java 安装目录下只有 jre 文件夹,我们执行 javac 命令会提示“未找到命令”:

我们执行如下命令安装开发环境:

yum install java-1.8.0-openjdk-devel.x86_64、

安装完可看到 java 安装目录下出现 bin、lib 等文件夹。再次输入 javac 说明安装成功:

  1. 配置 JAVA_HOME

首先我们依次执行如下命令,一步步找到正确的 JAVA_HOME 位置:

可以发现最终找到的位置如下:

执行如下命令打开配置环境变量的文件:

vi /etc/profile

在里面添加以下配置(JAVA_HOME 参数根据前面找到的目录路径设置):

最后执行如下命令让配置生效:

source /etc/profile

  1. 下载驱动

wget -P /home/download https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/arm/openGauss-1.1.0-JDBC.tar.gz

解压该文件

tar -zxvf openGauss-1.1.0-JDBC.tar.gz

解压后的文件名为postgresql.jar

  1. 修改数据库的pg_hba.conf文件

在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件:<PARAM name="dataNode1" value="/gaussdb/data/db1"/>。

编写测试程序(修改ip,端口,用户,密码)

cd /gaussdb/data/db1

vi pg_hba.conf

在ipv4最后添加host all all 0.0.0.0/0 sha256 目的为修改网络连接规则,使得一些工具可以连接至该服务器。

切换至 omm 用户环境,使用 gs_ctl 将策略生效。

su - omm

gs_ctl reload -D /gaussdb/data/db1/

登录openGauus,创建新用户(如果已经有则忽略这一步),远程登录不允许使用omm用户.

CREATE USER jack PASSWORD 'Test@123';

如果使用内存表,则需要授予新用户权限:

grant usage on foreign server mot_server to jack;

修改数据库监听地址

cd /gaussdb/data/db1

vi postgresql.conf

输入“:60”找到对应位置,然后输入“i”切换到 INSERT 模式,将 listen_addresses 的 值修改成为*,修改后按下“ESC”键,退出 INSERT 模式,输入“:wq”后回车保存。

修改完成后重启数据库生效(-D后面的数据库默认路径,需要根据实际情况进行修改)

gs_ctl restart -D /gaussdb/data/db1/

//DBtest.java

//演示基于JDBC开发的主要步骤,会涉及创建数据库、创建表、插入数据等。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.sql.Statement;

import java.sql.CallableStatement;

public class DBTest {

//创建数据库连接。

public static Connection GetConnection(String username, String passwd) {

String driver = "org.postgresql.Driver";

String sourceURL = "jdbc:postgresql://ip:端口/postgres";

Connection conn = null;

try {

//加载数据库驱动。

Class.forName(driver).newInstance();

} catch (Exception e) {

e.printStackTrace();

return null;

}

try {

//创建数据库连接。

conn = DriverManager.getConnection(sourceURL, username, passwd);

System.out.println("Connection succeed!");

} catch (Exception e) {

e.printStackTrace();

return null;

}

return conn;

};

//执行普通SQL语句,创建customer_t1表。

public static void CreateTable(Connection conn) {

Statement stmt = null;

try {

stmt = conn.createStatement();

//执行普通SQL语句。

int rc = stmt

.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));");

stmt.close();

} catch (SQLException e) {

if (stmt != null) {

try {

stmt.close();

} catch (SQLException e1) {

e1.printStackTrace();

}

}

e.printStackTrace();

}

}

//执行预处理语句,批量插入数据。

public static void BatchInsertData(Connection conn) {

PreparedStatement pst = null;

try {

//生成预处理语句。

pst = conn.prepareStatement("INSERT INTO customer_t1 VALUES (?,?)");

for (int i = 0; i < 3; i++) {

//添加参数。

pst.setInt(1, i);

pst.setString(2, "data " + i);

pst.addBatch();

}

//执行批处理。

pst.executeBatch();

pst.close();

} catch (SQLException e) {

if (pst != null) {

try {

pst.close();

} catch (SQLException e1) {

e1.printStackTrace();

}

}

e.printStackTrace();

}

}

//执行预编译语句,更新数据。

public static void ExecPreparedSQL(Connection conn) {

PreparedStatement pstmt = null;

try {

pstmt = conn

.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1");

pstmt.setString(1, "new Data");

int rowcount = pstmt.executeUpdate();

pstmt.close();

} catch (SQLException e) {

if (pstmt != null) {

try {

pstmt.close();

} catch (SQLException e1) {

e1.printStackTrace();

}

}

e.printStackTrace();

}

}

/**

* 主程序,逐步调用各静态方法。

* @param args

*/

public static void main(String[] args) {

//创建数据库连接。

Connection conn = GetConnection("tester", "Password1234");

//创建表。

CreateTable(conn);

//批插数据。

BatchInsertData(conn);

//执行预编译语句,更新数据。

ExecPreparedSQL(conn);

//关闭数据库连接。

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

命令行编译,将jdbc驱动的jar包和DBTest.java放在同一个目录下,编译:

javac -cp postgresql.jar dbtest.java

运行:

java -cp .:postgresql.jar dbtest

问题及解决

在安装过程中遇到了很多问题,上面安装过程都有体现,下面进行总结。

  1. VM VirtualBox使用过程中遇到了很多问题,建议还是使用VMware
  2. 可以安装centos7.9,但一定要修改/etc/redhat-release文件里的为7.6
  3. 在设置数据库密码时,注意对密码长度、大小写的要求,不符合要求无法安装成功
  4. 直接在root用户下运行比较方便
  5. 在运行gs_om -t start时不成功,需要检查一下虚拟机的网络,有时候虚拟机就是连接不上网络,网上看了很多办法都没用,此时建议重启。
  6. 在运行gsql -d postgres -p 26000 -r时提示错误failed to connect Unknown:26000,说明数据库还没开启,要先运行gs_om -t start,ps -ef |grep gauss可以查看数据库进程是否关闭
  7. 远程登录不允许使用omm用户!需要创建用户并给他grant

OpenGauss数据库的安装与运行相关推荐

  1. openGauss数据库源码解析系列文章——openGauss开发快速入门(一)

    作为openGauss数据库开发者,在基于开源社区的openGauss版本进行二次开发的过程中,需要完成软件包获取.源码了解.代码修改.编译发布等过程,同时还需要安装数据库以了解数据库的基本特点.验证 ...

  2. OpenGauss数据库在 CentOS 上的实践,配置篇

    服务器准备 本篇博客可以使用华为云提供的测试 ECS,进行实践,领取地址为:https://activity.huaweicloud.com/free_test/ 如果没有领取到或者名额已满,可以用 ...

  3. 实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库

    本文适合需要快速了解OpenGauss基本使用和操作的单机用户,可以短时间内完成安装体验.对于企业级生产使用或者需要部署多台服务器的,不适合本文. 因为业务需要,要在鲲鹏架构里安装单机版的OpenGa ...

  4. 猿创征文 | 国产数据库之OpenGauss数据库详解安装和使用

    文章目录 1.OpenGauss简介 2.OpenGauss系统架构 3.OpenGauss特点 4.OpenGauss基本概念 5.OpenGauss应用场景 6.OpenGauss的安装 6.1. ...

  5. 使用虚拟机在openEuler上安装部署openGauss数据库

    本节描述openGauss数据库在虚拟机VirtualBox+openEuler上的安装配置. 1.虚拟机VirtualBox下载及安装 步骤 1 进入官方网站下载页面. 网址:https://www ...

  6. mysql找不到performance_Mysql安装完毕运行时没有mysql和performance_schema数据库_MySQL

    Mysql问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) Mysql安装完 ...

  7. OpenGauss数据库的详细安装过程

    目录 1. 概述 1.1 简介 1.2 内容描述 1.3 实验环境说明 2. 实验介绍 2.1 关于实验 2.2 实验目的 3. 购买华为云 ECS 鲲鹏服务器 3.1 登陆华为云(没有华为云账号的需 ...

  8. docker安装openGauss数据库

    下载openGauss镜像 docker pull enmotech/opengauss 创建容器 docker run --name opengauss --privileged=true -d - ...

  9. 使用虚拟机在CentOS上安装部署openGauss数据库指导(下)

    在上一篇中,我们使用VirtualBox下安装CentOS 7.8操作系统安装和网络配置完成,本文我们会基于此安装openGauss数据库. 1.5 操作系统环境准备 为了操作方便,可以使用SSH工具 ...

  10. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(2)

    点击蓝字 · 关注我们 前文回顾: 1.如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(1) 2.如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2) 3.如何掌握 ...

最新文章

  1. java架构升级_java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
  2. 使用 Cufon 渲染网页字体
  3. VS 2008 Web Site Project编译和发布速度提高办法
  4. Qt Creator使用自定义着色器
  5. 实现strlen()(c语言)
  6. Kirill And The Game CodeForces - 842A
  7. RocketMQ消息的存储结构
  8. Wiki1017(乘积最大)
  9. 在LINQ to SQL中使用Translate方法以及修改查询用SQL
  10. 小容量单片机生成pdf文件
  11. Dubbo(十四) dubbo的服务降级与集群容错
  12. SpringBoot配置属性之Security
  13. 平面标定(Homography变换)
  14. python问卷星微信登录_为什么我还可以继续使用python自动填问卷星?
  15. 利用jsonp跨域访问
  16. 74hc165C语言程序,74hc165使用方法(74hc165功能_内部结构图_时序图)
  17. 详解SQL中几种常用的表连接方式!
  18. NetFlow学习总结
  19. python中class什么意思_python-classmethod在此代码中做什么?
  20. 世界棒球经典赛:从WBC走进中国棒球·棒球1号位

热门文章

  1. EditPlus常用技巧
  2. 使用Transformer学习动态多层次的交通时空特征
  3. 网络推广有哪些常见的推广方法?
  4. 中国水墨风的小学学校网站模板
  5. 政府普及政务工作邮箱的难题
  6. 项目实训 : gitlab 配置ssh key后不生效问题
  7. html如何制作图片蒙版,如何制作遮罩蒙版手机照片?详细图文教程
  8. 怎么查看正在连接的无线网密码
  9. 【短道速滑四】Halcon的texture_laws算子自我研究
  10. 豆瓣排名前500的电视剧