pvpgn 1.8.5 & mysql 5.0.77

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 8:35:04

Проблема заключается в том, что pvpgn не успевает подключится к серверу mysql т.к. не успевает загрузится mysql.
rc.d отвергаем сразу
# rcorder /etc/rc.d/* /usr/local/etc/rc.d/*
...
/etc/rc.d/LOGIN
/usr/local/etc/rc.d/viperhive
/usr/local/etc/rc.d/rsyncd
/usr/local/etc/rc.d/mysql-server
/usr/local/etc/rc.d/lighttpd
/usr/local/etc/rc.d/bnetd -< pvpgn
...
Вот задался я вопросом, в mysql же есть реконнект.
Открыл исходники

Код: Выделить всё

#if MYSQL_VERSION_ID >= 50003
  #if MYSQL_VERSION_ID < 50013
    eventlog(eventlog_level_warn,__FUNCTION__,"Your mySQL client lib version does not support reconnecting after a timeout.");
    eventlog(eventlog_level_warn,__FUNCTION__,"If this causes you any trouble you are advices to upgrade");
    eventlog(eventlog_level_warn,__FUNCTION__,"your mySQL client libs to at least mySQL 5.0.13 to resolve this problem.");
    // we might try a dirty hack like the following, but I'm not sure if it will work
    // mysql->reconnect = 1;
  #endif
  #if MYSQL_VERSION_ID >= 50019
    my_bool my_true = (my_bool)1;
    if (mysql_options(mysql, MYSQL_OPT_RECONNECT, &my_true)){
      eventlog(eventlog_level_warn,__FUNCTION__,"Failed to turn on MYSQL_OPT_RECONNECT.");
    }else{
      eventlog(eventlog_level_info,__FUNCTION__,"Successfully turned on MYSQL_OPT_RECONNECT.");
    }
  #endif
#endif


    if (mysql_real_connect(mysql, host, user, pass, name, port ? atoi(port) : 0, socket, CLIENT_FOUND_ROWS) == NULL) {
        eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_error(mysql));
	mysql_close(mysql);
        return -1;
    }

#if MYSQL_VERSION_ID >= 50013
  #if MYSQL_VERSION_ID < 50019
    my_bool my_true = (my_bool)1;
    if (mysql_options(mysql, MYSQL_OPT_RECONNECT, &my_true)){
      eventlog(eventlog_level_warn,__FUNCTION__,"Failed to turn on MYSQL_OPT_RECONNECT.");
    }else{
      eventlog(eventlog_level_info,__FUNCTION__,"Successfully turned on MYSQL_OPT_RECONNECT.");
    }
  #endif
#endif
вот описан реконект mysql у меня mysql-server-5.0.77_1, возможность MYSQL_OPT_RECONNECT поддерживает.
в логах вижу

Код: Выделить всё

Apr 19 22:54:49 [info ] sql_mysql_init: Successfully turned on MYSQL_OPT_RECONNECT.
Apr 19 22:54:49 [error] sql_mysql_init: error connecting to database (db said: 'Can't connect to MySQL server on '127.0.0.1' (61)')
Apr 19 22:54:49 [error] sql_init: got error init db
Apr 19 22:54:49 [error] pre_server_startup: storage init failed
Теперь вопрос, скажите как подправить исходный код, что бы работал реконект, по логам видно что он не отрабатывается.
Не программист, скажите куда копать ... сам доделаю.
Пока думаю добавить while
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение zg » 2009-04-20 8:44:00

thefree писал(а):Проблема заключается в том, что pvpgn не успевает подключится к серверу mysql т.к. не успевает загрузится mysql.
проблема известная, уже решённая
thefree писал(а):rc.d отвергаем сразу
ну и смысл тогда темы создавать?
thefree писал(а):вот описан реконект mysql у меня mysql-server-5.0.77_1, возможность MYSQL_OPT_RECONNECT поддерживает.
ну какбэ я так понимаю это для уже установленного соединения, если вдруг оборвётся, а не для того, чтобы заддосить сервер.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 9:35:37

zg писал(а):проблема известная, уже решённая
Решение это вставить sleep?
Вы считаете правильным, что rc.d имеет sleep? То есть пока у меня не отработает /usr/local/etc/rc.d/bnetd дальше у меня загрузка не пойдёт. Мне кажется это в корни не верно.
zg писал(а):ну и смысл тогда темы создавать?
Что бы не советовали копать в сторону rc.d, т.к. идея уже отработано.
zg писал(а): ну какбэ я так понимаю это для уже установленного соединения, если вдруг оборвётся, а не для того, чтобы заддосить сервер.
Ну о каком ддосе идёт речь? Возможна же сделать цыкл из 5и попыток с интервалом в 5-10ть секунд. Если не получилось то к чертям.
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение paradox » 2009-04-20 11:01:50

ну давай исходник того файла где там мускуль коннектиться

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 11:06:57

paradox писал(а):ну давай исходник того файла где там мускуль коннектиться
человек ...
Вложения
sql_mysql.c
(7.16 КБ) 54 скачивания
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение paradox » 2009-04-20 11:15:19

Код: Выделить всё

+ int i;
+for (i = 0; i < 6; i++)
    if (mysql_real_connect(mysql, host, user, pass, name, port ? atoi(port) : 0, socket, CLIENT_FOUND_ROWS) == NULL) {
        eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_error(mysql));
+	//mysql_close(mysql);
+        //return -1;
+        sleep(5);
    }

+  if (i == 6)
+  {
+       mysql_close(mysql);
+       return -1;
+ }

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 11:33:16

а если вот так сделать?

Код: Выделить всё

