一、测试环境

1、操作系统

CentOS操作系统官方下载地址:

(Tips:目前官方版本早已到8、9)

文件编辑不了怎么改成可编辑_linux 编辑class文件_文件编辑器

2、DataBase版本:

按照操作系统下载匹配的数据库版本和JDBC驱动包。

官方下载地址:(Tips:官方最新版本3.1.0)

linux 编辑class文件_文件编辑不了怎么改成可编辑_文件编辑器

3、JDK版本:

登陆网址:#java11

选择对应jdk版本下载。(Tips:可在Windows下载完成后,通过FTP或则SSH到发送到Linux上)。

文件编辑不了怎么改成可编辑_文件编辑器_linux 编辑class文件

4、本实验预置环境

1)操作系统版本:CentOS764位(CentOSLinuxrelease7.6.1810)

2)DataBase&JDBC版本:

üopenGauss2.0.1。

üJDBC驱动版本:JDBC_2.0.0

3)JDK版本:Java11.0.17

二、Linux环境安装Java环境及配置步骤

1、登录到Linux环境,切换到root用户(Tips:须要root密码)

su root

2、在usr目录下构建java安装目录

cd /usrmkdir java

3、将“jdk-11.0.17_linux-x64_bin.tar.gz”上传到/usr/java/目录。(Tips:可通过FTP或则SSH发送到Linux系统,在通过cp命令进行复制)

4、解压jdk到当前目录,得到文件夹“jdk-11.0.17”(Tips:下载不同版本的JDK文件名不同)。

cd /usr/java/tar -zxvf jdk-11.0.17_linux-x64_bin.tar.gz

5、安装完毕可以构建一个链接以节约目录宽度

ln -s /usr/java/jdk-11.0.17  /usr/jdk

文件编辑器_linux 编辑class文件_文件编辑不了怎么改成可编辑

6、编辑配置文件,配置环境变量

vi /etc/profile

在文本的末尾添加如下内容:

export JAVA_HOME=/usr/jdkexport CLASSPATH=$JAVA_HOME/lib/export PATH=$PATH:$JAVA_HOME/binexport PATH JAVA_HOME CLASSPATHcat /etc/profile

7、重启机器或执行命令

source /etc/profile  

sudo shutdown -r now

8、查看安装情况

java -version

9、可能出现的错误信息:

bash: ./java: cannot execute binary file

出现这个错误的诱因可能是在32位的操作系统上安装了64位的jdk,

1、查看jdk版本和Linux版本位数是否一致。

2、查看你安装的Ubuntu是32位还是64位系统:

sudo uname -mi686 //表示是32位x86_64 // 表示是64位

到此,Java环境配置完成。

三、准备链接数据库的环境

1、修改数据库的pg_hba.conf文件。

在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件

“/soft/openGauss/clusterconfig.xml”中的

<PARAM name="dataNode1" value="/gaussdb/data/db1"/>cd /gaussdb/data/db1vi pg_hba.conf

将以下内容添加进pg_hba.conf文件中。(Tips:当在链接时假如提示“FATAL:Forbidremoteconnectionwithtrustmethod!”,则须要修改目标IP对应的顾客端接入认证将trust改成sha256)。

linux 编辑class文件_文件编辑不了怎么改成可编辑_文件编辑器

切换omm用户登录,使用gs_ctl命令将策略生效。

su - ommgs_ctl reload -D /gaussdb/data/db1

2、连接数据库后,步入SQL命令界面。创建测试用户dbuser,密码为Gauss#3demo。

gsql -d postgres -p 26000 -rCREATE USER dbuser IDENTIFIED BY 'Gauss#3demo';postgres=# alter role dbuser createrole createdb;ALTER ROLEpostgres=# q

3、创建测试数据库demo。

使用gsql工具登入数据库。登入用户为dbuser,密码为Gauss#3demo(或则为用户自定义的密码)。

gsql -d postgres -p 26000 -U dbuser –r

创建数据库demo

create database demo ENCODING 'UTF8' template = template0;connect demo;

4、创建名为demo的schema,并设置demo为当前的schema。

CREATE SCHEMA demo;

将默认搜索路径设为demo。

SET search_path TO demo;

5、创建测试表websites。

CREATE TABLE websites (id int NOT NULL,name char(20) NOT NULL DEFAULT '',url varchar(255) NOT NULL DEFAULT '',PRIMARY KEY (id));COMMENT ON COLUMN websites.name IS '站点名称';

6、插入数据。

INSERT INTO websites VALUES('1', 'openGauss', 'https://opengauss.org/zh/'),('2', 'huaweicloud', 'https://www.huaweicloud.com/'),('3', 'openEuler', 'https://openeuler.org/zh/');

7、退出数据库

postgres=# q

8、修改数据库窃听地址。

在GS_HOME中,本实验中数据库GS_HOME设置的为/gaussdb/data/db1。

cd /gaussdb/data/db1vi postgresql.conf

将listen_addresses的值更改成为*。

listen_addresses = '*'

文件编辑不了怎么改成可编辑_文件编辑器_linux 编辑class文件

更改完成后重启数据库生效(-D旁边的数据库默认路径linux设置环境变量,须要依照实际情况进行更改)。

gs_ctl restart -D /gaussdb/data/db1

9、将对应的JDBC驱动包“postgresql.jar”上传到/soft目录。(Tips:可通过FTP或则SSH发送到Linux系统,在通过cp命令进行复制)。

文件编辑不了怎么改成可编辑_linux 编辑class文件_文件编辑器

到此,链接数据库的环境打算就绪。

四、链接测试

1、连接openGauss并执行java代码

1)使用Java程序联接数据库并进行查询。在/soft目录中创建openGaussDemo.java文件:

vi /soft/openGaussDemo.java

步入编辑openGaussDemo.java文件模式:

i

将如下文件内容拷贝至openGaussDemo.java文件。

import java.sql.*;public class openGaussDemo {static final String JDBC_DRIVER = "org.postgresql.Driver";  static final String DB_URL = "jdbc:postgresql://192.168.52.3:26000/demo";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "dbuser";static final String PASS = "Gauss#3demo";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try{// 注册 JDBC 驱动Class.forName(JDBC_DRIVER);
// 打开链接System.out.println("连接数据库...");conn = DriverManager.getConnection(DB_URL,USER,PASS);
// 执行查询System.out.println(" 实例化Statement对象...");stmt = conn.createStatement();String sql;sql = "SELECT id, name, url FROM demo.websites";ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库while(rs.next()){// 通过字段检索int id = rs.getInt("id");String name = rs.getString("name");String url = rs.getString("url");
// 输出数据System.out.print("ID: " + id);System.out.print(", 站点名称: " + name);System.out.print(", 站点 URL: " + url);System.out.print("n");}// 完成后关闭rs.close();stmt.close();conn.close();}catch(SQLException se){// 处理 JDBC 错误se.printStackTrace();}catch(Exception e){// 处理 Class.forName 错误e.printStackTrace();}finally{// 关闭资源try{if(stmt!=null) stmt.close();}catch(SQLException se2){}// 什么都不做try{if(conn!=null) conn.close();}catch(SQLException se){se.printStackTrace();}}System.out.println("Goodbye!");}}

编辑完成后,按“ESC”键,输入:wq!保存退出。

说明:请用户按照实际情况替换红字内容,更改

jdbc:postgresql://192.168.52.3:26000/postgres中的IP信息,以及联接数据库的用户及密码USER=”dbuser”、PASS=”Gauss#3demo”。

2、在安装Java的本机,对Java程序编译后执行。

先对Java程序进行编译(步入Java程序的目录)

javac -encoding utf-8 -cp /soft/postgresql.jar openGaussDemo.java

再执行以下命令(Tips:注意“.:”的书写)。

java -cp .:/soft/postgresql.jar openGaussDemo

3、执行结果

至此,在linux环境下java访问openGauss数据库即使完成了。

五、经验小结(FAQ)1、数据库运行环境建议

1)支持的硬件平台

openGauss支持运行在ARM服务器和通用的x86服务器上:

支持ARM服务器和基于x86_64的通用PC服务器。

支持本地储存(SATA、SAS、SSD)。

支持百兆、万兆Ethernet网路。

2)支持的操作系统

ARM:openEuler20.03LTS(推荐采用此操作系统)、麒麟V10、Asianux7.5

X86:openEuler20.03LTS、CentOS7.6、Asianux7.6

2、JDBC开发应用程序的流程

linux 编辑class文件_文件编辑不了怎么改成可编辑_文件编辑器

3、连接故障说明

1)gsql:couldnotconnecttoserver:Noroutetohost

此问题通常是指定了不可达的地址或则端口引起的。请复查-h参数与-p参数是否添加正确。

2)gsql:FATAL:Invalidusername/password,logindenied.

此问题通常是输入了错误的用户名和密码造成的,请联系数据库管理员,确认用户名和密码的正确性。

