【原创】thinkphp6链接瀚高数据库详细步骤


IT-feng
IT-feng 2024-01-05 10:06:47 53405 赞同 0 反对 0
分类: 资源
thinkphp6链接瀚高数据库详细步骤

一、安装瀚高数据库

1、下载并上传hgdb4.5.7-see-centos7-x86-64-20210804.rpm到测试服器。

2、开始安装highgo数据库,默认会安装到/opt目录下,安装过程大约在3分钟左右。

执行:

rpm -ivh hgdb4.5.7-see-centos7-x86-64-20210804.rpm

安装完成结果:

 

opt目录下生成的数据库目录:

 

3、配置环境变量

查看环境变量配置:

cat /opt/HighGo4.5.7-see/etc/highgodb.env

内容如下:

export HG_BASE=/opt/HighGo4.5.7-see

export HGDB_HOME=/opt/HighGo4.5.7-see

export PGPORT=5866

export PGDATABASE=highgo

export PGDATA=$HGDB_HOME/data

export PATH=$HGDB_HOME/bin:$PATH

配置CentOS环境变量

vim /etc/profile

把上面的内容添加到环境变量,并保存

 

环境变量生效

source /etc/profile

4、初始化数据库

创建数据库文件夹

mkdir /opt/opt/HighGo4.5.7-see/data

初始化数据库,执行命令:

initdb

设置登录sysdbasyssao(需要输入两次)密码:

 

5、修改配置文件

修改postgresql.conf文件:

vim /opt/HighGo4.5.7-see/data/postgresql.conf

设置为外部可以访问,关闭证书配置(证书在etc目录下,但启动的时候会报未找到server.crt,把SSL关闭后启动正常)。

listen_addresses = '*'

ssl = off

如图:

 

修改pg_hba.conf文件:

vim /opt/opt/HighGo4.5.7-see/data/pg_hba.conf

IPv4ADDRESS修改为0.0.0.0/0

 

6、启用数据库服务

systemctl enable hgdb-see-4.5.7.service & systemctl restart hgdb-see-4.5.7.service

7、下载客户端连接数据库

sysdba登录数据库,执行:

ALTER system set compatible_db = 'oracle';--这是打开

select pg_reload_conf(); --这个是加载

show compatible_db --这个是查看

提供一下数据库的卸载方法:

查看安装的数据库版本:rpm -qa | grep hgdb

 

卸载highgo数据库:rpm -e hgdb-see-4.5.7-1.el7.centos.x86_64

8改密码有效期并更改syssso 用户密码 注意:密码默认7天有效最大365天

通过 syssso 用户更改安全参数‘hg_idcheck.pwdvaliduntil’的值,

修改区间为:0—365,数值 0 代表 infinity(密码永不过期),也可自行设置密码修改天数(1—365 天)

psql highgo syssso --使用syssso登录 select set_secure_param('hg_idcheck.pwdvaliduntil','0'); --修改密码有效期 alter user syssso with password 'Hello@123'; --更改一次密码,新密码的有效期即为修改的有效期

9更改syssao 用户密码并关闭审计

安全审计功能对用户的操作进程审计,并把审计日志生成在$PGDATA/hgaudit下,审计功能默认是开启的。可在后期部署删除脚本用于清理审计日志。因目前删除脚本暂无,如需部署可使用syssao用户登录数据库并执行以下语句,修改完成后,重启生效。

psql -U syssao -d highgo -- 使用syssao登录 select set_audit_param('hg_audit','off'); --关闭审计 alter user syssao with password 'Hello@123';----更改一次密码,新密码的有效期即为修改的有效期

 

10更改sysdba 用户密码

\c - sysdba --切换到sysdba用户 alter user sysdba with password 'Hello@123';--更改一次密码,新密码的有效期即为修改的有效期

11数据库重启

[highgo@hgdb archive]$ pg_ctl -m fast stop [highgo@hgdb archive]$ pg_ctl start

12修改自启动默认

安全版的自启动默认是集群的,也有单机的,这个需要根据实际进行启动

4.5.6的版本

$HGDB_HOME/etc下存在两个脚本文件 hgdb-see-4.5.6.single和 hgdb-see-4.5.6.cluster 分别对应配置单机和集群服务,还有一个软连接文件 hgdb-see- 4.5.6,默认连接到集群脚本文件。

单机环境中,使用如下步骤配置数据库服务:

[root@hgdb opt]# cd HighGo4.5.6-see/etc

#备份启动脚本

[root@hgdb ~]cp hgdb-see-4.5.6.single hgdb-see-4.5.6.single.bak [root@hgdb ~]cp hgdb-see-4.5.6.cluster hgdb-see-4.5.6.cluster.bak

#将软连接连接到单机脚本文件即可

