奇思妙想——通过Go语言自制安装openGauss二进制程序

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 奇思妙想——通过Go语言自制安装openGauss二进制程序

前言


巧妙利用go语言自制openGauss安装二进制程序,经测试15s即可安装完成

一、安装go语言环境

1. 下载解压go

[root@node1 ~]# wget https://golang.google.cn/dl/go1.19.1.linux-amd64.tar.gz
[root@node1 ~]# tar -zxvf go1.19.1.linux-amd64.tar.gz -C /usr/local

2. 添加环境变量

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

3. 测试运行

package main
import fmt
func main(){
fmt.Println("hello,world!")
}
[root@node1 ~]# go run test.go
hello,world!

二、 openGauss安装 (15s安装完成)

1. 源代码

[root@node1 ~]# cat gaussdb.go
package main
import (
  "fmt"
  "io/ioutil"
  "os/exec"
)
func main() {
  cmd := exec.Command("/bin/bash", "-c", `useradd omm ;echo "Enmo@123" | passwd --stdin omm > /dev/null ;mkdir -p /opt/mogdb/software;chown -R omm:omm /opt/;tar -xf  openGauss-3.1.0-CentOS-64bit.tar.bz2 -C /opt/mogdb/software; su - omm -c "echo 'export GAUSSHOME=/opt/mogdb/software'  >> /home/omm/.bashrc ;echo 'export PATH=\$GAUSSHOME/bin:\$PATH' >> /home/omm/.bashrc ;echo 'export LD_LIBRARY_PATH=\$GAUSSHOME/lib:\$LD_LIBRARY_PATH' >> /home/omm/.bashrc;source /home/omm/.bashrc;gs_initdb --pgdata=/opt/mogdb/data --nodename=primary --pwpasswd=Enmo@123 --encoding=UTF-8 --locale=en_US.UTF-8 > /dev/null ;echo \"port=26000\" >> /opt/mogdb/data/postgresql.conf;echo \"listen_addresses = '0.0.0.0'\" >> /opt/mogdb/data/postgresql.conf;echo \"password_encryption_type = 0\" >> /opt/mogdb/data/postgresql.conf;echo \"log_directory = 'pg_log'\" >> /opt/mogdb/data/postgresql.conf;echo \"remote_read_mode=non_authentication\" >> /opt/mogdb/data/postgresql.conf;echo \"host all all 0.0.0.0/0 md5\" >> /opt/mogdb/data/pg_hba.conf;gs_ctl start -D /opt/mogdb/data > /dev/null ;gsql -d postgres -p 26000 -c'select version();select pg_postmaster_start_time();';echo -e 'data_user is omm ! \ndata_port is 26000 ! \ndata_path is /opt/mogdb/data ! \ndata_soft is /opt/mogdb/software !'"`)
//  cmd := exec.Command("/bin/bash", "-c", `df -h;ls`)
  //创建获取命令输出管道
  stdout, err := cmd.StdoutPipe()
  if err != nil {
    fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)
    return
  }
  //执行命令
  if err := cmd.Start(); err != nil {
    fmt.Println("Error:The command is err,", err)
    return
  }
  //读取所有输出
  bytes, err := ioutil.ReadAll(stdout)
  if err != nil {
    fmt.Println("ReadAll Stdout:", err.Error())
    return
  }
  if err := cmd.Wait(); err != nil {
    fmt.Println("wait:", err.Error())
    return
  }
  fmt.Printf("stdout:\n\n %s", bytes)
}

2. go run 测试运行

  • 准备安装包
[root@node1 ~]# ls openGauss-3.1.0-CentOS-64bit.tar.bz2 gaussdb.go
gaussdb.go  openGauss-3.1.0-CentOS-64bit.tar.bz2
  • go run
[root@node1 ~]# go run gaussdb.go
stdout:
                                                                        version
------------------------------------------------------------------------------------------------------------------------------------------------------
 (openGauss 3.1.0 build 2c0ccaf9) compiled at 2022-09-25 19:32:58 commit 0 last mr   on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)
   pg_postmaster_start_time
-------------------------------
 2022-09-28 13:38:28.550462+08
