文章大纲

linux64位下神通数据库的安装及对应php的数据库驱动安装

2020-09-26 21:57:04

这周给服务器安装环境,其中一部分是安装神通数据库。由于网上有关神通数据库的资料实在是不多,踩了不少坑,本文现将安装的详细过程及其中遇到的坑记录下来。


备份旧服务器上的神通数据库

开发环境是Windows系统,有安装神通对应的软件工具,其中“DBA管理工具”软件就可以对数据库进行逻辑备份,将数据库导出成osr后缀的文件。


新服务器上安装神通数据库

此次要安装环境的服务器主板是龙芯主板(loongson),神通数据库有对应的源码,可自行下载:各个类型版本的神通数据库下载


下载安装包(假定是shentong.tar.gz),解压后,开始进行安装(假定解压在/opt/shentong目录下)。

1. 全局修改st.propertities文件

修改/opt/shentong/Disk1/InstData/st.propertities文件,将OSRDB全部替换成我们要建的数据库名,例如BLUEZHAI。

:s/OSRDB/BLUEZHAI/g

查了许久资料,也尝试了许久时间,没能找到什么时候可以自行用命令创建数据库,所以只好将默认数据库直接改成我想要的数据库。

要建多个库的话,我这种方式就行不通了。


2.执行安装命令,开始安装神通数据库

cd /opt/shentong/Disk1/InstData
./setup.bin -f st.propertities


3.替换安装包里的授权码

神通数据库是国产数据库,而且是需要付费的,而这个工作是通过源码里的授权码来实现的。

授权码位置:/opt/shentong/license/oscar.license

授权码无效的话,数据库就会无法启动,在日志/opt/shentong/log/目录下的elog文件里,你就会看到大致如下的报错信息:

ERROR, 打开license文件/opt/ShenTong/license/oscar.license失败


4.数据库服务的启动和停止

/etc/init.d/oscardb_BLUEZHAId start
/etc/init.d/oscardb_BLUEZHAId stop

将BLUEZHAI替换成自己的数据库名即可。



5.修改用户名和密码

神通数据库默认为提供如下账号密码:

用户名 sysdba
密码 szoscar55

在生产环境里,我们肯定不能使用这个账号和密码。


在修改用户名和密码之前,我们得先保证默认的账号密码能够远程连接数据库。神通数据库有专门提供Windows平台下的SQL交互工具这一软件来连接数据库并执行sql语句的。这一步没成功就不要继续后面的了。


神通数据库安装包自带isql命令,通过它可以连接访问数据库。

先echo下path,看看系统默认环境变量路径有哪些:

echo $PATH


给isql创建软链接:

ln -s /opt/ShenTong/bin/isql /usr/local/bin/isql

本人这里PATH变量路径里包含/usr/local/bin的默认路径。如此建立好了,就可以直接使用isql命令去连接神通数据库了。


连接数据库:

isql -d BLUEZHAI


接下来才是真正的开始修改用户名和密码了。


本人没有直接的修改用户名,而是通过修改sysdba用户的密码,以及新增一个新用户(新增的用户名和密码,要和程序里数据库配置保持一致)来解决的。

SQL> create user blue2020 with password 'djf3u2oc&8df*';
CREATE USER
SQL> alter user sysdba with password '3243ioudoifsldkjr32oiuo3djfdsk';
ALTER USER
SQL> grant role sysdba to user blue2020;
GRANT

其中grant role是给用户指定角色权限的,默认创建的用户账号,远程连接会提示“没有权限访问”。

恢复数据库

上面我们只是创建的空数据库,现在将一开始备份的osr文件,同样通过“DBA管理工具”进行逻辑恢复即可。几乎算得上是一键搞定,很简单的。

给php安装神通数据库驱动扩展

php程序要连接神通数据库,还得给php安装支持此数据库的扩展。例如mysql需要安装pdo_mysql驱动扩展,sqlite类型的则需要pdo_sqlite的驱动扩展。

神通数据库的这个驱动扩展不需要我们编译安装,so文件在安装包里就直接好了。
将pdo_aci_nts.so扩展文件配置到php.ini里,只要对眼儿,就ok了。

目前神通最新的安装包里扩展最高只支持php7.2版本,本人开始安装的php7.4 ZTS(线程安全)版本时,扩展始终安装不成功,后换成php.7.3.22 NTS(线程非安全)版本时,扩展才终于在phpinfo里露出真容了。


对眼儿的过程很艰辛,就看大家的运气如何了。

本文为翟码农个人博客里Linux分类下的有关神通数据库安装的原创文章,转载请注明出处:http://www.zhai14.com/blog/installation-of-oscar-database-in-linux.html

本人踩的坑:

1.编译php时,配置参数有误

编译php时,其中有个配置参数写成如下:
--with-config-file-path=/etc/php.ini
如此就会导致phpinfo里配置路径这块显示为None
Configuration File (php.ini) Path	/etc/php.ini
Loaded Configuration File    None
这种情况就会带来无论在/etc/php.ini里怎么配扩展,扩展永远都不会出来的情况。最终尝试将扩展随便改了个名字,才发现仍然不报错,本人这才将问题怀疑到“Loaded Configuration File None”这上来。

编译php时,配置参数写成如下即可,不用带上php.ini文件名
--with-config-file-path=/etc
这样编译后,phpinfo里配置信息显示如下(正常的情形):
Configuration File (php.ini) Path	/etc
Loaded Configuration File  /etc/php.ini

2. 扩展加到php.ini文件里后,一直报错

扩展加到php.ini文件里后,也重启了php-fpm服务,可是执行php命令时,一直报如下错误信息如下:
Warning: PHP Startup: Unable to load dynamic library 'pdo_aci_nts' 
(tried: /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/pdo_aci_nts
 (/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/pdo_aci_nts: cannot open shared object file: No such file or directory),
 /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/pdo_aci_nts.so 
(libaci.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
关于libaci.so这个文件在神通数据库安装包/opt/shentong/bin下有。
echo $PATH 时,发现目录里并没有/opt/shentong/bin这一目录,但是/etc/profile里都有这些路径配置的。
执行source /etc/profile后,再执行php命令就不报上面警告了。

可是服务器一重启,PATH变量就又还原了。
按照网上指示,先是创建了个/etc/rc.local文件,里面加入source /etc/profile,好像并不太好使,后面继续在/root/.bashrc里加入source /etc/profile就OK了。

本人服务器一开始是没有/etc/rc.local这一文件的,一开始直接加,重启没能执行/etc/profile里的命令,后面换成如下方式,重启服务器再执行/etc/profile就没问题了。
sudo vim /etc/systemd/system/rc-local.service
[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
[Install]
 WantedBy=multi-user.target

//激活rc-local.service
sudo systemctl enable rc-local.service

//赋予执行权限
touch /etc/rc.local
chmod +x /etc/rc.local

关于神通数据库是如何通过命令来创建数据库的,这一问题后面有琢磨出来,翟码农再来更新此文。


我要评论
评论列表