[root@node etc] ln -sf hgdb-see-4.5.6.single hgdb-see-4.5.6

4.5.7的版本

将之前版本etc目录下的hgdb-see-4.5.x.single和hgdb-see-4.5.x.cluster合并为 hgdb-see-4.5.x。由etc目录下的隐藏文件 .cluster.mark控制使用集群的服务脚本启动数据库。

数据库安装完毕并初始化后,执行 systemctl start hgdb-see-4.5.7.service默认启动集群服务,如需启动单机服务,需手动将 .cluster.mark重命名:

cd /opt/HighGo4.5.7-see/etc mv .cluster.mark .cluster.mark.bak

13卸载

1.RPM 包卸载

步骤1:终止数据库服务

systemctl stop hgdb-see-4.5.7.service

步骤 2:如果数据还需使用请做好备份。否则跳过。

cp /opt/HighGo4.5.7-see/data /databak 注意:/databak 请替换为实际备份目录

步骤 3:查询包名

rpm -qa | grep 4.5.7  hgdb-see-4.5.7-1.el7.x86_64

步骤 4:执行卸载

rpm -e --nodeps hgdb-see-4.5.7-1.el7.x86_64

步骤 5:清理数据库所有文件(谨慎操作,建议使用绝对路径,而不是环境变量)

