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