←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Błąd SQL / Crash serwera

  • +
  • -
Karmi1 - zdjęcie Karmi1 08.12.2011

Witam. Pisałem już kilka razy na temat tego problemu, lecz nie otrzymałem odpowiedzi. Zauważyłem również że ludzie mają z tym problemy. Otóż zrobiłem własnego Diablo Moda, wszystko pięknie działa: Exp się zapisuje w bazie MySQL, Lvle czyta, Questy działają wszystko normalnie. Lecz od czasu do czasu dochodzi do crashów. Wchodzę w logi, patrzę i co widzę? Otóż taki błąd:

L 10/03/2011 - 08:36:14: Error on Table query: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
L 10/03/2011 - 08:36:14: Could not connect to SQL database.

Serwer restartuje się i później przez jakiś czas działa normalnie.
W Logach jest wszystko dobrze bo jak mówię SERWER DZIAŁA i wszystko na nim jest dobrze.
Jest to szczerze nietypowy błąd. Czy jest możliwe aby był on związany z kodowaniem w .sma?

Prosiłbym o poradę osoby które wiedzą.
.SMA mogę podać ZAUFANYM osobom.

Dziękuję i pozdrawiam:
Karmi
Odpowiedz

  • +
  • -
Leszcz - zdjęcie Leszcz 08.12.2011

A sproboj wgrac podstawowego diablo moda.Jezeli dalej bedzie Ci crashowac server,to proponuje zmienic hosting servera mysql.
Bo skoro Ci wczytuje i zapisuje exp itp. , a czasami nie.. to mozna wywnioskowac ze server mysql sie wylacza a nastepnie wlacza.
Wydaje mi sie ze dlatego sa crashe,ale to tylko moje zdanie.
Użytkownik Leszcz edytował ten post 08.12.2011 18:15
Odpowiedz

  • +
  • -
Karmi1 - zdjęcie Karmi1 08.12.2011

Już to robiłem. Zmieniałem nie tylko hosting serwera MySQL (Miałem proserwer, zmieniłem na Unixstorm). Zmieniłem też hosting z pukawka.pl na Tserwery.pl i co prawda crashe występowały rzadziej ale jednak nadal :/
Odpowiedz

  • +
  • -
Leszcz - zdjęcie Leszcz 08.12.2011

jezeli hostingi nic nie daly to proponuje wgrac podstawowego Diablomod 5.9l i sprawdzic czy dalej sa crashe.Jezeli nie bedzie to bedzie oczywiste ze to wina Twojego sma
Odpowiedz

  • +
  • -
Karmi1 - zdjęcie Karmi1 08.12.2011

Jak już mówiłem próbowałem z normalnym Diablo i błędów nie ma. Więc prawdopodobnie błąd w .sma. Mogę wiedzieć jaka funkcja za to odpowiada? (Mogę wkleić tutaj kawałek kodu)
Odpowiedz

  • +
  • -
Leszcz - zdjęcie Leszcz 08.12.2011

