PHP8.2添加达梦数据库PHP PDO_DM扩展

2024-12-22 / 0 评论 / 138 阅读 / 正在检测是否收录...

PHP8.2添加达梦数据库PHP PDO_DM扩展

环境描述

系统环境如下:

  • 银河麒麟高级服务器操作系统V10 SP3 X86架构(X64架构同样适用)
  • 达梦数据库V8版本ISO安装镜像文件 这个需要在达梦官网下载
  • php8.2 nts
  • 基于laravel 9
  • dcat-admin

由于银河麒麟操作系统V10基于CentOS8,并且无法安装epel-release源,更没办法使用Remi源,所以本次安装的PHP8.2假设我们是编译安装的。具体安装教程可以参考另外一篇文章:
国产银河麒麟服务器版(Host)V10 编译安装PHP8.2.

步骤概览

PHP安装PDO_DM模块分为以下几步:

  1. 本地安装达梦数据库V8客户端(服务端、混合安装均可),或者上传其他Linux系统上安装好的达梦数据库 bin目录,以及libphp82_dm.so、php82_pdo_dm.so两个文件
    这里包含了PDO_DM so模块依赖的达梦动态连接库
  2. 设置系统动态链接库路径,新增第一步中自己安装或者拷贝过来的bin目录路径,并重载ldconfig
  3. 拷贝PHP so模块文件到PHP扩展目录
  4. 测试PDO_DM功能

开始:

本地安装达梦数据库V8客户端

先从达梦官网下载iso程序镜像到/usr/local/src目录
之后按照以下命令执行:

[root@kylin-server-2 src]# cd /usr/local/src/
[root@kylin-server-2 src]# mkdir dmdbiso
[root@kylin-server-2 src]# ls
dm8_20240930_HG_kylin10_64.iso  dmdbiso  php-8.2.26  php-8.2.26.tar.gz
[root@kylin-server-2 src]# pwd
/usr/local/src
[root@kylin-server-2 src]# mount -o loop dm8_20240930_HG_kylin10_64.iso dmdbiso/
mount: /usr/local/src/dmdbiso: WARNING: source write-protected, mounted read-only.
[root@kylin-server-2 src]# ls dmdbiso/
'DM8 Install.pdf'   DMInstall.bin
###下面3行设置系统环境,为达梦数据库安装做准备
[root@kylin-server-2 src]# useradd dmdba
[root@kylin-server-2 src]# export DM_INSTALL_TMPDIR=/usr/local
[root@kylin-server-2 src]# cd dmdbiso/
[root@kylin-server-2 dmdbiso]# 

#开始安装
[root@kylin-server-2 dmdbiso]# ./DMInstall.bin -i
安装语言: 
[1]: 简体中文
[2]: English
 请选择安装语言 [1]:  1
解压安装程序......... 
硬件架构校验通过!
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7546
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7546
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可打开文件数过少,建议至少设置为65536或更多。

欢迎使用达梦数据库安装程序

 是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]: N

 是否设置时区? (Y/y:是 N/n:否) [Y/y]: N

安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
 请选择安装类型的数字序号 [1 典型安装]: 1
所需空间: 2170M

 请选择安装目录 [/opt/dmdbms]: /usr/local/dmdbms
可用空间: 37G
 是否确认安装路径(/usr/local/dmdbms)? (Y/y:是 N/n:否)  [Y/y]: Y

安装前小结
安装位置: /usr/local/dmdbms
所需空间: 2170M
可用空间: 37G
版本信息: 
有效日期: 
安装类型: 典型安装
 是否确认安装? (Y/y:是 N/n:否): Y
2024-12-27 10:16:39 
[INFO] 安装达梦数据库...
2024-12-27 10:16:40 
[INFO] 安装 基础 模块...
2024-12-27 10:16:46 
[INFO] 安装 服务器 模块...
2024-12-27 10:16:48 
[INFO] 安装 客户端 模块...
2024-12-27 10:16:51 
[INFO] 安装 驱动 模块...
2024-12-27 10:16:53 
[INFO] 安装 手册 模块...
2024-12-27 10:16:54 
[INFO] 安装 服务 模块...
2024-12-27 10:16:54 
[INFO] 移动日志文件。
2024-12-27 10:16:55 
[INFO] 正在启动DmAPService服务...
2024-12-27 10:16:55 
[INFO] 启动DmAPService服务成功。
2024-12-27 10:16:55 
[INFO] 安装达梦数据库完成。

安装结束

[root@kylin-server-2 dmdbiso]# cd /usr/local/src/
[root@kylin-server-2 dmdbiso]# umount dmdbiso

达梦数据库安装完成。
上图中有一部分提示我们ulimit参数没有优化,本文最后有优化ulimit参数方法。

达梦数据库目录如下:(yum install tree -y 安装tree命令)

[root@kylin-server-2 ~]# tree /usr/local/dmdbms -L 1
/usr/local/dmdbms
├── bin    #pdo_扩展依赖的动态链接库目录
├── bin2
├── desktop
├── doc
├── drivers  #驱动目录,达梦数据库php Pdo驱动模块文件就在这个路径下的php_pdo目录
├── include
├── jar
├── jdk
├── license_chs.txt
├── license_cht.txt
├── license_en.txt
├── log
├── samples
├── script
├── tool
├── uninstall
└── uninstall.sh