3)gsql:FATAL:Forbidremoteconnectionwithtrustmethod!

数据库因为安全问题linux 编辑class文件,严禁远程登陆时使用trust模式。这时须要更改pg_hba.conf里的联接认证信息。具体的设置信息请参见:官方《开发者手册》中“管理数据库安全>顾客端接入认证>配置文件参考”章节。——实验过程中碰到此错误tips

说明:请不要更改pg_hba.conf中openGauss主机的相关设置,否则可能造成数据库功能故障。建议业务应用布署在openGauss之外,而非openGauss内部。

4)The“libpq.so”loadedmismatchtheversionofgsql,pleasecheckit.

此问题是因为环境中使用的libpq.so的版本与gsql的版本不匹配造成的,请通过“lddgsql”命令确认当前加载的libpq.so的版本,并通过更改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

5)gsql:symbollookuperror:xxx/gsql:undefinedsymbol:libpqVersionString

此问题是因为环境中使用的libpq.so的版本与gsql的版本不匹配造成的(也有可能是环境中存在PostgreSQL的libpq.so),请通过“lddgsql”命令确认当前加载的libpq.so的版本,并通过更改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

6)gsql:connecttoserverfailed:Connectiontimedout

Istheserverrunningonhost“xx.xxx.xxx.xxx”andacceptingTCP/IPconnectionsonportxxxx?

此问题是因为网路联接故障导致。请复查顾客端与数据库服务器间的网路联接。假如发觉从顾客端难以PING到数据库服务器端,则说明网路联接出现故障。

7)gsql:FATAL:permissiondeniedfordatabase“postgres”DETAIL:UserdoesnothaveCONNECTprivilege.

此问题是因为用户不具备访问该数据库的权限,可以使用如下方式解决。

a.使用管理员用户dbadmin联接数据库。

gsql-dpostgres-Udbadmin-p5432

b.赋于该用户访问数据库的权限。

GRANTCONNECTONDATABASEpostgresTOuser1;

8)gsql:FATAL:sorry,toomanyclientsalready,active/non-active:197⁄3.

此问题是因为系统联接数目超过了最大联接数目。请进行会话联接数管理,释放无用会话。

会话状态可以在视图PG_STAT_ACTIVITY中查看。无用会话可以使用函数pg_terminate_backend进行释放。

selectdatid,pid,statefrompg_stat_activity;

datid|pid|state——-+—————--+——--13205|4352|active13205|3104|idle(2rows)

其中pid的值即为该会话的线程ID。按照线程ID结束会话。

SELECTPG_TERMINATE_BACKEND(3104);

显示类似如下信息,表示结束会话成功。

PG_TERMINATE_BACKEND———————-t(1row)

9)gsql:waitxxx.xxx.xxx.xxx:xxxxtimeoutexpired

gsql在向数据库发起联接的时侯,会有5分钟超时机制,假如在这个超时时间内,数据库无法正常的对顾客端恳求进行校准和身分认证,这么gsql会退出当前会话的联接过程,并报出如上错误。

通常来说,此问题是因为联接时使用的-h参数及-p参数指定的联接主机及端口有误(即错误信息中的xxx部份),造成通讯故障;极少数情况是网路故障造成。要排除此问题linux 编辑class文件,请检测数据库的主机名及端口是否正确。

10)gsql:couldnotreceivedatafromserver:Connectionresetbypeer.

同时,检测数据库主节点日志中出现类似如下日志“FATAL:cipherfile“/data/dbnode/server.key.cipher”hasgrouporworldaccess”,通常是因为数据目录或部份关键文件的权限被误操作篡改致使。请参照其他正常实例下的相关文件权限,更改回去便可。

11)gsql:FATAL:GSSauthenticationmethodisnotallowedbecauseXXXXuserpasswordisnotdisabled.

目标数据库主节点的pg_hba.conf里配置了当前顾客端IP使用”gss”方式来做认证,该认证算法不支持用做客户端的身分认证,请更改到”sha256”后再试。配置方式见官网《开发者手册》中“管理数据库安全>顾客端接入认证>配置文件参考”章节。

说明:

-请不要更改pg_hba.conf中openGauss主机的相关设置,否则可能造成数据库功能故障。

-建议业务应用布署在openGauss之外linux 下载工具,而非openGauss内部。

以上欢迎你们测试、并交流!

本文来自Gauss松鼠会投稿。

END

Windows注册表文件为何是”hive”?

这儿有最新开源资讯、软件更新、技术干货等内容

点这儿↓↓↓记得关注标星哦~

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复