rm -rf /opt/HighGo4.5.7-see/* rm -rf /usr/lib/systemd/system/hgdb*

2.DEB 包卸载

步骤 1:检查包名

dpkg --list | grep 4.5.7    pi hgdb-see-4.5.7 4.5.7 amd64 HighGo Database V4 Release4.5.7 - 64-bit  Production    hgdb-see-4.5.7

步骤 2:

卸载软件移除软件包:

root@highgo-PC:~# dpkg -r hgdb-see-4.5.7

移除软件包及其配置文件(慎重使用):

root@highgo-PC:~# dpkg -P hgdb-see-4.5.7

注意:在检查数据库状态时,grep 后的信息以实际安装包的信息为准,通常为hgdb/HighGo/版本号等。

14、sm3 访问失败的解决方案

pgsql 和 pdo_pgsql 通过引用 libpq.so.xx 文件访问瀚高数据库,瀚高数据

库安装之后,初始化的 data 目录下的 pg_hba.conf 文件中如果是 sm3,则需要

libpq.so.xx 文件替换成瀚高数据库安装目录的 lib 下的 libpq.so.xx,这样

才能访问成功。

没有使用瀚高库的 libpq.so.xx 文件的错误:

使用之后的效果:

详细方案如下:

1. root 用户下,使用 find 命令查找 pgsql.so、pdo_pgsql.so 文件的目录

find / -name *pgsql.so*

2. 使用 ldd 命令查看这两个文件引用的 libpq.so 文件是哪一个

ldd /……/xxx.so瀚高基础软件股份有限公司 https://support.highgo.com 

经查看,引用的是 libpq.so.5

3. 使用下面命令查看哪些目录中含有 libpq.so.5

find / -name *libpq.so.5*

经查看,有四个目录包含

4. 用瀚高库的 lib 目录下的 libpq.so.5 文件替换

首先尝试替换 php 安装目录下的 libpq.so.5 文件,替换之后,重启服务

(apache 或者 nginx 或者其他服务),然后测试一下 php 程序,确认是否连接成功。

php 安装目录下如果没有 libpq.so.5 文件,可以尝试替换 pdo_pgsql.so 和

pgsql.so 文件中所引用的目录下的 libpq.so.5 文件(例如:/usr/lib64 目录),

重启服务(apache 或者 nginx 或者其他服务),然后测试一下 php 程序,确认是否连

接成功。

例如:

①把原有的 libpq.so.5 文件重命名一下

mv /usr/local/phpstudy/soft/php/php-7.4.0/sbin/depends/libpq.so.5 /usr/local/phpstudy/soft/php/php-

7.4.0/sbin/depends/libpq.so.5.systembak

②复制数据库目录下的 libpq.so.5 文件到上面目录

php 程序和瀚高库在同一台服务器上时,采用 cp 的方式

cp /opt/HighGo4.5.6-see/lib/libpq.so.5 /usr/local/phpstudy/soft/php/php-7.4.0/sbin/depends/

php 程序和瀚高库不在同一台服务器上时,采用 scp 的方式瀚高基础软件股份有限公司 https://support.highgo.com 

scp

root@192.168.112.198:/opt/HighGo4.5.6-see/lib/libpq.so.5 /usr/local/phpstudy/soft/php/php-

7.4.0/sbin/depends/

③重启 php 程序的服务

④执行 php 程序,确认是否连接成功

4.ssl 开启后访问失败的解决方案

瀚高安全版 v4.5 安装后,默认开启 ssl,可以通过 show ssl;查看是否开启。

问题:ssl 开启后,php 程序访问瀚高库时,会提示“无法访问 SSL 联接”的错

(通过开启瀚高的日志捕获),导致连接瀚高库失败,程序的页面一片空白。

操作系统:UOS20

原因:

PHP 通过 libpq 访问瀚高库,libpq 的数据库连接信息中有 sslmode 参数,

在没有配置该参数时,默认 prefer(首先尝试 SSL 连接,如果失败再尝试非 SSL

连接)。尝试 SSL 连接时,因为客户端没有证书,导致失败。

例如:下面连接信息中没有配置 sslmode,默认是 prefer

$dsn = "pgsql:host=192.168.112.198;port=5866;dbname=highgo";

$db = new PDO($dsn, 'sysdba', 'Hello@123');

方案:没有特殊要求的,建议第二种方案 

第一种:

与客户沟通确认,如果客户不需要 ssl 连接,可以把瀚高库的 ssl 关闭

1) sysdba 登录数据库

2) alter system set ssl=off;

3) select pg_reload_conf();

第二种:

如果客户担心关闭 ssl 会影响等保测评或者其他测评,坚持开启 ssl,则数据库

ssl 不关闭。

在连接信息中添加 sslmode 参数,设置为 allow 即可。

例如:

$dsn = "pgsql:host=localhost;port=5866;dbname=highgo;sslmode=allow";

$db = new PDO($dsn, 'sysdba', 'Hello@123');

 

注意:

1、瀚高链接工把记住密码和是安全版全部勾选

2、是基于postgresql的,标准的SQL语句完全支持

3、初始化了的话,会有默认的数据库 highgo

4、新建数据库和数据库模式需要一致:例如数据库名:saibaodb  模式名:saibaodb

5修改postgresql.conf(数据库目录下的data)文件,添加模式

 

myphpdb(模式名以实际为准)

 

 

二、修改tp6配置

1、安装pdo_pgsql扩展

找到php自带的ext目录里的pgsql库

第二步: 切换目录到pgsql

第三步: 找到phpize   whereis phpize

第四步: 如下代码:

# /usr/bin/phpize

# ./configure --with-php-config=/usr/bin/php-config  #找到php-config位置

# make && make install

如果一起正常,会发现/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/这里会多两个pdo_pgsql.so 和 pgsql.so

./configure --with-php-config=/www/server/php/73/bin/php-config

 

 

 

Apache:php配置文件中,把pgsql相关的前边的;去掉, |   重启Apache   |  phpinfo(); 这时候发现扩展出来了

Nginx:php配置文件中,添加extengsions="pgsql.so", |   重启Nginx   |  phpinfo(); 这时候发现扩展出来了

 

2、修改根目录.env

APP_DEBUG = true

 

[APP]

DEFAULT_TIMEZONE = Asia/Shanghai

 

[DATABASE]

TYPE = pgsql

HOSTNAME = 127.0.0.1

DATABASE = saibaodb

USERNAME = sysdba

PASSWORD = Hello@123

HOSTPORT = 5866

CHARSET = UTF8

DEBUG = false

PREFIX = b_

 

[LANG]

default_lang = zh-cn

 

2、通过瀚高数据库链接工具增加自定义table_msg函数

 

 

找到\vendor\topthink\think-orm\src\db\connector\pgsql.sql

执行;

第一步:

CREATE OR REPLACE FUNCTION pgsql_type(a_type varchar) RETURNS varchar AS

$BODY$

DECLARE

     v_type varchar;

BEGIN

     IF a_type='int8' THEN

          v_type:='bigint';

     ELSIF a_type='int4' THEN

          v_type:='integer';

     ELSIF a_type='int2' THEN

          v_type:='smallint';

     ELSIF a_type='bpchar' THEN

          v_type:='char';

     ELSE

          v_type:=a_type;

     END IF;

     RETURN v_type;

END;

$BODY$

LANGUAGE PLPGSQL;

第二步:

CREATE TYPE "public"."tablestruct" AS (

  "fields_key_name" varchar(100),

  "fields_name" VARCHAR(200),

  "fields_type" VARCHAR(20),

  "fields_length" BIGINT,

  "fields_not_null" VARCHAR(10),

  "fields_default" VARCHAR(500),

  "fields_comment" VARCHAR(1000)

);

第三步:

CREATE OR REPLACE FUNCTION "public"."table_msg" (a_schema_name varchar, a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS

$BODY$

DECLARE

     v_ret tablestruct;

     v_oid oid;

     v_sql varchar;

     v_rec RECORD;

     v_key varchar;

BEGIN

     SELECT

           pg_class.oid  INTO v_oid

     FROM

           pg_class

           INNER JOIN pg_namespace ON (pg_class.relnamespace = pg_namespace.oid AND lower(pg_namespace.nspname) = a_schema_name)

     WHERE

           pg_class.relname=a_table_name;

     IF NOT FOUND THEN

         RETURN;

     END IF;

 

     v_sql='

    SELECT

      pg_attribute.attname AS fields_name,

      pg_attribute.attnum AS fields_index,

      pgsql_type(pg_type.typname::varchar) AS fields_type,

      pg_attribute.atttypmod-4 as fields_length,

      CASE WHEN pg_attribute.attnotnull  THEN ''not null''

      ELSE ''''

      END AS fields_not_null,

      '''' AS fields_default,

      pg_description.description AS fields_comment

FROM

      pg_attribute

      INNER JOIN pg_class  ON pg_attribute.attrelid = pg_class.oid

      INNER JOIN pg_type   ON pg_attribute.atttypid = pg_type.oid

      LEFT OUTER JOIN pg_attrdef ON pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = pg_attribute.attnum

      LEFT OUTER JOIN pg_description ON pg_description.objoid = pg_class.oid AND pg_description.objsubid = pg_attribute.attnum

WHERE

      pg_attribute.attnum > 0

      AND attisdropped <> ''t''

      AND pg_class.oid = ' || v_oid || '

ORDER BY pg_attribute.attnum' ;

     FOR v_rec IN EXECUTE v_sql LOOP

         v_ret.fields_name=v_rec.fields_name;

         v_ret.fields_type=v_rec.fields_type;

         IF v_rec.fields_length > 0 THEN

            v_ret.fields_length:=v_rec.fields_length;

         ELSE

            v_ret.fields_length:=NULL;

         END IF;

         v_ret.fields_not_null=v_rec.fields_not_null;

         v_ret.fields_default=v_rec.fields_default;

         v_ret.fields_comment=v_rec.fields_comment;

         SELECT constraint_name INTO v_key FROM information_schema.key_column_usage WHERE table_schema=a_schema_name AND table_name=a_table_name AND column_name=v_rec.fields_name;

         IF FOUND THEN

            v_ret.fields_key_name=v_key;

         ELSE

            v_ret.fields_key_name='';

         END IF;

         RETURN NEXT v_ret;

     END LOOP;

     RETURN ;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

第四步:

COMMENT ON FUNCTION "public"."table_msg"(a_schema_name varchar, a_table_name varchar)

IS '获得表信息';

 

---重载一个函数

第五步:

CREATE OR REPLACE FUNCTION "public"."table_msg" (a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS

$BODY$

DECLARE

    v_ret tablestruct;

BEGIN

    FOR v_ret IN SELECT * FROM table_msg('public',a_table_name) LOOP

        RETURN NEXT v_ret;

    END LOOP;

    RETURN;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

第六步:

COMMENT ON FUNCTION "public"."table_msg"(a_table_name varchar)

IS '获得表信息';

执行完毕后重启下apache和瀚高数据库

瀚高数据库重启命令:pg_ctl start #启动   

pg_ctl stop  #停止

 

修改tp6数据库配置文件datebase.php

// 是否严格检查字段是否存在

'fields_strict'   => false,

 

 

vendor/topthink/think-orm/src/db/connector/pgsql.sql中的

 

pg_attrdef.adsrc AS fields_default,

 

改为

 

'''' AS fields_default,

 

原因为PG12中这个表已没有该字段

 

注意,这里是4个单引号,而不是两个双引号

 

 

上面这一步操作最好删除public或者修改数据库里边的public重命名。不然会导致程序添加修改操作无效。

 

 

pgsql设置字段id自增

pgsql没有主键自动递增,需要自己做记录或者自己写函数

 

表已经建好后设置字段自增:

CREATE SEQUENCE user_id_seq START WITH 1  

INCREMENT BY 1  NO MINVALUE  NO MAXVALUE  CACHE 1;

alter table user alter column id set default nextval('user_id_seq');

 

建表时设置自增:

CREATE TABLE user

(  

  id SERIAL primary key

)

 

 

 

问题:SQLSTATE[42804]: Datatype mismatch: 7 错误: 字段 "menuid" 的类型为 integer, 但表达式的类型为 text
LINE 1: ...min_role_priv (menuid , parentid , roleid) SELECT $1,$2,$3 U...
^
HINT: 你需要重写或转换表达式

 

 

解决方案:批量插入改为单次插入

 

 

 

违反字段约束无法查看字段名解决方案

查询字段别名:

select * from DBA_CONS_COLUMNS

能看到对应的表名及字段名

至此链接瀚高数据库全部流程及常见错误都已处理!!!

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
IT-fengL3
粉丝 2 资源 195 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  129
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  30
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!