Ja bym podmienil wszystko co jest zwiazane z mysql czyli ten kod:
public sql_start()
{
if(sqlstart<0) return
if(g_boolsqlOK) return

new host[128]
new user[64]
new pass[64]
new database[64]

get_cvar_string("diablo_sql_database",database,63)
get_cvar_string("diablo_sql_host",host,127)
get_cvar_string("diablo_sql_user",user,63)
get_cvar_string("diablo_sql_pass",pass,63)

g_SqlTuple = SQL_MakeDbTuple(host,user,pass,database)



get_cvar_string("diablo_sql_table",g_sqlTable,63)

new q_command[512]
format(q_command,511,"CREATE TABLE IF NOT EXISTS `%s` ( `nick` VARCHAR( 64 ),`ip` VARCHAR( 64 ),`sid` VARCHAR( 64 ), `klasa` integer( 2 ) , `lvl` integer( 3 ) DEFAULT 1, `exp` integer( 9 ) DEFAULT 0, `str` integer( 3 ) DEFAULT 0, `int` integer( 3 ) DEFAULT 0, `dex` integer( 3 ) DEFAULT 0, `agi` integer( 3 ) DEFAULT 0 ) ",g_sqlTable)

SQL_ThreadQuery(g_SqlTuple,"TableHandle",q_command)
}
//sql//
public TableHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
// lots of error checking
g_boolsqlOK=1
if(Errcode)
{
g_boolsqlOK=0
log_to_file("addons/amxmodx/logs/diablo.log","Error on Table query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED)
{
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
g_boolsqlOK=0
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_to_file("addons/amxmodx/logs/diablo.log","Table Query failed.")
g_boolsqlOK=0
return PLUGIN_CONTINUE
}
LoadAVG()
return PLUGIN_CONTINUE
}

public create_klass(id)
{
if(g_boolsqlOK)
{
if(!is_user_bot(id) && database_user_created[id]==0)
{
new name[64]
new ip[64]
new sid[64]
get_user_name(id,name,63)
replace_all ( name, 63, "'", "Q" )
replace_all ( name, 63, "`", "Q" )
get_user_ip ( id, ip, 63, 1 )
get_user_authid(id, sid ,63)
log_to_file("addons/amxmodx/logs/test_log.log","*** %s %s *** Create Class ***",name,sid)
new data[1]
data[0]=id
new q_command[2048]
new i=1
database_user_created[id]=1
format(q_command,2047,"INSERT INTO `%s` (`nick`,`ip`,`sid`,`klasa`,`lvl`,`exp`) VALUES ('%s','%s','%s',%i,%i,%i )",g_sqlTable,name,ip,sid,i,srv_avg[i],LevelXP[srv_avg[i]-1])
for(i=2;i<9;i++)
{
format(q_command,2047,"%s, ('%s','%s','%s',%i,%i,%i)",q_command,name,ip,sid,i,srv_avg[i],LevelXP[srv_avg[i]-1])
}
SQL_ThreadQuery(g_SqlTuple,"create_klass_Handle",q_command,data,1)

}
}
else sql_start()
}
public create_klass_Handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
// lots of error checking
new id=Data[0]
if(Errcode)
{
log_to_file("addons/amxmodx/logs/diablo.log","Error on create klass query: %s",Error)
database_user_created[id]=0
asked_klass[id]=0
}
if(FailState == TQUERY_CONNECT_FAILED)
{
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
database_user_created[id]=0
asked_klass[id]=0
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_to_file("addons/amxmodx/logs/diablo.log","create klass Query failed.")
database_user_created[id]=0
asked_klass[Data[0]]=0
return PLUGIN_CONTINUE
}
asked_klass[id]=0
database_user_created[id]=2
changerace(id)
return PLUGIN_CONTINUE
}
public load_xp(id)
{
if(g_boolsqlOK /*&& */)
{
if(!is_user_bot(id))
{
new name[64]
new data[1]
data[0]=id
if(get_cvar_num("diablo_sql_save")==0)
{
get_user_name(id,name,63)
replace_all ( name, 63, "'", "Q" )
replace_all ( name, 63, "`", "Q" )
new q_command[512]
format(q_command,511,"SELECT `klasa` FROM `%s` WHERE `nick`='%s' ",g_sqlTable,name)
SQL_ThreadQuery(g_SqlTuple,"SelectHandle",q_command,data,1)
}
else if(get_cvar_num("diablo_sql_save")==1)
{
get_user_ip(id, name ,63,1)
new q_command[512]
format(q_command,511,"SELECT `klasa` FROM `%s` WHERE `ip`='%s' ",g_sqlTable,name)
SQL_ThreadQuery(g_SqlTuple,"SelectHandle",q_command,data,1)
}
else if(get_cvar_num("diablo_sql_save")==2)
{
get_user_authid(id, name ,63)
new q_command[512]
format(q_command,511,"SELECT `klasa` FROM `%s` WHERE `sid`='%s' ",g_sqlTable,name)
SQL_ThreadQuery(g_SqlTuple,"SelectHandle",q_command,data,1)
}
loaded_xp[id]=1
}
}
else sql_start()
}
public SelectHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(Errcode)
{
log_to_file("addons/amxmodx/logs/diablo.log","Error on load_xp query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED)
{
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_to_file("addons/amxmodx/logs/diablo.log","load_xp Query failed.")
return PLUGIN_CONTINUE
}


if(SQL_MoreResults(Query)) return PLUGIN_CONTINUE
else create_klass(Data[0])

return PLUGIN_CONTINUE
}
//sql//



Czy podczas kompilacji masz moze jakies bledy?
Użytkownik Leszcz edytował ten post 08.12.2011 20:19
Odpowiedz

  • +
  • -
Karmi1 - zdjęcie Karmi1 15.12.2011

Niestety nie pomogło :/
Odpowiedz

Koniarek - zdjęcie Koniarek 15.12.2011

Jesli masz Baze Danych na www.ProSerwer.pl (www.xaa.pl) to wejdz:

~~Klick~~
Odpowiedz

  • +
  • -
Ziebaxd - zdjęcie Ziebaxd 15.12.2011

Może znajdź kawałek kodu związanego z mysql weź surową wersję diablo i porównaj gdzie są różnice, może wdarł się przez pomyłkę drobny błąd i to powoduje ci crashe serwera.
Odpowiedz