过去两个晚上我一直在努力在 Amazon ec2 上设置自己的 LEMP 服务器。我不是服务器专家,所以进展很慢,而且在尝试创建新的 PDO 对象时,出现了最新的错误“找不到驱动程序”。
我读过几十条关于此错误的帖子,但不幸的是,没有一个修复方法对我有用。大多数情况下,他们都说我必须安装 php-mysql - 但当然这是不可能的:
$ sudo yum install php-mysql
Last metadata expiration check: 0:22:54 ago on Sat 17 Aug 2019 02:26:41 AM UTC.
No match for argument: php-mysql
Error: Unable to find a match
同时,phpinfo() 似乎报告驱动程序是安裝了??
MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter
但在 phpinfo() 的 PDO 部分下,它显示:
PDO drivers odbc, sqlite
所以我认为 mysql 驱动程序确实丢失了?我又回到了原点 - 找到它并安装它...但是如何找到适合我的设置的驱动程序呢?我尝试使用 yum 进行搜索,但失败了(大惊喜):
$ yum search php-
Red Hat Update Infrastructure 3 Client Configuration Server 8 0.0 B/s | 0 B 00:00
Error: Failed to synchronize cache for repo 'rhui-client-config-server-8'
在 Google 上搜索该错误让我迷失了另外一百多个线程,但都无济于事。
有人能给我指出正确的方向吗?我想我需要运行一个特定于我的设置的简单命令,我只需要弄清楚它是什么。
我还尝试过其他一些方法:
- 从 Linux 命令提示符运行 php 脚本来验证问题是否存在:确实如此
- 检查 php.ini 设置(它们看起来不错,我会将它们粘贴在下面)
- 检查 /etc/php-fpm.d/www.conf 设置(这些看起来也不错,将粘贴在下面)
这是我的各种操作系统的详细信息:
$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.0 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.0"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.0 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.0:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.0
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.0"
$ php -v
PHP 7.2.11 (cli) (built: Oct 9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
$ nginx -v
nginx version: nginx/1.14.1
$ mysql --version
mysql Ver 8.0.17 for Linux on x86_64 (Source distribution)
以及 php.ini 的一些摘录:
[Pdo]
; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off"
; http://php.net/pdo-odbc.connection-pooling
;pdo_odbc.connection_pooling=strict
;pdo_odbc.db2_instance_name
[Pdo_mysql]
; If mysqlnd is used: Number of cache slots for the internal result set cache
; http://php.net/pdo_mysql.cache_size
pdo_mysql.cache_size = 2000
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=
摘自/etc/php-fpm.d/www.conf:
user = nginx
group = nginx
希望这些信息足够了——提前感谢您的帮助!
答案1
PHP PDO MySQL 驱动程序位于名为 的包中php-mysqlnd
。安装此包,然后重新启动php-fpm
服务。
[root@rhel8 ~]# dnf info php-mysqlnd
Updating Subscription Management repositories.
Last metadata expiration check: 0:08:40 ago on Sat 17 Aug 2019 01:48:02 AM EDT.
Installed Packages
Name : php-mysqlnd
Version : 7.2.11
Release : 1.module+el8+2561+1aca3413
Arch : x86_64
Size : 451 k
Source : php-7.2.11-1.module+el8+2561+1aca3413.src.rpm
Repo : @System
From repo : rhel-8-for-x86_64-appstream-rpms
Summary : A module for PHP applications that use MySQL databases
URL : http://www.php.net/
License : PHP
Description : The php-mysqlnd package contains a dynamic shared object that
: will add MySQL database support to PHP. MySQL is an
: object-relational database management system. PHP is an
: HTML-embeddable scripting language. If you need MySQL support for
: PHP applications, you will need to install this package and the
: php package.
:
: This package use the MySQL Native Driver
[root@rhel8 ~]#