[root@kylin-server-2 ~]# ls /usr/local/dmdbms/drivers/php_pdo
libphp52_dm.so     libphp54_dm.so    libphp56ts_dm.so  libphp72_dm.so    libphp74ts_dm.so  libphp82_dm.so    php52ts_pdo_dm.so  php55_pdo_dm.so    php70ts_pdo_dm.so  php73_pdo_dm.so    php80ts_pdo_dm.so  php83_pdo_dm.so
libphp52ts_dm.so   libphp54ts_dm.so  libphp70_dm.so    libphp72ts_dm.so  libphp80_dm.so    libphp82ts_dm.so  php53_pdo_dm.so    php55ts_pdo_dm.so  php71_pdo_dm.so    php73ts_pdo_dm.so  php81_pdo_dm.so    php83ts_pdo_dm.so
libphp53_dm.so     libphp55_dm.so    libphp70ts_dm.so  libphp73_dm.so    libphp80ts_dm.so  libphp83_dm.so    php53ts_pdo_dm.so  php56_pdo_dm.so    php71ts_pdo_dm.so  php74_pdo_dm.so    php81ts_pdo_dm.so
libphp53_mysql.so  libphp55ts_dm.so  libphp71_dm.so    libphp73ts_dm.so  libphp81_dm.so    libphp83ts_dm.so  php54_pdo_dm.so    php56ts_pdo_dm.so  php72_pdo_dm.so    php74ts_pdo_dm.so  php82_pdo_dm.so
libphp53ts_dm.so   libphp56_dm.so    libphp71ts_dm.so  libphp74_dm.so    libphp81ts_dm.so  php52_pdo_dm.so   php54ts_pdo_dm.so  php70_pdo_dm.so    php72ts_pdo_dm.so  php80_pdo_dm.so    php82ts_pdo_dm.so

本次php PDO_DM模块只需要关注
/usr/local/dmdbms/bin 和
/usr/local/dmdbms/drivers/php_pdo这两个目录下内容。

把达梦bin目录下的动态库文件添加到系统动态库加载项

[root@kylin-server-2 ~]# echo "/usr/local/dmdbms/bin" > /etc/ld.so.conf.d/php-dm.conf
[root@kylin-server-2 ~]# ldconfig 
ldconfig: /usr/local/dmdbms/bin/libxerces-c-3.1.so 不是符号链接

ldconfig: /usr/local/dmdbms/bin/libgeos_c.so.1 不是符号链接
#(这两条警告信息可忽略)
[root@kylin-server-2 ~]# 

拷贝达梦 php 模块文件到PHP扩展目录下

本次一并操作了 php的dm模块和PDO_DM模块

[root@kylin-server-2 ~]# cp /usr/local/dmdbms/drivers/php_pdo/libphp82_dm.so /usr/local/php82/lib/php/extensions/no-debug-non-zts-20220829/
[root@kylin-server-2 ~]# cp /usr/local/dmdbms/drivers/php_pdo/php82_pdo_dm.so /usr/local/php82/lib/php/extensions/no-debug-non-zts-20220829/

修改php.ini,引入达梦数据库模块

[root@kylin-server-2 ~]# echo "extension=libphp82_dm" >> /etc/php82/php.ini
[root@kylin-server-2 ~]# echo "extension=php82_pdo_dm" >> /etc/php82/php.ini

[root@kylin-server-2 ~]# echo 'export PATH=$PATH:/usr/local/php82/bin' >> /etc/bashrc
[root@kylin-server-2 ~]# source !$
source /etc/bashrc

注意

[root@kylin-server-2 ~]# php -m 
php: relocation error: /usr/lib64/libcurl.so.4: symbol SSLv3_client_method version OPENSSL_1_1_0 not defined in file libssl.so.1.1 with link time reference

配置完成,检测

[root@kylin-server-2 ld.so.conf.d]# php -m | grep -i dm
dm
PDO_DM

#这里显示dm和PDO_DM模块已经被安装并且成功加载了。
## 然后使用以下脚本检测Pdo模块功能
[root@kylin-server-1 ~]# cd /tmp/
[root@kylin-server-1 tmp]# cat >dm_db.php<<EOF
<?php
try
{
        //数据库链接字符串
        $dn="dm:host=192.168.12.10;port=5236;dbname=PHP";
        $pdo = new PDO($dn,"PHP","b5KJqM4F57"); //用户名 ,密码<br>
        $query="SELECT * FROM  PHP.\"tgs\""; //测试查询语句
        $stmt = $pdo->query($query);
        if(!$stmt)//如果出现了错误,获得错误信息
        {
                echo "<pre>";
                echo $pdo->errorCode();
                print_r($pdo->errorInfo());
                echo "</pre>";
                die();
        }
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo "<pre>";
        print_r($rows);
        echo "</pre>";
}catch(PDOException $e){
        print "Error: " . $e->getMessage()."<br/>";
}
EOF

[root@kylin-server-1 tmp]# php dm_db.php 
<pre>Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 来自PHP PDO_DM模块的检测                   
        )

    [1] => Array
        (
            [id] => 2
            [name] => bbb1                                              
        )

)
</pre>[root@kylin-server-1 tmp]# 
## 测试表需要自己创建,我这里是名为PHP模式下的tgs表,有id和name两列。查到此内容则表示测试OK.

优化ulimit参数方法

#先查看当前设置:
[root@kylin-server-2 ~]# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7546
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7546
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

[root@kylin-server-2 ~]# ulimit -SHn 65535
cat >> /etc/security/limits.conf<<EOF
* soft    nofile  1024000
* hard    nofile  1024000
* soft    nproc   1024000
* hard    nproc   1024000
* soft core unlimited
* soft stack 10240
EOF

## 再次查看ulimit设置
[root@kylin-server-2 ~]# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7546
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7546
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

这里已经看到参数修改好了。

可用的命令

ldconfig  ##重载系统动态链接库
ldconfig -v  ##查看重载链接库详细过程,并显示链接库名
ldd libssl.so   ##查看libssl.so链接库依赖哪些库
0

评论 (0)

取消