OpenGauss数据库的安装与运行
实验内容
本实验主要内容为在CentOS 7.9上安装部署openGauss数据库,并进行简单的数据库相关操作。
实验环境说明
- 组网说明
本实验环境为虚拟机VMware Workstation Pro + CentOS 7.9 + openGauss 2.1.0。
- 设备介绍
我所使用的具体设备:
设备明细表
设备名称 |
设备型号 |
Linux操作系统 |
CentOS 7.9 |
windows操作系统 |
win10 x86 64位 |
虚拟机 |
VMware Workstation Pro |
Python |
Python 3.6.X |
实验环境安装
官网文档使用的是Oracle VM VirtualBox我安装了一下觉得不太好用,还是推荐用VMware Workstation Pro。在VMware Workstation Pro上创建centos7.9(最新,稍后会进行修改)虚拟机,参考链接如下超详细虚拟机VMware安装Centos7教程(图文) - 知乎 (zhihu.com):不是本文重点,不再赘述。与官方文档不同的是我选择了安装带桌面的centos,更加方便。
openGauss安装
- 修改操作系统版本
如果CentOS版本不是7.6的需要进行修改,如果是7.6则无需修改,
先vi /etc/redhat-releas 打开编辑文件,然后将内容改为CentOS Linux release 7.6.2003 (Core)。输入”i”切换到编辑模式,移动鼠标到修改位置修改内容,然后按下ESC键退出编辑模式,然后输入”:wq”退出并进行保存,具体如下:
[root@db1 ~]# vi /etc/redhat-release
CentOS Linux release 7.6.2003 (Core)
- 查看本地ip
使用命令 :
Ifconig
- 使用一键部署openGauss2.0.1[CentOS 7.6] - 墨天轮 (modb.pro)内的代码进行安装,注意将代码里的ip改为自己的ip
vi auto_install.sh
然后将代码复制
在命令行中输入以下命令进行运行,开始自动安装
sh auto_install.sh
询问yes/no填yes
然后输入密码,这里注意输入的密码必须符合要求,否则会安装失败
- 查看是否安装成功
Su - omm
安装成功后数据库默认开启 只需要命令
gsql -d postgres -p 26000 -r
而如果数据库关闭了,就需要先执行
gs_om -t start
再执行
gsql -d postgres -p 26000 -r
否则会出现failed to connect Unknown:26000 的错误
下面对自动安装的代码进行分析
## 1.定义主机信息[请根据实际情况修改]
export MY_HOSTNAME=node1 ## 主机名
export MY_HOSTIP=192.168.244.128 ## IP地址
export MY_SOFTWARE_DIRECTORY=/soft/openGauss ## 软件包所在目录
export MY_XML=/soft/openGauss/clusterconfig.xml ## 集群配置文件XML
export openGauss_Download_url=https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.1/x86/openGauss-2.0.1-CentOS-64bit-all.tar.gz ## openGauss软件包下载地址
## 1. 设置主机名并配置hosts文件
hostnamectl set-hostname $MY_HOSTNAME
sed -i '/$MY_HOSTIP/d' /etc/hosts
echo "$MY_HOSTIP $MY_HOSTNAME #Gauss OM IP Hosts Mapping" >> /etc/hosts
cat /etc/hosts
echo "1.Configure /etc/hosts completed."
echo -e "\n"
## 2. 关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
echo "Firewalld " `systemctl status firewalld|grep Active`
echo "2.Disable firewalld service completed."
echo -e "\n"
## 3. 关闭SELinux
sed -i '/^SELINUX=/d' /etc/selinux/config
echo "SELINUX=disabled" >> /etc/selinux/config
cat /etc/selinux/config|grep "SELINUX=disabled"
echo "3.Disable SELINUX completed."
echo -e "\n"
## 4. 设置操作系统字符集编码
echo "LANG=en_US.UTF-8" >> /etc/profile
source /etc/profile
echo $LANG
echo "4.Configure encoding completed."
echo -e "\n"
## 5. 设置操作系统时区
rm -fr /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -R
hwclock
echo "5.Configure Timezone completed."
echo -e "\n"
## 6. 关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
free -m
echo "6.Close swap partition completed."
echo -e "\n"
## 7. 配置SSH服务,关闭Banner,允许root远程登录
sed -i '/Banner/s/^/#/' /etc/ssh/sshd_config
sed -i '/PermitRootLogin/s/^/#/' /etc/ssh/sshd_config
echo -e "\n" >> /etc/ssh/sshd_config
echo "Banner none " >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner'
echo "7.Configure SSH Service completed."
echo -e "\n"
## 8. 配置YUM源、安装依赖包、修改默认Python3版本
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
yum clean all
yum install -y wget bzip2 python3
yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel net-tools tar
mv /usr/bin/python /usr/bin/python2_bak
ln -s /usr/bin/python3 /usr/bin/python
python -V
echo "8.Configure Install Packages and change default Python version completed."
echo -e "\n"
## 9. 配置 sysctl.conf 和 performance.sh
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_retries1 = 5
net.ipv4.tcp_syn_retries = 5
net.sctp.path_max_retrans = 10
net.sctp.max_init_retransmits = 10
EOF
sysctl -p
echo "9.Configure sysctl.conf and performance.sh completed."
echo -e "\n"
## 10. 配置资源限制
echo "* soft stack 3072" >> /etc/security/limits.conf
echo "* hard stack 3072" >> /etc/security/limits.conf
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
echo "* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf
tail -n 4 /etc/security/limits.conf
tail -n 1 /etc/security/limits.d/90-nproc.conf
echo "10.Configure resource limits completed."
echo -e "\n"
## 11. 关闭透明大页[Only for CentOS]
cat >>/etc/rc.d/rc.local<<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local
/usr/bin/sh /etc/rc.d/rc.local
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
echo "11.Close transparent_hugepage completed."
echo -e "\n"
## 12. 禁用RemoveIPC[Only for openEuler]
## sed -i '/^RemoveIPC/d' /etc/systemd/logind.conf
## sed -i '/^RemoveIPC/d' /usr/lib/systemd/system/systemd-logind.service
## echo "RemoveIPC=no" >> /etc/systemd/logind.conf
## echo "RemoveIPC=no" >> /usr/lib/systemd/system/systemd-logind.service
## systemctl daemon-reload
## systemctl restart systemd-logind
## loginctl show-session | grep RemoveIPC
## systemctl show systemd-logind | grep RemoveIPC
## echo "12.Disable RemoveIPC completed."
## echo -e "\n"
## 13. 下载openGauss软件包
mkdir -p $MY_SOFTWARE_DIRECTORY
cd $MY_SOFTWARE_DIRECTORY
wget $openGauss_Download_url
echo "13.openGauss software download completed."
echo -e "\n"
## 14. 配置XML文件
rm -fr $MY_XML
cat >> $MY_XML <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<PARAM name="clusterName" value="dbCluster" />
<PARAM name="nodeNames" value="$MY_HOSTNAME" />
<PARAM name="backIp1s" value="$MY_HOSTIP"/>
<PARAM name="gaussdbAppPath" value="/gaussdb/app" />
<PARAM name="gaussdbLogPath" value="/gaussdb/log" />
<PARAM name="gaussdbToolPath" value="/gaussdb/om" />
<PARAM name="corePath" value="/gaussdb/corefile"/>
<PARAM name="clusterType" value="single-inst"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="1000001">
<PARAM name="name" value="$MY_HOSTNAME"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="$MY_HOSTIP"/>
<PARAM name="sshIp1" value="$MY_HOSTIP"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="26000"/>
<PARAM name="dataNode1" value="/gaussdb/data/db1"/>
</DEVICE>
</DEVICELIST>
</ROOT>
EOF
cat $MY_XML
echo "14.Configure XML file completed."
echo -e "\n"
## 15. 解压安装包并修改目录权限
echo "Begin to Uncompress openGauss Package and Modify directory permissions:"
cd $MY_SOFTWARE_DIRECTORY
tar -zxvf *all.tar.gz
tar -zxvf *om.tar.gz
ls -l
chmod -R 777 $MY_SOFTWARE_DIRECTORY/../
echo "15.Uncompress openGauss Package completed."
echo -e "\n"
## 16. 执行 gs_preinstall
echo "Begin to execute openGauss preinstall:"
python $MY_SOFTWARE_DIRECTORY/script/gs_preinstall -U omm -G dbgrp -X $MY_XML
echo "16.openGauss preinstall completed."
echo -e "\n"
## 17. 检查预安装环境
echo "Begin to Check OS environment:"
$MY_SOFTWARE_DIRECTORY/script/gs_checkos -i A -h $MY_HOSTNAME --detail
## 18. 执行 gs_install
echo "Begin to execute openGauss install:"
touch /home/omm/install_db
cat >> /home/omm/install_db <<EOF
source ~/.bashrc
gs_install -X $MY_XML --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=3GB" --dn-guc="shared_buffers=128MB" --dn-guc="cstore_buffers=16MB"
EOF
chown -R omm:dbgrp /home/omm/install_db
su - omm -c "sh /home/omm/install_db"
echo "17.openGauss install completed."
echo -e "\n"
## 安装完毕!
echo "openGauss Install completed.congratulations"
echo "Congratulations!!!"
可以看出代码主要完成了以下几个工作:
- 定义主机信息, 设置主机名并配置hosts文件
- 关闭防火墙
- 关闭SELinux
- 设置操作系统字符集编码
- 设置操作系统时区
- 关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]
- 配置SSH服务,关闭Banner,允许root远程登录
- 配置YUM源、安装依赖包、修改默认Python3版本
- 配置 sysctl.conf 和 performance.sh
- 配置资源限制
- 关闭透明大页[Only for CentOS]
- 下载openGauss软件包
- 配置XML文件
- 解压安装包并修改目录权限
- 执行 gs_preinstall
- 检查预安装环境
- 执行 gs_install
数据库使用
- 安装JDK
- (1)首先执行如下命令搜索 jdk 安装包:
yum search java|grep jdk
这里我们选择 1.8 版本,执行如下命令进行安装。注意:默安装默认的目录为:/usr/lib/jvm/
yum install java-1.8.0-openjdk
安装完毕后执行 java -version 命令即可查看当前的版本。
默认安装完只有运行环境,也就说 java 安装目录下只有 jre 文件夹,我们执行 javac 命令会提示“未找到命令”:
我们执行如下命令安装开发环境:
yum install java-1.8.0-openjdk-devel.x86_64、
安装完可看到 java 安装目录下出现 bin、lib 等文件夹。再次输入 javac 说明安装成功:
- 配置 JAVA_HOME
首先我们依次执行如下命令,一步步找到正确的 JAVA_HOME 位置:
可以发现最终找到的位置如下:
执行如下命令打开配置环境变量的文件:
vi /etc/profile
在里面添加以下配置(JAVA_HOME 参数根据前面找到的目录路径设置):
最后执行如下命令让配置生效:
source /etc/profile
- 下载驱动
wget -P /home/download https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/arm/openGauss-1.1.0-JDBC.tar.gz
解压该文件
tar -zxvf openGauss-1.1.0-JDBC.tar.gz
解压后的文件名为postgresql.jar
- 修改数据库的pg_hba.conf文件
在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件:<PARAM name="dataNode1" value="/gaussdb/data/db1"/>。
编写测试程序(修改ip,端口,用户,密码)
cd /gaussdb/data/db1
vi pg_hba.conf
在ipv4最后添加host all all 0.0.0.0/0 sha256 目的为修改网络连接规则,使得一些工具可以连接至该服务器。
切换至 omm 用户环境,使用 gs_ctl 将策略生效。
su - omm
gs_ctl reload -D /gaussdb/data/db1/
登录openGauus,创建新用户(如果已经有则忽略这一步),远程登录不允许使用omm用户.
CREATE USER jack PASSWORD 'Test@123';
如果使用内存表,则需要授予新用户权限:
grant usage on foreign server mot_server to jack;
修改数据库监听地址
cd /gaussdb/data/db1
vi postgresql.conf
输入“:60”找到对应位置,然后输入“i”切换到 INSERT 模式,将 listen_addresses 的 值修改成为*,修改后按下“ESC”键,退出 INSERT 模式,输入“:wq”后回车保存。
修改完成后重启数据库生效(-D后面的数据库默认路径,需要根据实际情况进行修改)
gs_ctl restart -D /gaussdb/data/db1/
//DBtest.java
//演示基于JDBC开发的主要步骤,会涉及创建数据库、创建表、插入数据等。
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 DBTest {
//创建数据库连接。
public static Connection GetConnection(String username, String passwd) {
String driver = "org.postgresql.Driver";
String sourceURL = "jdbc:postgresql://ip:端口/postgres";
Connection conn = null;
try {
//加载数据库驱动。
Class.forName(driver).newInstance();
} 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;
};
//执行普通SQL语句,创建customer_t1表。
public static void CreateTable(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
//执行普通SQL语句。
int rc = stmt
.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));");
stmt.close();
} catch (SQLException e) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
}
//执行预处理语句,批量插入数据。
public static void BatchInsertData(Connection conn) {
PreparedStatement pst = null;
try {
//生成预处理语句。
pst = conn.prepareStatement("INSERT INTO customer_t1 VALUES (?,?)");
for (int i = 0; i < 3; i++) {
//添加参数。
pst.setInt(1, i);
pst.setString(2, "data " + i);
pst.addBatch();
}
//执行批处理。
pst.executeBatch();
pst.close();
} catch (SQLException e) {
if (pst != null) {
try {
pst.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
}
//执行预编译语句,更新数据。
public static void ExecPreparedSQL(Connection conn) {
PreparedStatement pstmt = null;
try {
pstmt = conn
.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1");
pstmt.setString(1, "new Data");
int rowcount = pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
}
/**
* 主程序,逐步调用各静态方法。
* @param args
*/
public static void main(String[] args) {
//创建数据库连接。
Connection conn = GetConnection("tester", "Password1234");
//创建表。
CreateTable(conn);
//批插数据。
BatchInsertData(conn);
//执行预编译语句,更新数据。
ExecPreparedSQL(conn);
//关闭数据库连接。
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
命令行编译,将jdbc驱动的jar包和DBTest.java放在同一个目录下,编译:
javac -cp postgresql.jar dbtest.java
运行:
java -cp .:postgresql.jar dbtest
问题及解决
在安装过程中遇到了很多问题,上面安装过程都有体现,下面进行总结。
- VM VirtualBox使用过程中遇到了很多问题,建议还是使用VMware
- 可以安装centos7.9,但一定要修改/etc/redhat-release文件里的为7.6
- 在设置数据库密码时,注意对密码长度、大小写的要求,不符合要求无法安装成功
- 直接在root用户下运行比较方便
- 在运行gs_om -t start时不成功,需要检查一下虚拟机的网络,有时候虚拟机就是连接不上网络,网上看了很多办法都没用,此时建议重启。
- 在运行gsql -d postgres -p 26000 -r时提示错误failed to connect Unknown:26000,说明数据库还没开启,要先运行gs_om -t start,ps -ef |grep gauss可以查看数据库进程是否关闭
- 远程登录不允许使用omm用户!需要创建用户并给他grant
OpenGauss数据库的安装与运行相关推荐
- openGauss数据库源码解析系列文章——openGauss开发快速入门(一)
作为openGauss数据库开发者,在基于开源社区的openGauss版本进行二次开发的过程中,需要完成软件包获取.源码了解.代码修改.编译发布等过程,同时还需要安装数据库以了解数据库的基本特点.验证 ...
- OpenGauss数据库在 CentOS 上的实践,配置篇
服务器准备 本篇博客可以使用华为云提供的测试 ECS,进行实践,领取地址为:https://activity.huaweicloud.com/free_test/ 如果没有领取到或者名额已满,可以用 ...
- 实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库
本文适合需要快速了解OpenGauss基本使用和操作的单机用户,可以短时间内完成安装体验.对于企业级生产使用或者需要部署多台服务器的,不适合本文. 因为业务需要,要在鲲鹏架构里安装单机版的OpenGa ...
- 猿创征文 | 国产数据库之OpenGauss数据库详解安装和使用
文章目录 1.OpenGauss简介 2.OpenGauss系统架构 3.OpenGauss特点 4.OpenGauss基本概念 5.OpenGauss应用场景 6.OpenGauss的安装 6.1. ...
- 使用虚拟机在openEuler上安装部署openGauss数据库
本节描述openGauss数据库在虚拟机VirtualBox+openEuler上的安装配置. 1.虚拟机VirtualBox下载及安装 步骤 1 进入官方网站下载页面. 网址:https://www ...
- mysql找不到performance_Mysql安装完毕运行时没有mysql和performance_schema数据库_MySQL
Mysql问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) Mysql安装完 ...
- OpenGauss数据库的详细安装过程
目录 1. 概述 1.1 简介 1.2 内容描述 1.3 实验环境说明 2. 实验介绍 2.1 关于实验 2.2 实验目的 3. 购买华为云 ECS 鲲鹏服务器 3.1 登陆华为云(没有华为云账号的需 ...
- docker安装openGauss数据库
下载openGauss镜像 docker pull enmotech/opengauss 创建容器 docker run --name opengauss --privileged=true -d - ...
- 使用虚拟机在CentOS上安装部署openGauss数据库指导(下)
在上一篇中,我们使用VirtualBox下安装CentOS 7.8操作系统安装和网络配置完成,本文我们会基于此安装openGauss数据库. 1.5 操作系统环境准备 为了操作方便,可以使用SSH工具 ...
- 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(2)
点击蓝字 · 关注我们 前文回顾: 1.如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(1) 2.如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2) 3.如何掌握 ...
最新文章
- java架构升级_java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
- 使用 Cufon 渲染网页字体
- VS 2008 Web Site Project编译和发布速度提高办法
- Qt Creator使用自定义着色器
- 实现strlen()(c语言)
- Kirill And The Game CodeForces - 842A
- RocketMQ消息的存储结构
- Wiki1017(乘积最大)
- 在LINQ to SQL中使用Translate方法以及修改查询用SQL
- 小容量单片机生成pdf文件
- Dubbo(十四) dubbo的服务降级与集群容错
- SpringBoot配置属性之Security
- 平面标定(Homography变换)
- python问卷星微信登录_为什么我还可以继续使用python自动填问卷星?
- 利用jsonp跨域访问
- 74hc165C语言程序,74hc165使用方法(74hc165功能_内部结构图_时序图)
- 详解SQL中几种常用的表连接方式!
- NetFlow学习总结
- python中class什么意思_python-classmethod在此代码中做什么?
- 世界棒球经典赛:从WBC走进中国棒球·棒球1号位