无法使用 PHP 和 PDO 连接到 Sphinx

Cannot connect to Sphinx with PHP and PDO

我似乎遇到了我不明白的问题...

我已经安装了MySQL8.0.27 我已经安装了 Sphinx,创建了一个索引,填充了它,通过终端一切正常。 能够毫无问题地查询 Spinx 索引。所以 searchd 和索引器正在做他们的工作。

我创建了一个简单的 PHP 界面来使用 PHP 搜索此索引。但这就是事情变得奇怪的地方......

我无法连接到 sphinx 实例(它确实通过终端工作..)--> SQLSTATE[HY000] [2002] 权限被拒绝

我的sphinx.conf

source page
{
        type = mysql

        sql_host = localhost
        sql_db   = db
        sql_user = user
        sql_pass = password
        sql_port = 3306

        sql_query = SELECT p.id, p.parent_id, p.date_add, p.version, p.content, p.pagenumber, p.status, pp.filename, pp.pages  FROM page p LEFT JOIN parent_page pp ON p.parent_id=pp.id

        sql_field_string = content
}

index pagedata
{
        source = wob
        path = /etc/sphinx/data/page
        morphology = none

        min_word_len = 2
        min_prefix_len = 0
}

searchd
{
    listen = 9312
    listen = 9306:mysql41
    log = /var/log/sphinx/searchd.log
    query_log = /var/log/sphinx/query.log

    read_timeout = 5
    max_children = 30
        pid_file                = /etc/sphinx/sphinx-searchd.pid
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        workers                 = threads # for RT to work
        binlog_path             = /var/log/sphinx/
}

这是狮身人面像状态

Sphinx 3.3.1 (commit b72d67b)
Copyright (c) 2001-2020, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)

using config file '/etc/sphinx/etc/sphinx.conf'...

searchd status
--------------
uptime: 4419 
connections: 6 
maxed_out: 0 
command_search: 3 
command_snippet: 0 
command_update: 0 
command_delete: 0 
command_keywords: 0 
command_persist: 0 
command_status: 3 
command_flushattrs: 0 
agent_connect: 0 
agent_retry: 0 
queries: 2 
dist_queries: 0 
query_wall: 0.009 
query_cpu: OFF 
dist_wall: 0.000 
dist_local: 0.000 
dist_wait: 0.000 
query_reads: OFF 
query_readkb: OFF 
query_readtime: OFF 
avg_query_wall: 0.005 
avg_query_cpu: OFF 
avg_dist_wall: 0.000 
avg_dist_local: 0.000 
avg_dist_wait: 0.000 
avg_query_reads: OFF 
avg_query_readkb: OFF 
avg_query_readtime: OFF 
qcache_cached_queries: 0 
qcache_used_bytes: 0 
qcache_hits: 0 
sql_parse_error: 2 
sql_dummy: 1 
sql_select: 3 
sql_select_sysvar: 2 

这是我用于从我的 PHP 脚本连接到 Sphinx 的代码...这导致了此 post...

顶部提到的错误
<?php
try {
    $pdo = new PDO("mysql:host=localhost:9306");
    // set the PDO error mode to exception
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec('SET NAMES utf8');
} catch (PDOException $e) {
    echo "Connection failed to API database: " . $e->getMessage();
}

通过终端连接没问题,查询运行良好且快速...

[root@web03 bin]# mysql -h0 -P9306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 3.3.1 (commit b72d67b) 

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

$pdo = new PDO() 部分失败。无法建立连接。我尝试用 127.0.0.1 替换 localhost,尝试将端口替换为 9312(参见配置)以及这些之间的所有组合。没有骰子。

有人有线索或提示吗?这让我发疯...

刚刚安装了 Manticore Search 4.2,它遇到了完全相同的问题...这让我开始思考。

原来是因为 SELinux...This post 有适合我的解决方案。所以它与 Sphinx 或 Manticore Search 无关...是我的 SELinux 设置阻止我从 http 用户建立数据库连接。

答案有 4 个简单的步骤来永久允许,一切都非常有效!