【问题标题】:PHP not able to connect to MySQL in Ubuntu based custom S2I imagePHP 无法在基于 Ubuntu 的自定义 S2I 映像中连接到 MySQL
【发布时间】:2018-08-04 04:56:15
【问题描述】:

在我的自定义服务器上使用 Openshift origin 3.9。到目前为止,这是一次愉快的经历。我一直在为我的 LEMP 堆栈构建一个基于 Ubuntu 的 custom s2i image

我无法连接到 MySQL 数据库。我总是收到一条错误消息:

连接 MySQL 失败:(2002) 没有这样的文件或目录

这是我的 PHP 代码:

$mysql_database = getenv("MYSQL_DATABASE");
$mysql_server_name =getenv("MYSQL_HOST");
$mysql_username = getenv("MYSQL_USER");
$mysql_password = getenv("MYSQL_PASSWORD");
$mysql_port = getenv("MYSQL_PORT");
$mysqli = new mysqli($mysql_server_name, $mysql_username, $mysql_password, $mysql_database, $mysql_port);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    die();
}

一些观察:

我可以从 Pod 内部的 MySQL CLI 客户端进行连接。

相同的应用程序/代码适用于官方的 openshift PHP s2i 映像。

我的 s2i 中是否缺少任何内容?

【问题讨论】:

  • 在您的前端部署配置中设置的MYSQL_HOST 环境变量是什么? MySQL 部署的名称是什么,或者更具体地说,它的服务对象是什么?

标签: php openshift openshift-origin openshift-3


【解决方案1】:

检查您的 phpinfo() 并搜索 MySQLi 扩展。如果找不到,则表示您尚未安装扩展程序,需要安装它。

尝试从终端安装

(Ubuntu/Mint) $ sudo apt-get install php(version)-mysql

用您的任何 php 版本号替换 (version)。比如php7.0/php7.1等

要检查 phpinfo(),请创建一个 phpinfo.php 文件,您可以从 url 访问该文件的内容

<?php
phpinfo()

如果您拥有一切但仍然无法连接?尝试检查您的 mysql.sock 文件路径。

打开php.ini文件,找到这一行:

mysql.default_socket

然后做(知道你的 mysql.sock 的位置)

mysql.default_socket = /path/to/mysql.sock

【讨论】:

  • 嗨,是的,我安装了 mysql 扩展。可以查看对应镜像的Dockerfile。
  • 从终端访问 MySQL 和从 PHP 访问是完全不同的故事。从您的图像中,我只能找到您正在使用终端通过 MySQL 客户端访问 MySQL。如果你查看 phpinfo() 报告,你就会知道其中的区别。
  • True :) 这是 Ubuntu 堆栈(不工作)ubuntu-lemp.lakshminp.com/info.php 和 Centos 堆栈(工作)centos-lemp.lakshminp.com/info.php 的 phpinfo 转储
  • 编辑我的答案,你可以检查一下 mysql.sock 我曾经遇到过同样的问题。
  • 是的,我也检查过。 mysqli.default_socket 和 pdo_mysql.default_socket 都指向 /var/lib/mysql/mysql.sock。
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 2019-06-01
  • 2015-11-14
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多