Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
<?php
mysql_connect("127.0.0.1", 'test', 'test');
print "Error1:".mysql_error()."\n";

mysql_connect("localhost", 'test', 'test');
print "Error2:".mysql_error()."\n";
?>

выдает:
PHP Warning:  mysql_connect(): Can't connect to MySQL server on '127.0.0.1' (0) in /usr/home/dima/test.php on line 2
Error1:Can't connect to MySQL server on '127.0.0.1' (0)
Error2:

Причем не подключается не только к 127.0.0.1, но вообще не хочет работать через TCP/IP с другими хостами. Файрвол я проверил - там все чисто. Запускал tcpdump для lo0 port 3306 - какой-то обмен идет.

FreeBSD 7.1-RELEASE #2
PHP 5.2.8 with Suhosin-Patch 0.9.6.3 (cli) (built: Mar 6 2009 11:15:35)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
mysql Ver 14.14 Distrib 5.1.30, for portbld-freebsd7.1 (i386) using 5.2
12 мар 09, 18:26    [6919062]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5389
Прав для пользователя скорее всего не хватает. Для localhost дали, а для 127.0.0.1 нет.
12 мар 09, 18:31    [6919087]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
vkle
Member

Откуда: Самара
Сообщений: 11089

Возможно, в my.ini запрещено.

Posted via ActualForum NNTP Server 1.4

12 мар 09, 19:23    [6919336]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
права там есть... это я первое, что проверил... но обратите внимание на текст ошибки... там не об отсутствии прав идет речь, а о том, что вообще подключиться нельзя...
13 мар 09, 01:40    [6920356]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
А как можно в my.conf запретить??? Я подозревал, что в my.conf что-то не так может быть и переименовывал его перед очередным коннектом. Естественно, что это ничего не дало. И потом... это может касаться локальной машины, но к удаленным базам он тоже не коннектится...
13 мар 09, 01:42    [6920358]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
кстати... забыл сказать... через
mysql -u test -ptest -h 127.0.0.1
все подключается... поэтому дело не в настройках mysql, а скорей всего что-то в PHP не так...
13 мар 09, 01:44    [6920359]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
vkle
Member

Откуда: Самара
Сообщений: 11089

> А как можно в my.conf запретить???

skip-networking, если не ошибаюсь.


> что-то в PHP не так..

В конфиге пхп или в конфиге расширения mysql.ini случайно не указан какой нибудь нестандартный дефолтовый порт?

Posted via ActualForum NNTP Server 1.4

13 мар 09, 02:05    [6920376]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
та не... нет там ниче такого... система только установленная, большинство параметров дефолтные...

