代码之家  ›  专栏  ›  技术社区  ›  Tony

我如何指定mysql sock文件位置来思考sphinx?

  •  2
  • Tony  · 技术社区  · 16 年前

    我的套接字文件位于此处:

    /var/run/mysqld/mysqld.sock
    

    当我这样做的时候:

    rake thinking_sphinx:start
    

    我得到:

    rake aborted!
    Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    

    我想告诉thinking su sphinx我的socket文件在哪里。这怎么可能?这个问题出现在对slicehost上的切片执行硬重启之后。

    4 回复  |  直到 13 年前
        1
  •  5
  •   ax. Clement Herreman    16 年前

    编辑以使(希望)更清楚:

    您可以指定要在sphinx搜索的配置文件中使用的mysql套接字, sphinx.conf 通过 sql_sock :

    sql_sock = /var/run/mysqld/mysqld.sock
    

    (注意,这取决于 sql_host 设置是否实际使用此值)

    你也可以使用thinking的配置文件, RAILS_ROOT/config/sphinx.yml ,要设置(覆盖)这些值:

    sql_sock: /var/run/mysqld/mysqld.sock
    
        2
  •  1
  •   jpemberthy    15 年前

    版本中 1.3.20 可以通过以下方式定义套接字路径: database.yml ,例如

    # database.yml
    development:
      adapter: mysql
      database: app_name_development
      username: root
      password: 
      socket: /tmp/mysql.sock
    

    现在, thinking-sphinx 将使用套接字路径=> /tmp/mysql.sock .

        3
  •  1
  •   James Boutcher theomega    13 年前

    来自边缘狮身人面像的一些有趣的代码片段,说明了狮身人面像 要求 TCP连接。

    从thinking ou sphinx/configuration.rb:

    def connection
    # If you use localhost, MySQL insists on a socket connection, but Sphinx
    # requires a TCP connection. Using 127.0.0.1 fixes that.
    address = searchd.address || '127.0.0.1'
    address = '127.0.0.1' if address == 'localhost'
    
    Mysql2::Client.new(
      :host  => address,
      :port  => searchd.mysql41,
      :flags => Mysql2::Client::MULTI_STATEMENTS
    )
    end
    
        4
  •  0
  •   user201254    16 年前

    AX的回答不起作用。

    您可以从提交49F467B25075666104A46B190139DD1DBB1452F中看到,有人在sphinxhelper中添加了支持来设置套接字。我没有使用这个方法,也没有太多的时间来测试它,所以您可以自己使用这个方法。

    而且,奇怪的是,在承诺中 http://github.com/freelancing-god/thinking-sphinx/commit/a12dbd55ed9046faf6369a3d0aa452b75a31b5b6 看起来他们通过database.yml添加了对套接字的支持,但是如果您查看当前的边缘代码,这似乎已经被删除了?

    简单回答:symlink你的mysqld.sock的实际位置sphinx正在寻找它。