openGauss
开源数据库
openGauss社区官网
开源社区
华为openGauss数据库安装与使用
华为 openGauss 数据库安装与使用
主要参考博客:opengauss 单机部署-墨天轮
1. 虚拟机安装
先做安装准备,点击链接下载VMware Workstation Pro16,此处为 Windows 10 使用。
1.1 VMware 安装
打开下载好的 exe 文件,即开始安装:
安装位置默认在 C 盘,点击更改可以修改安装位置,我安装到了 E:\VMware\下,安装路径尽量不要有中文,记得勾选 PATH 按钮,这样不用自己再添加环境变量,可勾选增强型键盘驱动程序,此功能可更好地处理国际键盘和带有额外按键的键盘:
一直点击下一步:
点击输入许可证,密钥可以自己购买,或者百度搜索以下,多尝试几个,下面是我当时安装使用的密钥,不知道现在失效没有:
安装后可能要求重启系统,重启后进入软件。依次点击导航栏中的 帮助 -> 关于 VMware Workstation ,查看许可证信息的状态,如下图所示即为激活成功。
1.2 虚拟机部署 centos
可以在官方网站下载 centos7,只有 centos7.6 支持安装 opengauss,如果找不到 7.6 版本的 centos,也可安装稍高版本的 centos,安装完之后需要在系统文件中做相关修改,我下载的是 centos7.9,文件太大了,需要下一段时间,记得更改下载保存的位置,我放在了 E:\Linux\下。我第一次安装时不知道必须安装 centos7,安装成了 centos8,而重新安装时部分截图忘记保存,所以下面部分截图出现的 centos8,大家视为 centos7 就好。
下载完成,打开 VMware 选择新建虚拟机:
浏览文件,选择 centos7 的下载目录,选择镜像文件:
设置虚拟机的名称和账户名,以及密码:
选择虚拟机的安装位置:
设置磁盘的容量,默认为 20GB,我修改为了 40GB,点击下一步即可:
自定义硬件可以根据自己的需求,修改 centos 的设置:
内存大小默认为 1GB,我设置为了 2GB:
网络适配器选择 NAT 模式,设置完成之后点击确定:
等待安装:
中间会出现这个页面让你设置,如果你没赶快进行操作,就跳过去了,设置不设置都没有关系,安装完成之后也可以设置:
如下是,点击各个按钮进行时间、显示、输入法的设置:
设置完成之后继续安装,安装完毕,输入设置的密码之后,回车:
安装成功!
1.3 centos 配置
1.3.1 设置系统版本
因为 opengauss 要求的 centos 版本是 7.6,因此我们需要修改/etc/redhat-release 文件:
#进入管理员模式 su #打开文件,进行编辑 vi /etc/redhat-release
修改成如下内容 CentOS Linux release 7.6 (Core):
1.3.2 网络设置
使用 ifconfig 或者 ip addr 可以查看自己的 ip 地址
我的网卡的名字为 ens-33,接下来,给网卡增加 DNS:echo 'DNS1=114.114.114.114'>>/etc.sysconfig/network-scripts/ifcfg-ens33
重启网卡:systemctl restart network,测试是否可以访问:ping www.baidu.com
如上图所示,则可以访问。
1.3.3 修改主机名
echo "vector" > /etc/hostname echo "***.***.***.*** vector" >>/etc/hostd
最后系统重启后记得查看主机名是否修改成功:
cat /etc/hostname
1.3.4 配置 YUM 源
删除系统自带的 yum 源
rm -rf /etc/yum.repos.d/*
下载阿里云 yum 源
wget -O /etc/yum.repos.d/CentOS-Base http://mirrors.aliyun.com/repo/Centos7.repo
生成仓库缓存
yum makecache
安装 python3.6,一定要装 3.6 版本
sudo yum install epel-release sudo yum install python36
1.3.5 关闭防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.3.6 设置字符集
cat >>/etc/profile<<EOF export LANG=en_US.UTF-8 EOF
1.3.7 修改地区和时间
cp /usr / share/zoneinfo/Asia/Shanghai /etc/localtime
1.3.8 关闭交换内存
swapoff -a
1.3.9 设置 root 用户远程登录
修改/etc/ssh/sshd_config 文件,去掉 PermitRootLogin 前的#号,并改 no 为 yes。修改之后我的系统文件中内容如下:
1.3.10 重启虚拟机
reboot
2. openGauss 安装
2.1 安装前准备
我下载的安装包是企业版 2.0.0 版本,刚开始装的是极简版,但是极简版缺少安装包,缺少工具,最后回归企业版。安装过程,参考了官方文档。
将下载好的安装包解压,我放在了目录/opt/software/openGauss/:
#先创建文件夹 mkdir -p /opt/software/openGauss #设置访问权限 chmod 755 -R /opt/software
- 不建议把安装包的存放目录规划到 openGauss 用户的根目录或其子目录下,可能导致权限问题。
- openGauss 用户须具有/opt/software/openGauss 目录的读写权限。
在安装包所在的目录下,解压安装包 openGauss-2.0.0-CentOS-64bit-all.tar.gz。安装包解压后,会有 om 安装包和 server 安装包。继续解压 om 安装包,会在/opt/software/openGauss 路径下自动生成 script 子目录,并且在 script 目录下生成 gs_preinstall 等各种 om 工具脚本。
建议跟我目录放的一样,不然容易出问题,解压命令如下:
cd /opt/software/openGauss tar -zxvf openGauss-2.0.0-CentOS-64bit-all.tar.gz tar -zxvf openGauss-2.0.0-CentOS-64bit-om.tar.gz
在该目录下获取 XML 文件 script/gspylib/etc/conf/cluster_config_template.xml,重命名为 cluster_config.xml 放在/opt/software/openGauss/下,并将以下模板修改为自己的信息放入 xml 文件,第 37 行的 15400 表示设置了数据库的端口号,以下模板只需要更改两点:ip 地址和主机名:
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="dbCluster" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="node1_hostname" /> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/var/log/omm" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" /> <!-- 数据库工具目录--> <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile" /> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="***.***.***.***"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="node1_hostname"> <!-- 节点1的主机名称 --> <PARAM name="name" value="node1_hostname"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="***.***.***.***"/> <PARAM name="sshIp1" value="***.***.***.***"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> </DEVICELIST> </ROOT>
根据我的 ip 地址 ... 和我的主机名 vector 更改之后文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="dbCluster" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="vector" /> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/var/log/omm" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" /> <!-- 数据库工具目录--> <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" /> <!-- 数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile" /> <!-- 节点IP,与数据库节点名称列表一一对应 --> <PARAM name="backIp1s" value="***.***.***.***"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- 节点1上的部署信息 --> <DEVICE sn="vector"> <!-- 节点1的主机名称 --> <PARAM name="name" value="vector"/> <!-- 节点1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="***.***.***.***"/> <PARAM name="sshIp1" value="***.***.***.***"/> <!--dbnode--> <PARAM name="dataNum" value="1"/> <PARAM name="dataPortBase" value="15400"/> <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> </DEVICELIST> </ROOT>
执行以下命令准备安装环境:
cd /opt/software/openGauss/script ./gs_preinstall -U omm -G dbgrp -L -X /opt/software/openGauss/cluster_config.xml
如上表示预安装成功!
2.2 执行安装
2.2.1 检查
检查安装包和 openGauss 配置文件在规划路径下是否已存在,如果没有,重新执行预安装,确保预安装成功,再执行以下步骤。
2.2.2 切换用户
登录到 openGauss 的主机,并切换到 omm 用户:
su omm
omm 指的是前置脚本 gs_preinstall 中-U 参数指定的用户。
安装脚本 gs_install 必须以前置脚本中指定的 omm 执行,否则,脚本执行会报错。
2.2.3 安装
使用 gs_install 安装 openGauss。
gs_install -X /opt/software/openGauss/cluster_config.xml
/opt/software/openGauss/cluster_config.xml 为 openGauss 配置文件的路径。在执行过程中,用户需根据提示输入数据库的密码,密码具有一定的复杂度,为保证用户正常使用该数据库,请记住输入的数据库密码。
设置的密码要符合复杂度要求:
最少包含 8 个字符。
不能和用户名、当前密码(ALTER)、或当前密码反序相同。
至少包含大写字母(A-Z),小写字母(a-z),数字,非字母数字字符(限定为~!@#$%^&*()-_=+|[{}];:,<.>/?)四类字符中的三类字符。
执行如下命令检查数据库状态是否正常:
gs_om -t status
cluster_state 显示“Normal”表示数据库可正常使用。
如首次安装数据库不成功,则卸载后重新安装,卸载方式如下:
gs_uninstall ‐‐delete‐data
2.2.4 初始化数据库
使用 SQL 语句创建数据库 database 时,指定数据库的字符集为 GBK。
#后面跟的是端口号,我的是15400 gsql -d postgres -p 15400
CREATE DATABASE mydb WITH ENCODING 'GBK' template = template0;
显示如下信息:
CREATE DATABASE
创建 schema:
CREATE SCHEMA tpcds;
创建表:
CREATE TABLE tpcds.warehouse_t1 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) );
查看表信息:
insert into tpcds.warehouse_t1(w_warehouse_sk,w_warehouse_id) values(12,'000001'); insert into tpcds.warehouse_t1(w_warehouse_sk,w_warehouse_id) values(25,'000002'); select w_warehouse_sk, w_warehouse_id from tpcds.warehouse_t1;
向数据库中添加数据之后查看:
如果不知道自己的端口号,可根据以下方式查看:
查看自己的 cluster_config.xml 文件,查看自己将端口号设置为了多少.
使用如下命令查看:
gs_om -t status --detail cd /opt/huawei/install/data/dn
2.3 JDBC 连接数据库
2.3.1 准备 java 环境
查看 centos 的 java 环境,centos 自带 java1.8,需要安装配套的 javac,注意要是 1.8.0 版。
yum install java-1.8.0-openjdk-devel.x86_64
下载驱动包 2.0.0 版本postgresql.jar,放在路径/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/lib/ext 下:
cp postgresql.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/lib/ext
测试是否具备运行 java 代码的环境:
java -version javac -version
已具备运行环境!
2.3.2 准备好连接的 java 代码
记得替换成你设置的用户名、密码、端口号,如果你是按照我前面的操作,用户名应该是 omm,
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 test{//keep public static Connection getConnect(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。将15400替换为自己的端口号 String sourceURL = "jdbc:postgresql://***.***.***.***:15400/postgres"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } 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; }; //try to connect public static void main(String[] args) { // TODO Auto-generated method stub Connection conn = getConnect("user", "password");//replace by my user and password //BatchInsertData(conn); try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
2.3.3 配置服务端远程连接
以操作系统用户 omm 登录数据库。
配置 listen_addresses,即远程客户端连接使用的数据库主节点 ip 或者主机名。
使用如下命令查看数据库主节点目前的 listen_addresses 配置。
gs_guc check -I all -c "listen_addresses"
使用如下命令把要查询出的 ip 追加到 listen_addresses 后面,多个配置项之间用英文逗号分隔。例如,追加 ip 地址 10.11.12.13。
gs_guc set -I all -c "listen_addresses='localhost,10.11.12.13'"
执行如下命令重启 openGauss
gs_om -t stop && gs_om -t start
2.3.4 连接
首先需要启动数据库
su omm gs_om -t start
运行 java 代码
javac test.java java test
2.3.5 操纵数据
使用如下 java 代码访问并对表中数据进行查询(记得替换用户、密码和端口):
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.sql.CallableStatement; import java.sql.ResultSet; import java.sql.SQLException; public class gausstest{//keep public static Connection getConnect(String username, String passwd) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:postgresql://***.***.***.***:15400/postgres"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } 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; }; //try to connect public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub Connection conn = getConnect("user", "password");//replace by my user and password //BatchInsertData(conn); Statement st = conn.createStatement(); String sql = "select w_warehouse_sk,w_warehouse_id from tpcds.warehouse_t1"; ResultSet rs = st.executeQuery(sql); while(rs.next()) { int w_warehouse_sk = rs.getInt("w_warehouse_sk"); String w_warehouse_id = rs.getString("w_warehouse_id"); System.out.println("w_warehouse_sk = " + w_warehouse_sk + "; w_warehouse_id = " + w_warehouse_id); } try { conn.close(); st.close(); rs.close(); } catch (SQLException e) { e.printStackTrace(); } } }
3. 遇到的问题
我感觉我把所有能遇到的问题都遇到了,最后成功是重装一遍,什么问题没遇到。
- 3.1 使用 gs_ctl 提示找不到命令
如下图所示:

参看博客Linux 下解决命令未找到的问题 - ML。 - 博客园 (cnblogs.com),对于本问题主要使用的命令是:
#进入管理员模式
su
which gs_ctl

接下来需要做的是把查找出的路径直接链接到/usr/bin 下。操作如下:
ln -s xxx/xxx /usr/bin
以上 xxx 代表你查出来的路径。

3.2 gs_om 命令找不到
不得不说极简版安装包下没有 gs_om 文件,我搜遍了也没有,在企业版中,我因为懒得重装把我同学下载的企业版中的 gs_之类的文件全拷过来了,但是后来遇到了其他问题,我又重装了,不知道我这个操作最终会带来什么影响。
3.3 sudo 和 su 都用不了
sudo chmod -R 777 / 修改根目录权限问题修复,参考了 关于不小心 777 导致没法 sudo 权限后的修改解决办法_空木格子的博客-CSDN 博客
我应该是因为 sudo 用不了提示 sudo: must be setuid root,然后我进入根目录下修改了某个文件为 777,直接导致 su 也用不了。这下好了,要用 su 让我先用 sudo 修改相关文件,要用 sudo 让我先用 su 修改文件!
解决这个问题需要先进入安全模式,进入方法为:在开机的过程中按 shift 或 ESC 键,好像在系统中按 F1 还是 F2 也可以。
此时,已经进入到具有 root 权限的字符界面,输入以下命令解决了。
ls -l /usr/bin/sudo chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo
3.4 预安装失败
本问题先参考了链接openGaussDB 初体验(上) - 云+社区 - 腾讯云 (tencent.com)以下内容,但是没有解决。
我解决这个问题的过程是这样的:找到虚拟网络编辑器,电脑连了自己的热点(我听我同学说她的用校园网就不行),然后还原默认设置:
然后配置了静态的 ip 地址,参考了 CentOS 7 连接不到网络解决方法(设置静态 ip)_gaokcl 的博客-CSDN 博客_centos7 无法连接网络。但是神奇的是,这样就可以了。不过后来还是重装了。
3.5 重装 openGauss 时端口被占用
报错:[GAUSS-50601] : The port [15400] is occupied or the ip address is incorrectl,有两种方法:
修改 xml 文件中的端口号
杀掉占用端口的进程
3.6 右上角网络连接图标消失
参考了centos7 右上角网络连接图标消失_shuest 的博客-CSDN 博客_centos7 右上角没有网络图标
chkconfig network off chkconfig network on service NetworkManager stop service NetworkManager start
但是有可能遇到后两条命令用不了,然后又去查怎么办,最后也没解决,我重装了。累了累了。
3.7 循环显示登录界面无法进入
看图吧,我最后又进安全模式解决的,最后修改/etc/selinux/config 配置,将 SELINUX 选项由 SELINUX=enforcing 改成 SELINUX=disabled,重启系统后发现就可以正常登陆系统了:
3.8 Connection refused
首先需要启动数据库,不启动数据库会出现如下错误:
未设置服务端远程连接也会出现以上问题,见 2.3.3
3.9 加载驱动出现问题
以下是开发流程:
驱动需要按照 2.3.1 所说,放在指定文件夹下,不然在加载驱动的时候会出现问题。
3.10 unreported exception SQLException
在本地编译 java 服务的时候,编译报错:未报告的异常错误; 必须对其进行捕获或声明以便抛出。
添加代码 throw SQLException 即可: