【参赛作品98】Go语言连接openGauss环境搭建过程(含OG安装)

作者:葛二萌

1.前言

本文共分为openGauss单机版安装部分和连接环境搭建部分,提供了通过go语言来连接openGauss的一种方案。openGauss现在也有了基于go的驱动,但是我觉得ODBC的方式更为通用一些,也不应被丢弃,因此本文使用go通过ODBC来连接openGauss。

硬件及软件环境:

硬件环境:虚拟机的内存8GB,4核心CPU,900G磁盘(非必须)软件环境:CentOS7.6数据库版本:opengauss2.0企业版:openGauss-2.0.0-CentOS-64bit-all.tar.gz

2.openGauss单机版安装:

2.1. 关闭防火墙

#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
#检查防火墙是否关闭。
systemctl status firewalld

说明:

若防火墙状态显示为active (running),则表示防火墙未关闭。

若防火墙状态显示为inactive (dead),则无需再关闭防火墙。

2.2. 设置时区和时间将各数据库节点的时区设置为相同时区,可以将/usr/share/zoneinfo/目录下的时区文件拷贝为/etc/localtime文件。

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

2.3. 关闭SELinux 

[[email protected] ~]#

getenforce
sed -i 's/^SELINUX=./SELINUX=disabled/’ /etc/selinux/config
setenforce 0
getenforce
#检查
cat /etc/selinux/config|grep SELINUX

输出:# SELINUX= can take one of these three values:SELINUX=disabled# SELINUXTYPE= can take one of three values:

SELINUXTYPE=targeted[[email protected] ~]#

2.4. 修改/etc/hosts

#添加一行

cat >>/etc/hosts <<EOF
192.168.183.28 node1
EOF

2.5. 配置库路径

cat>> /etc/profile<<EOF
export LD_LIBRARY_PATH=/opt/software/openGauss/script/gspylib/clib:KaTeX parse error: Expected 'EOF', got '&' at position 41: …></pre><h2>2.6.&̲nbsp;<b>关闭</b><… python3 -V

Python 3.6.8

其他软件包,如需要可以安装(也可以直接使用安装):

yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel
yum install openssl -y
yum install -y java-1.8.0-openjdk* psmisc bzip2 python3 python3-devel lksctp*
reboot #重新启动服务器

<o:p></o:p>

2.10. 创建安装包的存放目录

mkdir -p /opt/software/openGauss
chmod 755 -R /opt/software

2.11. 下载openGauss数据库软件下载地址为:https://opengauss.org/zh/download.html

下载完成后上传到centos中。 

2.12. 解压缩openGauss DBMS介质

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

2.13. 创建XML文件下面是xml文件官方模板,一般只需要改一下自己centos机器的IP

cat > clusterconfig.xml<<EOF 
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <!-- openGauss整体信息 -->
    <CLUSTER>
        <!-- 数据库名称 -->
        <PARAM name="clusterName" value="dbCluster" />
        <!-- 数据库节点名称(hostname) -->
        <PARAM name="nodeNames" value="node1" />
        <!-- 数据库安装目录-->
        <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="192.168.183.28"/>
    </CLUSTER>
    <!-- 每台服务器上的节点部署信息 -->
    <DEVICELIST>
        <!-- 节点1上的部署信息 -->
        <DEVICE sn="node1">
            <!-- 节点1的主机名称 -->
            <PARAM name="name" value="node1"/>
            <!-- 节点1所在的AZ及AZ优先级 -->
            <PARAM name="azName" value="AZ1"/>
            <PARAM name="azPriority" value="1"/>
            <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
            <PARAM name="backIp1" value="192.168.183.28"/>
            <PARAM name="sshIp1" value="192.168.183.28"/>
    <!--dbnode-->
    <PARAM name="dataNum" value="1"/>
    <PARAM name="dataPortBase" value="26000"/>
    <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/>
            <PARAM name="dataNode1_syncNum" value="0"/>
        </DEVICE>
    </DEVICELIST>
</ROOT>
EOF

2.14. 检查环境变量

echo KaTeX parse error: Expected 'EOF', got '&' at position 115: …wps1.jpg"><o:p>&̲nbsp;</o:p><img… cd /opt/software/openGauss/script
[[email protected] script]$ cp …/clusterconfig.xml .
[[email protected] script]$ gs_install -X /opt/software/openGauss/script/clusterconfig.xml

Parsing the configuration file.
Check preinstall on every node.
Successfully checked preinstall on every node.
Creating the backup directory.
Successfully created the backup directory.
begin deploy…
Installing the cluster.
begin prepare Install Cluster…
Checking the installation environment on all nodes.
begin install Cluster…
Installing applications on all nodes.
Successfully installed APP.
begin init Instance…
encrypt cipher and rand files for database.
Please enter password for database:[email protected]
Please repeat for database:[email protected]
begin to create CA cert files
The sslcert will be generated in /opt/huawei/install/app/share/sslcert/om
Cluster installation is completed.
Configuring.
Deleting instances from all nodes.
Successfully deleted instances from all nodes.
Checking node configuration on all nodes.
Initializing instances on all nodes.
Updating instance configuration on all nodes.
Check consistence of memCheck and coresCheck on database nodes.
Configuring pg_hba on all nodes.
Configuration is completed.
Successfully started cluster.
Successfully installed application.
end deploy…

查看数据库状态:

[[email protected] script]$ gs_om -t status

会出现以下内容:

-----------------------------------------------------------------------

cluster_name    : dbCluster
cluster_state : Normal
redistributing : No

[[email protected] script]

<

/

c

o

d

e

>

<

/

p

r

e

>

<

p

>

<

b

>

<

/

b

>

<

/

p

>

<

p

r

e

>

<

c

o

d

e

>

[

o

m

m

@

n

o

d

e

1

d

b

1

]

</code></pre><p><b>启动数据库(安装完默认已经启动):</b></p><pre><code>[[email protected] db1]

</code></pre><p><b></b></p><pre><code>[omm@node1db1] gs_om -t start

Starting cluster.

=========================================

[SUCCESS] node1:[2021-04-01 16:50:13.969][29784][][gs_ctl]: gs_ctl started,datadir is /opt/huawei/install/data/dn<o:p></o:p>

[2021-04-01 16:50:13.974][29784][][gs_ctl]:  another server might be running; Please use the restart command

=========================================Successfully started.使用omm用户执行下面的操作。

登录到数据库,

gsql -d postgres -p 26000 -r
#执行上条命令会出现以下提示内容。gsql ((openGauss 2.0.0 build 78689da9) compiled at 2021-03-31 21:04:03 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type “help” for help.

其他常见的基本命令

q  #退出会话
gs_om -t stop #关闭数据库
gs_om -t restart #重启数据库

更多操作使用说明见官方文档:https://opengauss.org/zh/docs/2.1.0/docs/Quickstart/Quickstart.html

3. 连接环境搭建

3.1 安装go语言环境

安装go语言,安装包下载地址:https://dl.google.com/go/go1.17.5.linux-amd64.tar.gz

上传压缩包后解压:   tar -C /usr/local/ -xvf go1.11.4.linux-amd64.tar.gz  

配置环境变量

vi /etc/profile

追加以下内容:

export PATH=$PATH:/usr/local/go/bin

让环境变量配置生效:

source /etc/profile

验证go是否安装成功:

go version

出现以下内容代表安装成功(我装的是1.16版本,以你下载的安装包版本为准):

3.2 搭建unixODBC环境

下载安装unixODBC:
yum install unixODBC
yum install unixODBC-devel #非必须

下载openGauss ODBC驱动ODBC_2.1.0:https://opengauss.org/zh/download.html

下载之后上传到centos机器上/soft路径(该路径不是必须) ,把驱动拷贝到指定目录下:

cd /soft
tar -xzvf openGauss-2.1.0-ODBC.tar.gz
cp lib/* /usr/local/lib
cp odbc/lib/* /usr/local/lib

安装完unixODBC后,/etc目录下会有一个文件: odbcinst.ini  ,接下来配置这个文件

vim odbcinst.ini

将下列内容添加进去:

[openGauss]
Driver64=/usr/local/lib/psqlodbcw.so
setup=/usr/local/lib/psqlodbcw.so

另外在/etc下编辑odbc.ini(如没有则新建):

vim /etc/odbc.ini

将下列内容拷贝进去:

[openGaussODBC]
Driver=openGauss
Servername=192.168.183.28
Database=postgres
Username=gem
Password[email protected]1234
Port=26000
DatabaseName=postgres

注,上面要填自己的IP,数据库用户名和口令,且不能是omm初始用户。

到此配置基本完成了,下面验证odbc是否可以openGauss(数据库要开启):

isql -v openGaussODBC

若出现以下内容代表配置ok,连接没有问题:

3.3 编写go语言通过ODBC连接openGauss的测试脚本并执行验证

vim test_gauss.go :

package main
import (
“database/sql”
“fmt”
_ “odbc/driver”
)

func main() {
fmt.Printf("%sn", “创建数据库链接”)
conn, err := sql.Open(“odbc”,“DSN=openGaussODBC;UID=gem;[email protected])
if err != nil {
fmt.Println(“链接错误”)
return
}
defer conn.Close()
fmt.Printf("%sn", “构建查询”)
stmt, err := conn.Prepare(“select 666;”)
if err != nil {
fmt.Println(“查询异常:”, err)
return
}
defer stmt.Close()
row, err := stmt.Query()
if err != nil {
fmt.Println(“查询错误:”, err)
}
defer row.Close()
fmt.Printf("%sn", “数据集显示”)
for row.Next() {
var id int
if err := row.Scan(&id); err == nil {
fmt.Println(id)
}

在脚本路径下执行测试:

go run test_gauss.go
若出现以下结果表明连接成功。



4.总结

个人认为,比较容易出错的点是,虚拟机内存要大于等于8GB,unixODBC两个配置文件odbc.ini和odbcinst.ini的配置稍麻烦,最后,数据库一定要start才能连接成功,个人有一次犯了一次这个错误,虽然是很浅显的道理哈哈。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>