Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

ERROR 2002 (HY000)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Mensaje Jue Ago 07, 2008 2:33 pm
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
ERROR 2002 (HY000) Responder citando

Hola a todos, soy yo de nuevo Confused

Estoy corriendo mi script que conecta a una base de datos, pero me sale este error :

Código:
DBI connect('database=base','root',...) failed: Can't connect to loc MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at cone.pl le 14


y en mi linea 14 tengo:

Perl:
my $dbh = DBI->connect($connectionInfo,$userid,$pass,
                        {'RaiseError' => 1});


Ahora en mi $userid, tengo el usuario y en mi $pass no tengo nada, porque la base de datos no posee contraseña de acceso, estoy usando MySQL, y por si acaso sí tengo levantada la base, ahora cuando voy a ver a la dirección que me sale ahí el archivo mysql.sock no aparece, se encuentra en otra dirección... pero leyendo encontré que se puede cambiar la dirección en my.cnf, y lo hice, le puse una nueva dirección pero sigue apuntando a la que me sale en el error y no sé dónde más cambiarle. plis, ayuda Shocked
Mensaje Jue Ago 07, 2008 2:46 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

Cuando dices que está levantada la base de datos, se supone que mysql server ha sido arrancado.

Deberías ver el resultado en /var/log/mysql.log (o donde esté definido en my.cnf).

Es posible que en my.cnf no esté permitido que mysql server cree conexiones de ese tipo. Tendrás que revisar las secciones [client] y [mysqld] para comprobar que apuntan al mismo sitio.

Más información, en los foros de MySQL.
Mensaje Jue Ago 07, 2008 2:51 pm
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

Te cuento... que traté de ir a ver el log de mysql en la dirección que me dijiste... pero no está en ningún archivo que se llame mysql.log o algo parecido Sad

y cuando me dices esto
Cita:

Es posible que en my.cnf no esté permitido que mysql server cree conexiones de ese tipo.


¿¿Te refieres a la conexión entre mi script y la base de datos??
Mensaje Jue Ago 07, 2008 3:20 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

La posición del registro de actividad (log) está definida en la entrada log en la sección [mysqld] del my.cnf (aunque también depende un poco de la versión del MySQL que tengas instalado).
Mensaje Jue Ago 07, 2008 3:40 pm
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

He estado buscando el log como loca y no lo encuentro así que busqué por si acaso el my.cnf y resulta que tengo dos Confused uno en /etc/my.cnf y otro en /opt/lampp/etc/my.cnf, ahora en el /etc/my.cnf tengo esto:

Código:
[mysqld]
datadir=/var/lib/mysql
socket=/opt/lampp/var/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


Si te puedes dar cuenta la dirección del socket, bueno esa la cambié yo, para ver si reparaba el error y nada, mmm antes tenía la dirección /var/lib/mysql/mysql.sock, y también ahí indican la dirección del log, pero al ir a esa dirección no aparece para nada Shocked

Ahora en el otro my.cnf, está más completo y tiene esto

Código:
# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /opt/lampp/var/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /opt/lampp/var/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin


# Point the following paths to different dedicated disks
#tmpdir         = /tmp/
#log-update     = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000

# Comment the following if you are using InnoDB tables
skip-innodb
innodb_data_home_dir = /opt/lampp/var/mysql/
innodb_data_file_path = ibdata1:10M:autoextend

# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout


Cabe recalcar que solo publiqué lo relevante porque lo demás es comentarios de ese archivo, ahora no sé cómo hacer para que Linux me lea el my.cnf de /opt/lampp/etc/ y no el otro ¿o debería ser al revés? Confused
Mensaje Jue Ago 07, 2008 4:58 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

¿Lo ves? Te lo avisé hace meses... el instalar el XAMPP no te ha traído más que desgracias...

El oficial es el que está en el /etc/.

Yo reinstalaría todo el Linux... sin el XAMPP.

Sad
Mensaje Lun Ago 11, 2008 7:55 am
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

¡¡¡Disculpa la demora, explorer!!!

¡¡¡Gracias por la sugerencia!!! pero, créeme que a estas alturas no puedo darme el lujo de hacer eso... o sea, ¿que tu lo ves como que ya no hay solución??? :S
Mensaje Lun Ago 11, 2008 9:14 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

Sí que hay solución. Y fácil.

Con un poco de paciencia se puede dejar funcionando. Depende de la destreza y experiencia del administrador del sistema. Smile Sin tener que reinstalar nada.

Hay que ir servicio por servicio, ver dónde se arrancan, cómo, qué ficheros de configuración usan, que ficheros de datos leen y escriben, qué puertos abren, etc.

Instalar software preconfigurado como el XAMPP, está bien, pero hay que tener cuidado con lo que va a 'pisar'.

Es como si estuviéramos en Windows e instaláramos el Microsoft Office para poder grabar los documentos en formato Word, sin darnos cuenta de que ya teníamos instalado el Open Office y esa función ya la realizaba. Y la presencia de Microsoft Office modifica el comportamiento de todo el sistema de tal forma que impide que los .doc se abran con el OOffice con un sencillo doble click. El usuario del equipo, que normalmente usaba esa acción, ahora se encuentra con una desagradable sorpresa.

Te recomiendo: paciencia, leer mucho, apuntar a un foro de Linux, y hacer un curso de administración de sistemas Linux. Hoy en día se valora mucho esa titulación.
Mensaje Lun Ago 11, 2008 3:36 pm
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

Te cuento explorer que encontré la solución Very Happy

Es de poner en el /etc/my.cnf la sección [client]... mmm quedaría de esta forma:

Código:
[client]
#password =
port = 3306
socket = /opt/lampp/var/mysql/mysql.sock

[mysqld]
port = 3306
datadir=/opt/lampp/var/mysql
socket=/opt/lampp/var/mysql/mysql.sock

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


pero una vez solucionado... corrí mi script y ya no me sale error de mysql.sock... pero me sale este error... medio raro que no lo entiendo Confused

Código:
Usage: $class->connect([$dsn [,$user [,$passwd [,\%attr]]]]) at conex.pl line 14


y en la linea 14 tengo

Perl:
my $dbh = DBI->connect($connectionInfo,$userid,
                        {'RaiseError' => 1});


ahora si no le mando el password es porque por el momento no tiene... mmm ¿¿¿alguna sugerencia???
Mensaje Lun Ago 11, 2008 4:35 pm
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

una pregunta!!!

existe alguna manera de que dentro de perl pueda especificar donde se encuentra mi mysql.sock?? asi como lo puedo cambiar en el my.cnf??

disculpn la ignorancia
Mensaje Lun Ago 11, 2008 5:14 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Si lo mandas junto con la información del host, database, etc. Ejemplo:

Perl:
DBI->connect(
"DBI:mysql:host=HOST;database=NOMBREDATABASE;mysql_socket=/tmp/mysql.sock", "USER", "PASS",
{PrintError => 1, RaiseError => 1}
);
Mensaje Lun Ago 11, 2008 5:23 pm
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

¡¡kidd!! muchas gracias por ayudarme, ando desesperada, mira hice lo que me pediste... y me salió este error.

Código:
Can't DBI::st=HASH(0x8e3e340)->bind_col(1, undef,...), need a reference to a scalar at /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/DBI.pm line 1831.


Confused ¿Qué es? puedes ayudarme, te envío también el script que tengo para que lo veas y me digas si algo anda mal.

Perl:
#!/usr/bin/perl -w
package DBD::mysql;

use strict;

use DBI;

my $db='base';
#my $host='localhost';
#$port="3306";
my $userid='root';
my $pass='';
my $connectionInfo="DBI:mysql:database=$db;mysql_socket=/opt/lampp/var/mysql/mysql.sock";

my $dbh = DBI->connect($connectionInfo, 'root', '', {'RaiseError' => 1});
die "Ha habido un problema al conectar con la base de datos: ".$DBI::errstr unless(defined($dbh));

my $query = "SELECT * FROM admi";

my $sth = $dbh->prepare($query);

$sth->execute();

$sth->bind_columns(undef,my $nombre,my $descripcion);

#print "Resultados";

while($sth->fetch())
{
        print "$nombre - $descripcion";
}

$sth->finish();
$dbh->disconnect;


¿Qué opinas? Confused
Mensaje Lun Ago 11, 2008 5:30 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

¿Qué narices hace la línea
Perl:
package DBD::mysql;
en el programa?

Anda, por favor, quítala (no te hace falta).
Mensaje Lun Ago 11, 2008 9:27 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4143
Ubicación: Valladolid, España
Responder citando

El error dice que has pasado mal los argumentos a bind_columns(). Y además, estás intentando usar la bind_cols(), que tiene distintos argumentos.

Debes definir ANTES las variables, y luego indicar su referencia:
Perl:
my $nombre;
my $descripcion;
$sth->bind_columns(\$nombre,\$descripcion);


Más información, en la descripción de bind_columns() en la página de manual de DBI. Incluye ejemplos.
Mensaje Mar Ago 12, 2008 7:38 am
majitop1986
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Abr 2008
Mensajes: 58
Responder citando

gracias explorer y kidd por la ayuda Very Happy ya me salieron los datos Smile
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group