作者:luooofan
VMware+CentOS7.6+OpenGauss2.0.1极简版安装
环境准备
Arch:x86-64
OS:Win11
VMware:16.1.2
安装CentOS 7.6
CentOS镜像:CentOS-7.6.1810
VMware中创建新的虚拟机时:1CPU 2Core 4GB NAT 其他选择默认配置即可
CentOS引导安装:
-
语言选择英语
-
打开网络
-
设置时区
-
安装位置和分区
-
软件选择最小安装(也可以选带GUI安装)
-
开始安装
-
设置ROOT密码和新建用户
-
安装完成后重启
配置CentOS7.6
-
简单配置
设置字体
setfont lat4-19
重新安装VMware Tools(Optional)(对于无GUI的应该没啥用,可以在本地ssh到vmware中就可以复制粘贴了)
-
使用MobaXterm SSH连接
-
yum源更新
yum update
-
安装Python3.6
yum install -y python36
-
安装其他依赖
yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel patch
-
关闭防火墙和SeLinux,然后重启,重连ssh
-
设置字符集参数:在/etc/profile文件中添加”export LANG=XXX”(XXX为Unicode编码)
-
检查设置时区
-
关闭swap交换内存(Optional)
swapoff -a
-
关闭RemovelPC,CentOS操作系统默认为关闭
开始安装
-
创建用户组dbgrp、用户omm,将该用户添加至root组,并修改用户omm的密码
-
配置共享文件夹,把openGauss的安装包(2.0.1 极简版)放进去
-
以root用户创建软件目录,以omm用户登录解压
-
进入simpleInstall目录,执行安装脚本
sh install.sh -w xxxx
出现如下错误:
解决办法:
在/etc/sysctl.conf中加入语句
kernel.sem = 250 32000 100 999
,然后执行sysctl -p
-
执行完安装脚本之后:
openGauss端口号默认为5432
默认生成名称为postgres的数据库
数据库目录安装路径/opt/software/openGauss/data/single_node,其中/opt/software/openGauss为解压包路径,data/single_node为新创建的数据库节点目录。
-
使用ps和gs_ctl查看进程是否正常(如果没有找到gs_ctl,配置环境变量即可
export PATH=/opt/software/openGauss/bin:$PATH
,如果缺失lib则配置LD_LIBRARY_PATH
)如果ps里没有的话可以先重启一下:
gs_ctl restart -D /opt/software/openGauss/data/single_node -Z single_node
连接与使用
Gsql方式
数据库安装完成后,默认生成名称为postgres的数据库,默认端口是5432。
因为omm用户是管理员用户,因此系统显示“DBNAME=#”。若使用普通用户身份登录和连接数据库,系统显示“DBNAME=>”。
“Non-SSL connection”表示未使用SSL方式连接数据库。如果需要高安全性时,请使用SSL连接。
查看对象操作:
- 查看帮助信息:\?
- 列举数据库:\l
- 列举表:\dt
- 查看表结构:\d tablename
- 切换数据库:\c dbname
- 列举schema:\dn
- 查看索引:\di
远程连接前的准备
-
配置数据库用户和权限(omm不能用于远程连接):
-
修改数据库的pg_hba.conf文件,给要远程连接的主机/用户放行(这里好像不能用gs_auc命令完成,直接编辑文件即可):
-
使用gs_ctl将策略生效:
gs_ctl reload -D ./data/single_node
-
修改postgresql.conf中的监听地址:
listen_addresses = '*'
,默认只监听local,改后包括了要进行远程连接的ip地址就行 -
重启数据库生效:
gs_ctl restart -D ./data/single_node
如果之后进行JDBC连接的时候出现如下图中的目标地址拒绝连接的异常,可能就是这一步出问题了
ODBC/JDBC
根据文档JDBC应该是都支持,ODBC支持受限
因为是在CentOS 7.6上装的openGauss,所以选择JDBC。
JDBC Connectors可以不用从源码构建,直接从官网下载页下载即可。
在Win上VSCode中配置好JAVA环境,需要Java11和Java8,配置该项目的JDK Runtime和Referenced Libraries(把下载解压得到的postgresql.jar加进去)
代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.Properties;
class openGaussTest {
public static void main(String[] args) {
System.out.println("=START TEST=");
<span class="hljs-type">Connection</span> <span class="hljs-variable">conn</span> <span class="hljs-operator">=</span> getConnect(<span class="hljs-string">"luooofan"</span>, <span class="hljs-string">"Luooofan1"</span>);
<span class="hljs-type">Statement</span> <span class="hljs-variable">stmt</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
<span class="hljs-keyword">try</span> {
stmt = conn.createStatement();
<span class="hljs-type">ResultSet</span> <span class="hljs-variable">rs</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
<span class="hljs-keyword">try</span> {
rs = stmt.executeQuery(
<span class="hljs-string">"select pro_c_id, pro_id, pro_status, pro_quantity, pro_income, pro_purchase_time from property;"</span>);
<span class="hljs-keyword">while</span> (rs.next()) {
<span class="hljs-type">int</span> <span class="hljs-variable">pro_c_id</span> <span class="hljs-operator">=</span> rs.getInt(<span class="hljs-number">1</span>);
<span class="hljs-type">int</span> <span class="hljs-variable">pro_id</span> <span class="hljs-operator">=</span> rs.getInt(<span class="hljs-number">2</span>);
<span class="hljs-type">String</span> <span class="hljs-variable">pro_status</span> <span class="hljs-operator">=</span> rs.getString(<span class="hljs-number">3</span>);
<span class="hljs-type">int</span> <span class="hljs-variable">pro_quantity</span> <span class="hljs-operator">=</span> rs.getInt(<span class="hljs-number">4</span>);
<span class="hljs-type">int</span> <span class="hljs-variable">pro_income</span> <span class="hljs-operator">=</span> rs.getInt(<span class="hljs-number">5</span>);
<span class="hljs-type">Timestamp</span> <span class="hljs-variable">pro_pruchase_time</span> <span class="hljs-operator">=</span> rs.getTimestamp(<span class="hljs-string">"pro_purchase_time"</span>);
System.out.printf(<span class="hljs-string">"%4d %4d %4s %4d %4d "</span>, pro_c_id, pro_id, pro_status, pro_quantity, pro_income);
System.out.println(pro_pruchase_time);
}
} <span class="hljs-keyword">catch</span> (SQLException e) {
<span class="hljs-keyword">if</span> (rs != <span class="hljs-literal">null</span>) {
<span class="hljs-keyword">try</span> {
rs.close();
} <span class="hljs-keyword">catch</span> (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
stmt.close();
} <span class="hljs-keyword">catch</span> (SQLException e) {
<span class="hljs-keyword">if</span> (stmt != <span class="hljs-literal">null</span>) {
<span class="hljs-keyword">try</span> {
stmt.close();
} <span class="hljs-keyword">catch</span> (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
<span class="hljs-keyword">try</span> {
conn.close();
} <span class="hljs-keyword">catch</span> (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnect(String username, String passwd) {
// 驱动类
String driver = “org.postgresql.Driver”;
// 数据库连接描述符
String sourceURL = “jdbc:postgresql://192.168.193.129:5432/finance”;
Connection conn = null;
<span class="hljs-keyword">try</span> {
<span class="hljs-comment">// 加载驱动</span>
Class.forName(driver);
} <span class="hljs-keyword">catch</span> (Exception e) {
e.printStackTrace();
<span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}
<span class="hljs-keyword">try</span> {
<span class="hljs-comment">// 创建连接</span>
conn = DriverManager.getConnection(sourceURL, username, passwd);
System.out.println(<span class="hljs-string">"Connection succeed!"</span>);
} <span class="hljs-keyword">catch</span> (Exception e) {
e.printStackTrace();
<span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
}
<span class="hljs-keyword">return</span> conn;
}
}
NOTE:
-
要执行什么操作就要赋予用户什么权限,代码中要对property表查询,故:
grant select on table property to luooofan;
-
因为CentOS没配置中文编码,所以直接在CentOS上查找的话应该无法显示中文,不过这并不影响在win 上远程连接然后查询并显示
References