настройки MySql отпадают... если-бы в них что-то было не так, то я-бы через "mysql -h... " тоже не смог-бы подключаться...
А вот ПХП... вот все, что сейчас в php.ini стоит касательно mysql:
[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = On

; Maximum number of persistent links.  -1 means no limit.
mysql.max_persistent = -1

; Maximum number of links (persistent + non-persistent).  -1 means no limit.
mysql.max_links = -1

; Default port number for mysql_connect().  If unset, mysql_connect() will use
; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
; at MYSQL_PORT.
mysql.default_port =

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket =

; Default host for mysql_connect() (doesn't apply in safe mode).
mysql.default_host =

; Default user for mysql_connect() (doesn't apply in safe mode).
mysql.default_user =

; Default password for mysql_connect() (doesn't apply in safe mode).
; Note that this is generally a *bad* idea to store passwords in this file.
; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password")
; and reveal this password!  And of course, any users with read access to this
; file will be able to reveal the password as well.
mysql.default_password =

; Maximum time (in seconds) for connect timeout. -1 means no limit
mysql.connect_timeout = 60

; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
; SQL-Errors will be displayed.
mysql.trace_mode = Off
13 мар 09, 09:25    [6920714]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
сделал трассировочные файлы для 2 разных случаев:
1 Подключение через ПХП: mysql_connect("127.0.0.1", 'test', 'test');
2 Подключение через mysql: mysql -u test -ptest -h 127.0.0.1

1 трейс:
>mysql_option
| enter: option: 0
<mysql_option
>mysql_real_connect
| enter: host: 127.0.0.1  db: (Null)  user: test
| info: Server name: '127.0.0.1'.  TCP sock: 3306
| >vio_new
| | enter: sd: 4
| | >my_malloc
| | | my: size: 152  my_flags: 16
| | | exit: ptr: 0x2972c340
| | <my_malloc
| | >vio_init
| | | enter: type: 1  sd: 4  flags: 2
| | | >my_malloc
| | | | my: size: 16384  my_flags: 16
| | | | exit: ptr: 0x297c6000
| | | <my_malloc
| | <vio_init
| <vio_new
| error: Got error 0 on connect to '127.0.0.1'
| >set_mysql_extended_error
| | enter: error :2003 'Can't connect to MySQL server on '%-.100s' (%d)'
| <set_mysql_extended_error
| error: message: 2003/HY000 (Can't connect to MySQL server on '127.0.0.1' (0))
| >end_server
...

2 трейс:
| >my_malloc
| | my: size: 16  my_flags: 16
| | exit: ptr: 0x2840e050
| <my_malloc
| >my_malloc
| | my: size: 520  my_flags: 16
| | exit: ptr: 0x28410000
| <my_malloc
| >my_malloc
| | my: size: 512  my_flags: 48
| | exit: ptr: 0x2842f200
| <my_malloc
| >init_alloc_root
| | enter: root: 0x805f968
| <init_alloc_root
| >init_alloc_root
| | enter: root: 0x805f9a0
| <init_alloc_root
| >mysql_real_connect
| | enter: host: 127.0.0.1  db: (Null)  user: test
| | info: Server name: '127.0.0.1'.  TCP sock: 3306
| | >vio_new
| | | enter: sd: 4
| | | >my_malloc
| | | | my: size: 152  my_flags: 16
| | | | exit: ptr: 0x284280c0
| | | <my_malloc
| | | >vio_init
| | | | enter: type: 1  sd: 4  flags: 2
| | | | >my_malloc
| | | | | my: size: 16384  my_flags: 16
| | | | | exit: ptr: 0x28437000
| | | | <my_malloc
| | | <vio_init
| | <vio_new
| | >my_net_init
13 мар 09, 11:35    [6921781]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
нашел причину...

если поставить в php.ini "mysql.connect_timeout = -1", то все работает как надо...
разница в коде в библиотеке libmysql для коннекта с таймаутом и без наглядно видна тут:
int my_connect(my_socket fd, const struct sockaddr *name, uint namelen,
<------>       uint timeout)
{
#if defined(__WIN__) || defined(__NETWARE__)
  return connect(fd, (struct sockaddr*) name, namelen);
#else
  int flags, res, s_err;

  /*
    If they passed us a timeout of zero, we should behave
    exactly like the normal connect() call does.
  */

  if (timeout == 0)
    return connect(fd, (struct sockaddr*) name, namelen);

  flags = fcntl(fd, F_GETFL, 0);<------>  /* Set socket to not block */
#ifdef O_NONBLOCK
  fcntl(fd, F_SETFL, flags | O_NONBLOCK);  /* and save the flags..  */
#endif

  res= connect(fd, (struct sockaddr*) name, namelen);
  s_err= errno;><------><------>/* Save the error... */
  fcntl(fd, F_SETFL, flags);
  if ((res != 0) && (s_err != EINPROGRESS))
  {
    errno= s_err;<-----><------><------>/* Restore it */
    return(-1);
  }
  if (res == 0)><------><------><------>/* Connected quickly! */
    return(0);
  return wait_for_data(fd, timeout);
#endif
}

попытался подставить таймаут для mysql так:
mysql -u test -ptest -h 127.0.0.1 --connect_timeout=60

все подключилось и получил такой трейс:

| >my_malloc
| | my: size: 16  my_flags: 16
| | exit: ptr: 0x2840e050
| <my_malloc
| >my_malloc
| | my: size: 520  my_flags: 16
| | exit: ptr: 0x28410000
| <my_malloc
| >my_malloc
| | my: size: 512  my_flags: 48
| | exit: ptr: 0x2842f200
| <my_malloc
| >init_alloc_root
| | enter: root: 0x805f968
| <init_alloc_root
| >init_alloc_root
| | enter: root: 0x805f9a0
| <init_alloc_root
| >mysql_option
| | enter: option: 0
| <mysql_option
| >mysql_real_connect
| | enter: host: 127.0.0.1  db: (Null)  user: test
| | info: Server name: '127.0.0.1'.  TCP sock: 3306
| | >vio_new
| | | enter: sd: 4
| | | >my_malloc
| | | | my: size: 152  my_flags: 16
| | | | exit: ptr: 0x284280c0
| | | <my_malloc
| | | >vio_init
| | | | enter: type: 1  sd: 4  flags: 2
| | | | >my_malloc
| | | | | my: size: 16384  my_flags: 16
| | | | | exit: ptr: 0x28437000
| | | | <my_malloc
| | | <vio_init
| | <vio_new
| | >my_net_init

ниче не понимаю... у кого глюк??? PHP неверно передает таймаут???
13 мар 09, 11:53    [6921928]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
ниче не понимаю... подправил библиотеку libmysql, чтобы она в отладку писала значение для mysql_option.

Вот трейс для коннекта через PHP с таймаутом 60:

>mysql_option
| enter: option: 0
| enter: arg: 60
<mysql_option
>mysql_real_connect
| enter: host: 127.0.0.1 db: (Null) user: test
| info: Server name: '127.0.0.1'. TCP sock: 3306
| >vio_new
| | enter: sd: 4
| | >my_malloc
| | | my: size: 152 my_flags: 16
| | | exit: ptr: 0x2972c340
| | <my_malloc
| | >vio_init
| | | enter: type: 1 sd: 4 flags: 2
| | | >my_malloc
| | | | my: size: 16384 my_flags: 16
| | | | exit: ptr: 0x297c6000
| | | <my_malloc
| | <vio_init
| <vio_new
| error: Got error 0 on connect to '127.0.0.1'
| >set_mysql_extended_error
| | enter: error :2003 'Can't connect to MySQL server on '%-.100s' (%d)'
| <set_mysql_extended_error
| error: message: 2003/HY000 (Can't connect to MySQL server on '127.0.0.1' (0))
| >end_server



вот трейс для коннекта через mysql:
| >my_malloc
| | my: size: 16 my_flags: 16
| | exit: ptr: 0x2840e050
| <my_malloc
| >my_malloc
| | my: size: 520 my_flags: 16
| | exit: ptr: 0x28410000
| <my_malloc
| >my_malloc
| | my: size: 512 my_flags: 48
| | exit: ptr: 0x2842f200
| <my_malloc
| >init_alloc_root
| | enter: root: 0x805f968
| <init_alloc_root
| >init_alloc_root
| | enter: root: 0x805f9a0
| <init_alloc_root
| >mysql_option
| | enter: option: 0
| | enter: arg: 60
| <mysql_option
| >mysql_real_connect
| | enter: host: 127.0.0.1 db: (Null) user: test
| | info: Server name: '127.0.0.1'. TCP sock: 3306
| | >vio_new
| | | enter: sd: 4
| | | >my_malloc
| | | | my: size: 152 my_flags: 16
| | | | exit: ptr: 0x284280c0
| | | <my_malloc
| | | >vio_init
| | | | enter: type: 1 sd: 4 flags: 2
| | | | >my_malloc
| | | | | my: size: 16384 my_flags: 16
| | | | | exit: ptr: 0x28437000
| | | | <my_malloc
| | | <vio_init
| | <vio_new
| | >my_net_init


Выходит, что параметр одинаковый передается для MYSQL_OPT_CONNECT_TIMEOUT. Но почему тогда такая разница в результате???
13 мар 09, 12:12    [6922090]     Ответить | Цитировать Сообщить модератору
 Re: mysql_connect -> 127.0.0.1  [new]
dmitriy_rsl
Member

Откуда:
Сообщений: 158
У кого последняя версия FreeBSD,PHP,Mysql попробуйте плиз вариант коннекта на 127.0.0.1 через PHP с таймаутом 60... Не могу врубиться, все параметры коннекта одинаковые, а через PHP - не пашет...
13 мар 09, 12:52    [6922384]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить