一、测试环境
1、操作系统:
centos操作系统官方下载地址:https://www.centos.org/download/
(tips:目前官方版本已经到8、9)
2、database版本:
根据操作系统下载匹配的数据库版本和jdbc驱动包。
官方下载地址:https://opengauss.org/zh/download/ (tips:官方最新版本3.1.0)
3、jdk版本:
登录网址:https://www.oracle.com/java/technologies/downloads/#java11
选择对应jdk版本下载。(tips:可在windows下载完成后,通过ftp或者ssh到发送到linux上)。
4、本实验预置环境
1)操作系统版本:centos 7 64位(centos linux release 7.6.1810)
2)database & jdbc版本:
üopengauss 2.0.1。
üjdbc驱动版本:jdbc_2.0.0
3)jdk版本:java 11.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
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”中的
cd /gaussdb/data/db1vi pg_hba.conf
将以下内容添加进pg_hba.conf文件中。(tips:当在链接时如果提示“fatal: forbid remote connection with trust method!”,则需要更改目标ip对应的 客户端接入认证 将 trust 改成sha256)。
切换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 = '*'
修改完成后重启数据库生效(-d后面的数据库默认路径,需要根据实际情况进行修改)。
gs_ctl restart -d /gaussdb/data/db1
9、将对应的jdbc驱动包 “postgresql.jar” 上传到 /soft 目录 。(tips:可通过ftp或者ssh 发送到linux系统,在通过cp命令进行复制)。
到此, 链接数据库的环境准备就绪。
四、链接测试
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//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();}// 完成后关闭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//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:openeuler 20.03lts(推荐采用此操作系统)、麒麟v10、asianux 7.5
x86:openeuler 20.03lts、centos 7.6、asianux 7.6
2、jdbc开发应用程序的流程
3、连接故障说明
1)gsql: could not connect to server: no route to host
此问题一般是指定了不可达的地址或者端口导致的。请检查-h参数与-p参数是否添加正确。
2)gsql: fatal: invalid username/password,login denied.
此问题一般是输入了错误的用户名和密码导致的,请联系数据库管理员,确认用户名和密码的正确性。
3)gsql: fatal: forbid remote connection with trust method!
数据库由于安全问题,禁止远程登录时使用trust模式。这时需要修改pg_hba.conf里的连接认证信息。具体的设置信息请参见:官方《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节。 ——实验过程中遇到此错误tips
说明:请不要修改pg_hba.conf中opengauss主机的相关设置,否则可能导致数据库功能故障。建议业务应用部署在opengauss之外,而非opengauss内部。
4)the “libpq.so” loaded mismatch the version of gsql, please check it.
此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的,请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改ld_library_path环境变量来加载正确的libpq.so。
5)gsql: symbol lookup error: xxx/gsql: undefined symbol: libpqversionstring
此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的(也有可能是环境中存在postgresql的libpq.so),请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改ld_library_path环境变量来加载正确的libpq.so。
6)gsql: connect to server failed: connection timed out
is the server running on host “xx.xxx.xxx.xxx” and accepting tcp/ip connections on port xxxx?
此问题是由于网络连接故障造成。请检查客户端与数据库服务器间的网络连接。如果发现从客户端无法ping到数据库服务器端,则说明网络连接出现故障。
7)gsql: fatal: permission denied for database “postgres” detail: user does not have connect privilege.
此问题是由于用户不具备访问该数据库的权限,可以使用如下方法解决。
a.使用管理员用户dbadmin连接数据库。
gsql -d postgres -u dbadmin -p 5432
b.赋予该用户访问数据库的权限。
grant connect on database postgres to user1;
8)gsql: fatal: sorry, too many clients already,active/non-active: 197⁄3.
此问题是由于系统连接数量超过了最大连接数量。请进行会话连接数管理,释放无用会话。
会话状态可以在视图pg_stat_activity中查看。无用会话可以使用函数pg_terminate_backend进行释放。
select datid,pid,state from pg_stat_activity;
datid | pid | state -------+-----------------+-------- 13205 | 139834762094352 | active 13205 | 139834759993104 | idle (2 rows)
其中pid的值即为该会话的线程id。根据线程id结束会话。
select pg_terminate_backend(139834759993104);
显示类似如下信息,表示结束会话成功。
pg_terminate_backend ---------------------- t (1 row)
9)gsql: wait xxx.xxx.xxx.xxx:xxxx timeout expired
gsql在向数据库发起连接的时候,会有5分钟超时机制,如果在这个超时时间内,数据库未能正常的对客户端请求进行校验和身份认证,那么gsql会退出当前会话的连接过程,并报出如上错误。
一般来说,此问题是由于连接时使用的-h参数及-p参数指定的连接主机及端口有误(即错误信息中的xxx部分),导致通信故障;极少数情况是网络故障导致。要排除此问题,请检查数据库的主机名及端口是否正确。
10)gsql: could not receive data from server: connection reset by peer.
同时,检查数据库主节点日志中出现类似如下日志“ fatal: cipher file “/data/dbnode/server.key.cipher” has group or world access”,一般是由于数据目录或部分关键文件的权限被误操作篡改导致。请参照其他正常实例下的相关文件权限,修改回来便可。
11)gsql: fatal: gss authentication method is not allowed because xxxx user password is not disabled.
目标数据库主节点的pg_hba.conf里配置了当前客户端ip使用”gss”方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到”sha256”后再试。配置方法见官网《开发者指南》中“管理数据库安全 > 客户端接入认证 > 配置文件参考”章节 。
说明:
- 请不要修改pg_hba.conf中opengauss主机的相关设置,否则可能导致数据库功能故障。
- 建议业务应用部署在opengauss之外,而非opengauss内部。
以上欢迎大家测试、并交流!
5G标准仍未全部完成 最后阶段突然推迟
电动车和燃油车的优劣势
Linux28岁生日到了!开发者“诞生贴”下致谢Linux之父Linus
浅谈字节跳动开源8比特混合精度Transformer引擎
VadaTech在他的PCIe FPGA扩展卡上加上了FMC连接器
Linux环境下的Java(JDBC)链接openGauss数据库实践
华为搜索能替代谷歌搜索吗?
没有5G的iPhone11最终会怎样
分时共享及网约车出行服务平台——骆驼出行引领共享汽车市场潮流
SD卡座二合一与TF卡座的使用特点
电动汽车自燃时该如何自救
itc隧道应急广播系统为行车安全保驾护航
这所知名211高校的校长开学第一课,居然讲的是智能传感器?
半导体封测产业链重点公司梳理
电解液中LiPS的解离和结合行为
电阻焊飞溅的原因
用户手册|STM32CubeU5 TFM 应用程序入门
labview如何快速精确控制步进电机实现定位运动
开关电源变压器绕制方法_开关电源变压器设计方法
新荣耀或携手猎户座芯片冲击高端市场?