2011-05-27 18 views
5

Anteriormente tuve el problema de que mis aplicaciones C buscaban un socket en /tmp/mysql.sock, pero mi ubicación de socket se había establecido en /var/run/mysqld.sock. Ahora cambié la configuración en my.cnf para poner siempre el socket en/tmp.PHP establecer ubicación de socket MySQL

Ahora, cuando intento ejecutar mi aplicación web usando nginx y php5-fpm, no encuentra el socket porque todavía se ve en /var/run/mysqld.sock. Al principio creé un enlace, pero luego noté que cada vez que reinicio la máquina, este enlace se elimina.

Busqué en mi php.ini y puse las tres (pdo_mysql.default_socket, mysql.default_socket, mysqli.default_socket) opciones de socket disponibles en /tmp/mysql.sock. Hice esto en la carpeta cgi, cli y fpm. Sin embargo, todavía no funciona. ¿Hay alguna otra opción que necesite agregar? ¿O debería reconsiderar mi enfoque en general?

Heres mi php.ini:

[PHP] 

    engine = On 
    short_open_tag = On 
    asp_tags = Off 
    precision = 14 
    y2k_compliance = On 
    output_buffering = 4096 
    zlib.output_compression = Off 
    implicit_flush = Off 
    unserialize_callback_func = 
    serialize_precision = 100 
    allow_call_time_pass_reference = Off 
    s afe_mode = Off 
    safe_mode_gid = Off 
    safe_mode_include_dir = 
    safe_mode_exec_dir = 
    safe_mode_allowed_env_vars = PHP_ 
    safe_mode_protected_env_vars = LD_LIBRARY_PATH 
    disable_functions = 
    disable_classes = 
    expose_php = On 
    max_execution_time = 30 
    max_input_time = 60 
    memory_limit = 128M 
    error_reporting = E_ALL & ~E_DEPRECATED 
    display_errors = Off 
    display_startup_errors = Off 
    log_errors = On 
    log_errors_max_len = 1024 
    ignore_repeated_errors = Off 
    ignore_repeated_source = Off 
    report_memleaks = On 
    track_errors = Off 
    html_errors = Off 
    variables_order = "GPCS" 
    request_order = "GP" 
    register_globals = Off 
    register_long_arrays = Off 
    register_argc_argv = Off 
    auto_globals_jit = On 
    post_max_size = 8M 
    magic_quotes_gpc = Off 
    magic_quotes_runtime = Off 
    magic_quotes_sybase = Off 
    auto_prepend_file = 
    auto_append_file = 
    default_mimetype = "text/html" 
    doc_root = 
    user_dir = 
    enable_dl = Off 
    file_uploads = On 
    upload_max_filesize = 2M 
    max_file_uploads = 20 
    allow_url_fopen = On 
    allow_url_include = Off 
    default_socket_timeout = 60 

    [Date] 
    [filter] 
    [iconv] 
    [intl] 
    [sqlite] 
    [sqlite3] 
    [Pcre] 
    [Pdo] 
    [Pdo_mysql] 
    pdo_mysql.cache_size = 2000 
    pdo_mysql.default_socket=/tmp/mysql.sock 
    [Phar] 
    [Syslog] 
    define_syslog_variables = Off 
    [mail function] 
    SMTP = localhost 
     smtp_port = 25 
    mail.add_x_header = On 
    [SQL] 
    sql.safe_mode = Off 
    [ODBC] 
    odbc.allow_persistent = On 
    odbc.check_persistent = On 
    odbc.max_persistent = -1 
    odbc.max_links = -1 
    odbc.defaultlrl = 4096 
    odbc.defaultbinmode = 1 
    [Interbase] 
    ibase.allow_persistent = 1 
    ibase.max_persistent = -1 
    ibase.max_links = -1 
    ibase.timestampformat = "%Y-%m-%d %H:%M:%S" 
    ibase.dateformat = "%Y-%m-%d" 
    ibase.timeformat = "%H:%M:%S" 
    [MySQL] 
    mysql.allow_local_infile = On 
    mysql.allow_persistent = On 
    mysql.cache_size = 2000 
    mysql.max_persistent = -1 
    mysql.max_links = -1 
    mysql.default_port = 
    mysql.default_socket=/tmp/mysql.sock 
    mysql.default_host= 
    mysql.default_user = 
    mysql.default_password = 
    mysql.connect_timeout = 60 
    mysql.trace_mode = Off 
    [MySQLi] 
    mysqli.max_persistent = -1 
    mysqli.allow_persistent = On 
    mysqli.max_links = -1 
    mysqli.cache_size = 2000 
    mysqli.default_port = 3306 
    mysqli.default_socket =/tmp/mysql.sock 
    mysqli.default_host = 
    mysqli.default_user = 
    mysqli.default_pw = 
    mysqli.reconnect = Off 
    [mysqlnd] 
    mysqlnd.collect_statistics = On 
    mysqlnd.collect_memory_statistics = Off 
    [OCI8] 
    [PostgresSQL] 
    pgsql.allow_persistent = On 
    pgsql.auto_reset_persistent = Off 
    pgsql.max_persistent = -1 
    pgsql.max_links = -1 
    pgsql.ignore_notice = 0 
    pgsql.log_notice = 0 
    [Sybase-CT] 
    sybct.allow_persistent = On 
    sybct.max_persistent = -1 
    sybct.max_links = -1 
    sybct.min_server_severity = 10 
    sybct.min_client_severity = 10 
    [bcmath] 
    bcmath.scale = 0 
    [browscap] 
    [Session] 
    session.save_handler = files 
    session.use_cookies = 1 
    session.use_only_cookies = 1 
    session.name = PHPSESSID 
    session.auto_start = 0 
    session.cookie_lifetime = 0 
    session.cookie_path =/
    session.cookie_domain = 
    session.cookie_httponly = 
    session.serialize_handler = php 
    session.gc_probability = 1 
    session.gc_divisor = 1000 
    session.gc_maxlifetime = 1440 
    session.bug_compat_42 = Off 
    session.bug_compat_warn = Off 
    session.referer_check = 
    session.entropy_length = 0 
    session.cache_limiter = nocache 
    session.cache_expire = 180 
    session.use_trans_sid = 0 
    session.hash_function = 0 
    session.hash_bits_per_character = 5 
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" 
    [MSSQL] 
    mssql.allow_persistent = On 
    mssql.max_persistent = -1 
    mssql.max_links = -1 
    mssql.min_error_severity = 10 
    mssql.min_message_severity = 10 
    mssql.compatability_mode = Off 
    mssql.secure_connection = Off 
    [Assertion] 
    [COM] 
    [mbstring] 
    [gd] 
    [exif] 
    [Tidy] 
    tidy.clean_output = Off 
    [soap] 
    soap.wsdl_cache_enabled=1 
    soap.wsdl_cache_dir="/tmp" 
    soap.wsdl_cache_ttl=86400 
    soap.wsdl_cache_limit = 5 
    [sysvshm] 
    [ldap] 
    ldap.max_links = -1 
    [mcrypt] 

[dba] 

También, aquí está el nginx error.log:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' in /var/www/php_includes/sfunctions.php:250 

Así es como actualmente accedo a la db a través de DOP en PHP:

$db = new PDO('mysql:host=localhost;dbname=mydb', $dbUser, $dbPass); 
+0

Publique su php.ini sin comentarios. Debe tener algo que ver con su php.ini o la forma en que maneja su conexión a la base de datos en su código. –

+0

Edité mi publicación y usé php5/fpm/php.ini como base. Tampoco sé muy bien si tengo que editarlos a los tres todo el tiempo. Realmente no tendría ningún sentido, ¿verdad? –

Respuesta

6

No sé por qué su configuración predeterminada no se actualiza, pero puede establecer la ubicación del socket en el momento de la conexión, por ejemplo:

DSN for PDO: 
mysql:unix_socket=/tmp/mysql.sock;dbname=... 

mysql_connect: 
$db = mysql_connect('localhost:/tmp/mysql.sock', ... 
+0

Gracias, +1 buen trabajo. Si no puedo encontrar la razón por la cual mi configuración php.ini no funciona, voy a seguir este método. –

Cuestiones relacionadas