2012-09-25 21 views
12

Acabo de instalar un servidor MySQL (versión 3.23.58) en un antiguo RedHat7. No puedo instalar una versión más reciente de MySQL debido a las dependencias. No puedo actualizar librairies en este servidor RedHat.mysql_connect(): Ningún archivo o directorio

Sin embargo, tengo un problema al conectarme a la base de datos con PHP. Primero usé PDO pero me di cuenta de que PDO no era compatible con MySQL 3.23 ...

Así que usé mysql_connect(). Ahora tengo el siguiente error:

Warning: mysql_connect(): No such file or directory in /user/local/apache/htdocs/php/database.php on line 9 
Error: No such file or directory 

Mi código es:

$host = 'localhost'; 
$user = 'root'; 
$password = ''; 
$database = 'test'; 
$db = mysql_connect($host, $user, $password) or die('Error : ' . mysql_error()); 
mysql_select_db($database); 

que comprueba que existe el doble de la base de datos y el nombre de usuario y la contraseña son correctos.

Esto es extraño porque el código funciona bien en mi PC con Windows con Wampp. No puedo entender de dónde viene el problema.

¿Alguna idea?

+2

Comenzar a utilizar DOP o mysqli_ * en lugar de mysql_ * – Leri

+6

@PLB: ¿Ha leído la pregunta o simplemente el código? –

+3

Si insiste en utilizar MySQL 3.xy con las funciones 'mysql_ *', que pronto quedarán obsoletas, le recomendamos que compruebe en su 'php.ini' si la extensión' php_mysql' está habilitada. – Havelock

Respuesta

32

¡Sí, no se puede conectar así!

@PLB y @jammypeach mysqli está después de v4.1, él está usando v3 :) ¡Los chicos leen las especificaciones, si realmente quieren ayudar!

No puede conectarse, porque su archivo de socket está un poco mal. Ahora recuerdo que el viejo RH tenía este problema antes. Su socket es probablemente /var/mysql/mysql.sock o /tmp/mysql.sock, pero una o más aplicaciones están buscando la otra.

Si la suya es /tmp/mysql.sock pero sin /var/mysql/mysql.sock debe:

cd /var 
mkdir mysql 
cd mysql 
ln -s /tmp/mysql.sock mysql.sock 

Si tiene /var/mysql/mysql.sock pero no/tmp/mysql .sock a continuación:

cd /tmp 
ln -s /var/mysql/mysql.sock mysql.sock 

Necesitará permisos para realizar los cambios. ¡Simplemente sudo, si es necesario antes de los comandos de arriba!

otra solución (más fácil):

crear el archivo y phpinfo llamada(); Busque 'mysql.default_socket'; o 'pdo_mysql.default_socket'; Abra My.ini o My.cnf para encontrar el valor del socket, p. socket =/tmp/mysql.sock Abra su archivo php.ini (que también se encuentra en su página phpinfo() como 'Archivo de configuración cargada') y cambie todas las ocurrencias de la ubicación de socket incorrecta a la ubicación de socket correcta de MySQL .

otra solución (más fácil): DSN para PDO:

mysql:unix_socket=/tmp/mysql.sock;dbname=... 

mysql_connect:

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

Su sistema es realmente miedo cuando se trata de seguridad, si usted es el anfitrión de los datos sensibles, Me gustaría actualizar a las últimas versiones.

---- ---- ACTUALIZACIÓN

Aaahhhh PHP 5.0 y MySQL 3.23 :)

PHP 5 tiene un cliente MySQL envasados ​​que no puede conectarse a una base de datos MySQL menos de la versión 4.1. Comenzando con la versión 4.1, MySQL usa una nueva forma de hash de contraseñas que no es compatible con las bases de datos pre-4.1. El servidor al que se conecta su configuración es la versión 3.23. Entonces necesitas obtener una versión superior de MySQL. Lo siento, pero no hay otra solución práctica para su caso. Si yo fuera tú, actualizaría todo el sistema e instalaría la versión más reciente del sistema operativo, si tuviera que iría con Debian y las versiones estables más recientes de PHP y MySQL.

+3

Estoy usando PHP y no Java, ¡pero gracias de todos modos! – Maxbester

+2

Bien visto con las especificaciones - en mi defensa, sin embargo, publiqué esas sugerencias como un comentario porque no estaba lo suficientemente seguro como para publicar una respuesta. Si hubiera tenido tiempo de leer las especificaciones para esa versión de MySQL, probablemente también habría publicado una respuesta;) – jammypeach

+1

¡Pruebe la actualización! Mi error. @jammypeach ¡Toma mi disculpa, no quería insultarte! – GTodorov

1

En un Mac OSX sólo tienes que reiniciar el servidor MySQL

sudo /usr/local/mysql/support-files/mysql.server restart 

Funcionó para mí

2

Por suerte esto está funcionado bien para mí:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password'); 
0

tuve un problema similar que se llevó Yo varias horas para resolverlo Coloqué Mysql/Mariadb en una unidad separada y el sitio web impulsado por PHP buscaba el socket en la ubicación predeterminada. Entonces, creé un enlace simbólico pero creo que SELinux no daría el permiso. Entonces, agregué estas líneas al archivo /etc/php.ini y funciona.

pdo_mysql.default_socket = /data/mysql/mysql.sock 
mysql.default_socket = /data/mysql/mysql.sock 
mysqli.default_socket = /data/mysql/mysql.sock 
0

Uso MAMP y tiene el problema de muestra. Descubrí que no hay mysql.sock en tmp. a fin de utilizar este código

cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock 

Funcionó para mí

Cuestiones relacionadas