--- sql_mysql.c.orig	2009-04-20 12:21:17.000000000 +0400
+++ sql_mysql.c	2009-04-20 12:31:57.000000000 +0400
@@ -73,6 +73,19 @@
         return -1;
     }
 
+    int i;
+    while ((mysql_real_connect(mysql, host, user, pass, name, port ? atoi(port) : 0, socket, CLIENT_FOUND_ROWS) == NULL) && (i <= 5)) {
+	mysql_close(mysql);
+	sleep(5);
+	i++;
+    }
+
+    if (mysql_error(mysql) != NULL) {
+        eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_error(mysql));
+	mysql_close(mysql);
+        return -1;
+    }
+
 #if MYSQL_VERSION_ID >= 50003
   #if MYSQL_VERSION_ID < 50013
     eventlog(eventlog_level_warn,__FUNCTION__,"Your mySQL client lib version does not support reconnecting after a timeout.");
@@ -91,24 +104,6 @@
   #endif
 #endif
 
-
-    if (mysql_real_connect(mysql, host, user, pass, name, port ? atoi(port) : 0, socket, CLIENT_FOUND_ROWS) == NULL) {
-        eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_error(mysql));
-	mysql_close(mysql);
-        return -1;
-    }
-
-#if MYSQL_VERSION_ID >= 50013
-  #if MYSQL_VERSION_ID < 50019
-    my_bool my_true = (my_bool)1;
-    if (mysql_options(mysql, MYSQL_OPT_RECONNECT, &my_true)){
-      eventlog(eventlog_level_warn,__FUNCTION__,"Failed to turn on MYSQL_OPT_RECONNECT.");
-    }else{
-      eventlog(eventlog_level_info,__FUNCTION__,"Successfully turned on MYSQL_OPT_RECONNECT.");
-    }
-  #endif
-#endif
-
     return 0;
 }
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение paradox » 2009-04-20 11:36:40

я бы его остави на том месте где нужно
а ты его вверх поднял зачемто

к томуже
mysql_close(mysql);
в цикле нельзя закрывать
иначе постоянно будет еррор

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 11:44:45

а зачем MYSQL_OPT_RECONNECT ставить до коннекта? он же срабатывает если произашол разрыв после удачного соединения.

Вот, что у меня получилось в конце, подправьте если не так.
Вложения
sql_mysql.c
(7 КБ) 35 скачиваний
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение paradox » 2009-04-20 11:54:47

MYSQL_OPT_RECONNECT
вообще поудаляй нафиг

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 12:10:01

лажа вышла

Код: Выделить всё

sql_mysql_init: error connecting to database (db said: '')
хотя

Код: Выделить всё

if (mysql_error(mysql)) {
        eventlog(eventlog_level_error, __FUNCTION__, "error connecting to database (db said: '%s')", mysql_erro
r(mysql));
        mysql_close(mysql);
        return -1;
    }
сделаю проверку в духи

Код: Выделить всё

if(mysql_error(mysql)[0] != NULL)
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение paradox » 2009-04-20 12:12:49

то ты что то не то сделал

у меня в биллинге
работает как часы
особенно когда между серверами связь теряеться поскольку находяться на большом растоянии

Код: Выделить всё

/*
 * reconnect to database
 */
MYSQL *
reconnect_sql_db(void){

	int	i = 0;
	MYSQL *mysql = NULL;

		syslog(LOG_INFO, "MYSQL:%s %d", __FUNCTION__, MYSQL_VERSION_ID);
#if MYSQL_VERSION_ID >= 40013
        mysql_init(&real_mysql);
	for (i = 0; i < 6; i++)
	if (!mysql_real_connect(&real_mysql,
				sql_host,
				sql_user,
				sql_pswd,
				sql_name, 0, NULL, CLIENT_FOUND_ROWS)) {
		syslog(LOG_ERR, "MYSQL: Cannot Connect to %s@%s:%s",
			sql_host,sql_user,sql_name);
		mysql = NULL;
		sleep(5);
        } else {
		mysql = &real_mysql;
		break;
	}
#else
	for (i = 0; i < 6; i++)
        if (!mysql_connect(&real_mysql,sql_host,sql_user,sql_pswd)){
		syslog(LOG_ERR, "MYSQL: Cannot Connect to %s@%s:%s",
			sql_host,sql_user,sql_name);
		mysql = NULL;
		sleep(5);
        } else {
		mysql = &real_mysql;
		break;
	}
	if (mysql != NULL)
	      for (i = 0; i < 6; i++)
		if (mysql_select_db(mysql,sql_name)){
			syslog(LOG_ERR, "MYSQL cannot select db %s",sql_name);
			syslog(LOG_ERR, "MYSQL error: %s",mysql_error(mysql));
			sleep(5);
        	} else {
			return mysql;
		}
#endif
	syslog(LOG_ERR, "MYSQL: Giving up on connect");
	return mysql;

}
я тебе давал что изменить
а ты там химичишь....

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: pvpgn 1.8.5 & mysql 5.0.77

Непрочитанное сообщение thefree » 2009-04-20 12:21:07

а я хочу своих баранов, победил ...

Код: Выделить всё

Apr 20 13:18:02 [info ] storage_init: initializing storage layer (available drivers: file, sql, sql2)
Apr 20 13:18:02 [warn ] sql_mysql_init: Reconnect to mysql in 5 second, attempts 1 / 5
Apr 20 13:18:07 [info ] sql_mysql_init: Successfully turned on MYSQL_OPT_RECONNECT.
Теперь грузится все при загрузке системы.
Если комуто интересно вечером выкину файлик ...

p.s. 2paradox thx
Вложения
sql_mysql.c
(7 КБ) 63 скачивания
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету