通过Go语言自制安装openGauss二进制程序
文章目录
- 前言
- 一、安装go语言环境
- 二、 openGauss安装 (15s安装完成)
- 总结
前言
巧妙利用go语言自制openGauss安装二进制程序,经测试15s即可安装完成。
一、安装go语言环境
- 下载解压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
- 添加环境变量
export PATH=$PATH:/usr/local/go/bin - 测试运行
package main
import fmt
func main(){
fmt.Println("hello,world!")
}
[root@node1 ~]# go run test.go
hello,world!
二、 openGauss安装 (15s安装完成)
- 源代码
[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)
}
- 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
总结
复杂好用的程序往往都是简单的逻辑一步一步累加的,通过考虑多样的场景,多样的使用环境,使代码趋于完善。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
计算存储分离在京东云消息中间件JCQ上的应用
作者:田寄远 JCQ全名JD Cloud Message Queue,是京东云自研、具有CloudNative特性的分布式消息中间件。 JCQ设计初衷即为适应云特性的消息中间件;具有高可用、数据可靠性、副本物理隔离、服务自治、健康状态汇报、少运维或无运维、容器部署、弹性伸缩、租户隔离、按量付费、云账户体系、授权等特性。 演进过程 2017年中开始开发JCQ 1.0版本,2018年11月正式GA上线对外售卖,1.0版本中Topic受限于单台服务器限制,满足不了用户超大规格topic的需求。 2019年4月 JCQ 2.0 正式上线,主要新增特性是topic 扩缩容能力、热点Topic在Broker间的负载均衡、热点Broker的流量转移。 2019年7月JCQ做了一次大的架构演进——计算存储分离,大版本号为JCQ 3.0, 于2019年底上线。计算存储分离对架构带来了比较明显的好处,解决了日常遇到许多的痛点问题。下文详细介绍此次演进带来的好处及解决的痛点问题。 升级影响范围尽可能小 在JCQ2.0中计算模块与存储模块处于同一个进程,升级计算模块势必将存储模块一起升级。而存储模块重启是比较...
-
下一篇
MiniFramework 2.9.6 版本发布,轻量级的 PHP 开发框架
2022 年 12 月 19 日,MiniFramework 发布了 2.9.6 版本,主要变化如下: 新增常量 LOG_MAX_FILES,默认值30,用于定义日志文件存储的最大数量。 新增 Mini\Base\Model 类的 distinct() 方法,用于链式操作支持 SQL 的 DISTINCT 语句。 新增 Mini\Base\Model 类的 having() 方法,用于链式操作支持 SQL 的 HAVING 语句。 新增 Mini\Base\Model 类的 page() 方法,帮助开发者更简单地实现分页功能。 改进 Mini\Base\Model 类的 select() 方法,对于传入参数的字符大小写不再做限制。 改进 Mini\Base\Log 类的 writeToFile()方法,根据常量 LOG_MAX_FILES 定义的数量控制日志文件个数。 改进 Mini\Db\Mysql 类的 query() 方法,对于传入参数的字符大小写不再做限制。 (了解详情:https://gitee.com/jasonwei/miniframework/releases/tag/...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程