(1 row)
data_user is omm !
data_port is 26000 !
data_path is /opt/mogdb/data !
data_soft is /opt/mogdb/software !
  • 连接测试
[root@node1 ~]# su - omm
Last login: Wed Sep 28 13:39:38 CST 2022
[omm@node1 ~]$ gsql -d postgres -p26000 -r
gsql ((openGauss 3.1.0 build 2c0ccaf9) compiled at 2022-09-25 19:32:58 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=# select version();
                                                                       version
------------------------------------------------------------------------------------------------------------------------------------------------------
 (openGauss 3.1.0 build 2c0ccaf9) compiled at 2022-09-25 19:32:58 commit 0 last mr   on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)
openGauss=# \q
[omm@node1 ~]$ logout
  • go build 二进制
[root@node1 ~]# go build gaussdb.go
[root@node1 ~]# ls gaussdb openGauss-3.1.0-CentOS-64bit.tar.bz2 gaussdb.go
gaussdb  gaussdb.go  openGauss-3.1.0-CentOS-64bit.tar.bz2
  • 清理环境
[root@node1 ~]# cat a.sh
pkill -9 gaussdb
rm -rf /opt/mogdb/*
userdel -r omm
[root@node1 ~]# sh a.sh
  • 安装
[root@node1 ~]# date;./gaussdb;date
Wed Sep 28 13:53:12 CST 2022
stdout:
                                                                        version
------------------------------------------------------------------------------------------------------------------------------------------------------
 (openGauss 3.1.0 build 2c0ccaf9) compiled at 2022-09-25 19:32:58 commit 0 last mr   on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)
   pg_postmaster_start_time
-------------------------------
 2022-09-28 13:53:27.034021+08
(1 row)
data_user is omm !
data_port is 26000 !
data_path is /opt/mogdb/data !
data_soft is /opt/mogdb/software !
Wed Sep 28 13:53:27 CST 2022
  • 连接测试
[root@node1 ~]# su - omm
Last login: Wed Sep 28 13:53:19 CST 2022
[omm@node1 ~]$ gsql -d postgres -p26000 -r
gsql ((openGauss 3.1.0 build 2c0ccaf9) compiled at 2022-09-25 19:32:58 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=# select version();
                                                                       version
------------------------------------------------------------------------------------------------------------------------------------------------------
 (openGauss 3.1.0 build 2c0ccaf9) compiled at 2022-09-25 19:32:58 commit 0 last mr   on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)
openGauss=# \q

总结


复杂好用的程序往往都是简单的逻辑一步一步累加的,通过考虑多样的场景,多样的使用环境,使代码趋于完善。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
15天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
34 2
|
13天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
24 2
|
13天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
27 2
|
2天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
10 2
|
3天前
|
Go 调度 开发者
Go语言中的并发编程:深入理解goroutines和channels####
本文旨在探讨Go语言中并发编程的核心概念——goroutines和channels。通过分析它们的工作原理、使用场景以及最佳实践,帮助开发者更好地理解和运用这两种强大的工具来构建高效、可扩展的应用程序。文章还将涵盖一些常见的陷阱和解决方案,以确保在实际应用中能够避免潜在的问题。 ####
|
3天前
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
14 3
|
3天前
|
测试技术 Go 索引
go语言通过 for 循环遍历
go语言通过 for 循环遍历
14 3
|
5天前
|
安全 Go 数据处理
Go语言中的并发编程:掌握goroutine和channel的艺术####
本文深入探讨了Go语言在并发编程领域的核心概念——goroutine与channel。不同于传统的单线程执行模式,Go通过轻量级的goroutine实现了高效的并发处理,而channel作为goroutines之间通信的桥梁,确保了数据传递的安全性与高效性。文章首先简述了goroutine的基本特性及其创建方法,随后详细解析了channel的类型、操作以及它们如何协同工作以构建健壮的并发应用。此外,还介绍了select语句在多路复用中的应用,以及如何利用WaitGroup等待一组goroutine完成。最后,通过一个实际案例展示了如何在Go中设计并实现一个简单的并发程序,旨在帮助读者理解并掌
|
4天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
17 3
|
8天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
31 4