Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
mysql 5.0.24a (lisc) 23/09/2006 - 16:46:06



From: lisc - 23/09/2006 - 16:46:06
Subject:mysql 5.0.24a
-----------------
Стоит сервачек Intel Xeon 3.0 EM64
2 гига мозгов, SCSI Intel Controler Raid, Seagate 73Gb
Так же билинговая система которая с помощью ulog(a) собирает трафик

запускается муксул с этим параметром

/etc/my-huge.cnf

[client]
port = 3306
socket = /var/run/mysql/mysql.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysql/mysql.sock
nice = 0

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysql/mysql.pid
socket = /var/run/mysql/mysql.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
tmp_table_size = 63554432
#table_cache=512
table_cache=32024
language = /usr/share/mysql/english
skip-external-locking
default-character-set=cp1251
#
# For compatibility to other Debian packages that still use
# libmysqlclient10 and libmysqlclient12.
old_passwords = 1
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#bind-address = *
#
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
#
# * Query Cache Configuration
#
query_cache_limit = 1048576
query_cache_size = 16777216
query_cache_type = 1
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log = /var/log/mysql.log
#log = /var/log/mysql/mysql.log
#
# Error logging goes to syslog. This is a Debian improvement
#
# Here you can see queries with especially long duration
#log-slow-queries = /var/log/mysql/mysql-slow.log
#
# The following can be used as easy to replay backup logs or for replication.
#server-id = 1
#log-bin = /var/log/mysql/mysql-bin.log
# See /etc/mysql/debian-log-rotate.conf for the number of files kept.
#max_binlog_size = 104857600
#binlog-do-db = include_database_name
#binlog-ignore-db = include_database_name
#
# * BerkeleyDB
#
# According to an MySQL employee the use of BerkeleyDB is now discouraged
# and support for it will probably cease in the next versions.
skip-bdb
#
# * InnoDB
#innodb_file_per_table=ON
#innodb_buffer_pool_size = 64M
#innodb_buffer_pool_size = 125M
# тБЪНЕТ ВХЖЕТОПЗП РХМБ УМЕДХЕФ ЪБДБЧБФШ
# ЛБЛ 50 - 80% РБНСФЙ ЛПНРШАФЕТБ, ОП
# ДМС Linux x86 УМЕДХЕФ ХВЕДЙФШУС, ЮФП
# ПВЭЙК ТБУИПД РБНСФЙ ОЕ РТЕЧЩЫБЕФ 2 зВ
set-variable = innodb_file_per_table=1
#set-variable = innodb_buffer_pool_size=1G
#set-variable = innodb_buffer_pool_size=512M
set-variable = innodb_buffer_pool_size=64M
#set-variable = innodb_additional_mem_pool_size=20M
# тБЪНЕТ ЖБКМБ ЦХТОБМПЧ ДПМЦЕО УПУФБЧМСФШ
# ПЛПМП 15 % ПФ ТБЪНЕТБ ВХЖЕТОПЗП РХМБ
#set-variable = innodb_log_file_size=150M
#set-variable = innodb_log_buffer_size=8M
#set-variable = system_time_zone=SYSTEM
#set-variable = time_zone=SYSTEM
###
# рТЕДХРТЕЦДЕОЙЕ: Ч Linux x86 ОЕПВИПДЙНП УПВМАДБФШ ПУФПТПЦОПУФШ, ЮФПВЩ ОЕ ХУФБОПЧЙФШ УМЙЫЛПН ЧЩУПЛПЕ ЪОБЮЕОЙЕ ЙУРПМШЪПЧБОЙС РБНСФЙ. glibc НПЦЕФ ДБФШ РТПГЕУУХ ТБЪТБУФЙУШ Й РТЕЧЩУЙФШ УФЕЛЙ РПФПЛПЧ, ЮФП РТЙЧЕДЕФ Л УВПА УЕТЧЕТБ. уФЕРЕОШ ТЙУЛБ ЪОБЮЙФЕМШОП РПЧЩЫБЕФУС, ЕУМЙ ЪОБЮЕОЙЕ
#
# innodb_buffer_pool_size + key_buffer +
# max_connections * (sort_buffer + read_buffer_size) + max_connections * 2 MB
#
# РТЙВМЙЦБЕФУС Л ЪОБЮЕОЙА 2 зВ ЙМЙ РТЕЧЩЫБЕФ ЕЗП. лБЦДЩК РПФПЛ ВХДЕФ ЙУРПМШЪПЧБФШ УФЕЛ (ПВЩЮОП 2 нВ, ОП Ч ВЙОБТОПК РПУФБЧЛЕ MySQL AB ФПМШЛП 256 лВ) Й Ч ИХДЫЕН УМХЮБЕ ФБЛЦЕ ДПРПМОЙФЕМШОХА РБНСФШ sort_buffer + read_buffer_size.
#skip-locking
#set-variable = max_connections=200
#set-variable = read_buffer_size=1M
#set-variable = sort_buffer=1M
# тБЪНЕТ key_buffer УМЕДХЕФ ЪБДБЧБФШ ЛБЛ
# 5%-50% ПФ ЧБЫЕЗП пъх, Ч ЪБЧЙУЙНПУФЙ
# ПФ ФПЗП, ЛБЛ ЮБУФП Х ЧБУ ЙУРПМШЪХАФУС
# ФБВМЙГЩ MyISAM, ОП key_buffer +
# ТБЪНЕТ ВХЖЕТОПЗП РХМБ InnoDB ОЕ ДПМЦЕО
# РТЕЧЩЫБФШ 80% ЧБЫЕЗП пъх
#set-variable = key_buffer=256M

#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# If you want to enable SSL support (recommended) read the manual or my
# HOWTO in /usr/share/doc/mysql-server/SSL-MINI-HOWTO.txt.gz
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem



[mysqldump]
quick
quote-names
max_allowed_packet = 32M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer = 32M

#
# * NDB Cluster
#
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
#
# The following configuration is read by the ndbd storage daemons,
# not from the ndb_mgmd management daemon.
#
# [MYSQL_CLUSTER]
# ndb-connectstring=127.0.0.1


Тело скрипта который соберает трафик потом складывает его в основную базу для просмотра трафика.



#!/usr/bin/perl

#exit;

$homeDir = "/home/bill";
chdir($homeDir);

$modDir = "/var/www/cgi-bin/myAccount";
$consoleRun = 1;

require "$modDir/modules.pm";
&modLdr("myAccountLocal");
$mysqlDb = "landb";
&modLdr("modDateTime");
require traf1;


#config part
$ifClient = "eth1";
$ifClient2 = "ppp";
#$ifClient3 = "eth2";
$ifInet = "eth0";
#$ifInet2 = "eth0";
$mysqlDbFrom = "ulog";
$mysqlDbTo = "landb";
$mysqlDb = $mysqlDbTo;
$mysqlTblFrom = "ulog";
$tblTraf = "trafic";
$programName = "trafAdd";
$programVersion = "v0.75 build 500";
$lastmodified = "2006-03-25";
$errorLogFile = "$homeDir/$programName"."Error.log";
$testerFile = "$homeDir/tester";
$trafTypeField = "trafType"; #values 1 - in, 2 - out;
$forceSelect = 1; # разрешить ускорение посредствам группировки минуя поле oob_time_sec если определена возможность ускорения
$forceAdd = 0; # для ускорения добавления записей в таблицу трафика нужно задать значение 1
$limit = "LIMIT 20000";
$cmdHost = "/usr/bin/host";
$cmdIp2str = "$homeDir/ip2str";
$tblAcntLoginInetList = "acntLoginInetList";
my @arrUaIxIp = `cat $homeDir/ua-ix/ua-ix.txt`;

if ($ARGV[0] eq "" || $ARGV[0] eq "start") {
$vrbs = 0;
} else {
$vrbs = 1;
}


##program part
#
# разделить записи на in/out первых n записей
# сгруппировать записи с заполненным полем in/out и взять в масив
# уплотнить масив по времени
# преобразовать в нормальные айпи
# заменить адреса на имена
# добавить информацию о пользователе и аккаутне
# положить новый масив в базу

&vrbs("Программа myAcntTrafAdd $programVersion запущена.");

# выходим если таблица трафика пуста
$strSql = "SELECT count(*) FROM $mysqlTblFrom;";
if (&valueDbSay("value", $strSql, $mysqlDbFrom) < 1) {
&vrbs("Таблица $mysqlTblFrom пуста.");
exit;
}

&vrbs("Берем записи трафика.$limit ......");
# помечаем входящий трафик
$strWhr = "or (left(oob_in,3) = \"$ifClient2\" and (oob_out = \"$ifInet\" or oob_out = \"$ifInet2\"))" if ($ifClient2 ne "");
$strWhr = $strWhr." or (oob_in = \"$ifClient3\" and (oob_out = \"$ifInet\" or oob_out = \"$ifInet2\"))" if ($ifClient3 ne "");
$strWhr = " WHERE (oob_in = \"$ifClient\" and (oob_out = \"$ifInet\" or oob_out = \"$ifInet2\")) $strWhr $limit;";
my $affIn = &valueDbUpdate($mysqlTblFrom, "$trafTypeField = 1".$strWhr, $mysqlDbFrom, 1);

&vrbs("client --> inet: $affIn.");

# помечаем исходящий трафик
$strWhr = "or ((oob_in = \"$ifInet\" or oob_in = \"$ifInet2\") and left(oob_out,3) = \"$ifClient2\")" if ($ifClient2 ne "");
$strWhr = $strWhr." or ((oob_in = \"$ifInet\" or oob_in = \"$ifInet2\") and oob_out = \"$ifClient3\")" if ($ifClient3 ne "");
$strWhr = " WHERE ((oob_in = \"$ifInet\" or oob_in = \"$ifInet2\") and oob_out = \"$ifClient\") $strWhr $limit;";
my $affOut = &valueDbUpdate($mysqlTblFrom, "$trafTypeField = 2".$strWhr, $mysqlDbFrom, 1);
&vrbs("inet --> client: $affOut.");

if ($forceSelect){
&vrbs("Определяем возможность ускорения:");
%hTimestamp = &valueDbSay("hash1", "SELECT min(oob_time_sec) as \"timestampMin\", max(oob_time_sec) as \"timestampMax\" FROM $mysqlTblFrom WHERE $trafTypeField > 0;", $mysqlDbFrom);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($hTimestamp{timestampMin});
$mon++; $year += 1900; #решение проблемы-2000
$sec = "0$sec" if (length($sec)==1);
$min = "0$min" if (length($min)==1);
$hour = "0$hour" if (length($hour)==1);
$mday = "0$mday" if (length($mday)==1);
$mon = "0$mon" if (length($mon)==1);
($sec_,$min_,$hour_,$mday_,$mon_,$year_,$wday_,$yday_,$isdst_) = localtime($hTimestamp{timestampMax});
$mon_++; $year_ += 1900; #решение проблемы-2000
if ($mon_ == $mon and $mday_ == $mday and $hour_ == $hour){
&vrbs(" ускорение возможно.");
$forceSelectDetected = 1;
} else {
&vrbs(" ускорение НЕ возможно (hourMin == $hour, hourMax == $hour_).");
}
}

# берем помеченный трафик

$strSql = "SELECT oob_time_sec as \"timestamp\", sum(ip_totlen) as \"size_ip\", sum(udp_len) as \"size_udp\", ip_saddr as \"clientIp\", ip_daddr as \"inetIp\", ip_protocol as \"proto\", tcp_sport as \"clientPort\", tcp_dport as \"inetPort\", udp_dport as \"inetPortUdp\", udp_sport as \"clientPortUdp\", $trafTypeField as \"trafType\" FROM $mysqlTblFrom WHERE $trafTypeField > 0 GROUP BY oob_time_sec, ip_saddr, ip_daddr, ip_protocol, tcp_sport, tcp_dport, udp_sport, udp_dport, $trafTypeField;";
$strSql = "SELECT sum(ip_totlen) as \"size_ip\", sum(udp_len) as \"size_udp\", ip_saddr as \"clientIp\", ip_daddr as \"inetIp\", ip_protocol as \"proto\", tcp_sport as \"clientPort\", tcp_dport as \"inetPort\", udp_dport as \"inetPortUdp\", udp_sport as \"clientPortUdp\", $trafTypeField as \"trafType\" FROM $mysqlTblFrom WHERE $trafTypeField > 0 GROUP BY ip_saddr, ip_daddr, ip_protocol, tcp_sport, tcp_dport, udp_sport, udp_dport, $trafTypeField;" if ($forceSelectDetected);
@traf = &valueDbSay("hash", $strSql, $mysqlDbFrom);
#print "\n\n$strSql\n\n";
$strSql = "SELECT count(*) FROM $mysqlTblFrom WHERE $trafTypeField > 0;";
&vrbs("Взято ".&valueDbSay("value", $strSql, $mysqlDbFrom)." записей, сгруппировано в ".($#traf+1).",") if ($vrbs);

# ужимаем масив
my $lll;
my $ipScan = 0;
for (my $i=0;$i<=$#traf;$i++) {
if ($traf[$i]{trafType} == 2){ # переварачиваем адреса и порты для трафика out
my $tmp = $traf[$i]{clientIp};
$traf[$i]{clientIp} = $traf[$i]{inetIp};
$traf[$i]{inetIp} = $tmp;

$tmp = $traf[$i]{'clientPort'};
$traf[$i]{'clientPort'} = $traf[$i]{inetPort};
$traf[$i]{inetPort} = $tmp;

$tmp = $traf[$i]{'clientPortUdp'};
$traf[$i]{'clientPortUdp'} = $traf[$i]{'inetPortUdp'};
$traf[$i]{'inetPortUdp'} = $tmp;
}
$traf[$i]{inetPort} = $traf[$i]{'inetPortUdp'} if ($traf[$i]{inetPort} eq ""); # если tcp_dport пуст - задаем значение udp_dport
$traf[$i]{clientIp} = `$cmdIp2str $traf[$i]{clientIp}`; # получаем нормальные айпи адреса
$traf[$i]{inetIp} = `$cmdIp2str $traf[$i]{inetIp}`;
$traf[$i]{clientIp} =~ s/\n//m;
$traf[$i]{inetIp} =~ s/\n//m;
$traf[$i]{size} = $traf[$i]{'size_ip'} + $traf[$i]{'size_udp'};
if (!$forceSelectDetected){
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($traf[$i]{timestamp});
$mon++; $year += 1900; #решение проблемы-2000
$sec = "0$sec" if (length($sec)==1);
$min = "0$min" if (length($min)==1);
$hour = "0$hour" if (length($hour)==1);
$mday = "0$mday" if (length($mday)==1);
$mon = "0$mon" if (length($mon)==1);
}

my $comprX = -1;
$lll = $#compr-1 if ($#compr > -1 && $hour != $compr[$#compr]{hour});
for (my $ci=0+$lll;$ci<=$#compr;$ci++){
$comprX = $ci if ($compr[$ci]{date} eq "$year-$mon-$mday" && $compr[$ci]{hour} == $hour && $compr[$ci]{clientIp} eq "$traf[$i]{clientIp}" && ($compr[$ci]{inetIp} eq "$traf[$i]{inetIp}" || (length($compr[$ci]{inetIp})<245 && &chkScan($compr[$ci]{inetIp}, $traf[$i]{inetIp}) eq "true")) && $compr[$ci]{proto} eq "$traf[$i]{proto}" && $compr[$ci]{trafType} eq "$traf[$i]{trafType}");
}

if ($comprX > -1) {
$compr[$comprX]{size} += $traf[$i]{size};
if (&chkScan($compr[$comprX]{inetIp}, $traf[$i]{inetIp}) eq "true"){
$ipScan++;
$compr[$comprX]{inetIp} = &joinScannedIp($compr[$comprX]{inetIp}, $traf[$i]{inetIp});
$compr[$comprX]{inetPort} = &listCompr("$compr[$comprX]{inetPort},$traf[$i]{inetPort}");
$compr[$comprX]{inetDnsName} = $compr[$comprX]{inetIp};
}
} else {
$compr[$#compr+1]{clientIp} = $traf[$i]{clientIp};
$compr[$#compr]{inetIp} = $traf[$i]{inetIp};
$compr[$#compr]{inetPort} = $traf[$i]{inetPort};
$compr[$#compr]{date} = "$year-$mon-$mday";
$compr[$#compr]{hour} = $hour;
$compr[$#compr]{size} = $traf[$i]{size};
$compr[$#compr]{proto} = $traf[$i]{proto};
$compr[$#compr]{trafType} = $traf[$i]{trafType};
################
#print "-[$#compr]-- $compr[$#compr]{date} $compr[$#compr]{hour}\t$compr[$#compr]{size}\n";
#print "trafType: $compr[$#compr]{trafType}\t proto:$compr[$#compr]{proto}\n";
#print "clientIp: $compr[$#compr]{clientIp}:$compr[$#compr]{'clientPort'}\n";
#print "inetIp: $compr[$#compr]{inetIp}:$compr[$#compr]{inetPort} ($compr[$#compr]{inetDnsName})\n\n";
}
}
&vrbs(" и сжато в ".($#compr+1)." (ipScan=$ipScan) записей.");

&vrbs("Берем идентификаторы клиентов.");
my @arrComp = &valueDbSay("hash", "SELECT id as \"acntCompId\", acntId, ip FROM acntCompList WHERE id <> 0 and acntId <> 0 and ip <> '';");
foreach (@arrComp){
$_{acntLoginInetId} = 0;
}

my @arrVpn = &valueDbSay("hash", "SELECT id as \"acntLoginInetId\", acntId, ip FROM $tblAcntLoginInetList WHERE acntId <> 0 and ip <> '';");
foreach (@arrVpn){
$_{acntCompId} = 0;
}

push @arrComp, @arrVpn;

###############
#for(my $i=0; $i<=$#arrComp; $i++) {
# print "-[$i/$#arrComp]-- acnt: $arrComp[$i]{acntId} comp: $arrComp[$i]{acntCompId} login: $arrComp[$i]{acntLoginInetId}\n";
# print "Ip: $arrComp[$i]{ip}\n\n";
#}

&vrbs("Определяем имена хостов.");
for (my $i=0;$i<=$#compr;$i++) {
$compr[$i]{inetDnsName} = $compr[$i]{inetIp} if ($compr[$i]{inetDnsName} eq "" && $compr[$i]{size} < 100);
$compr[$i]{inetDnsName} = &ip2name($compr[$i]{inetIp}) if ($compr[$i]{inetDnsName} eq "");

for (my $ix=0;$ix<=$#arrComp;$ix++){
if ($compr[$i]{clientIp} eq $arrComp[$ix]{ip}){
$compr[$i]{acntId} = $arrComp[$ix]{acntId};
$compr[$i]{acntCompId} = $arrComp[$ix]{acntCompId};
$compr[$i]{acntLoginInetId} = $arrComp[$ix]{acntLoginInetId};
}
}

################
#print "-[$i/$#compr]-- $compr[$i]{date} $compr[$i]{hour}\t$compr[$i]{size}\n";
#print "trafType: $compr[$i]{trafType}\t proto:$compr[$i]{proto}\n";
#print "clientIp: $compr[$i]{clientIp}:$compr[$i]{'clientPort'}\n";
#print "inetIp: $compr[$i]{inetIp}:$compr[$i]{inetPort} ($compr[$i]{inetDnsName})\n\n";
}

# для дальнейших модификаций скрипта добавления в базу: поле traficRegionId ни
# в коем случае не должно быть нулевым в таблице $tblTraf т.к. нулевое значение
# приведет к неучету этой части трафика при расчете стоимости трафика.
&vrbs("Определяем ua-ix.");
for (my $i=0;$i<=$#compr;$i++) {
my $ip = $compr[$i]{inetIp};
$ip = &strLeft($ip, index($ip, "-")) if (index($ip, "-") > 0);
$ip = &strLeft($ip, index($ip, ",")) if (index($ip, ",") > 0);
if (&chkUaix($ip)){
$compr[$i]{traficRegionId} = 1;
} else {
$compr[$i]{traficRegionId} = 2;
}
}

#exit;
# добавляем в базу
&vrbs("Добавляем записи в базу трафика.");
my $recObrob = 0;
my $recObrobFr = 0;
my $recAdded = 0;
my $recUpdated = 0;
for (my $ci=0;$ci<=$#compr;$ci++){
$recObrob++;
my @arrHash = ();
my $arrHashSql;
$compr[$ci]{day} = &strRight($compr[$ci]{date}, 2);
if ($compr[0]{hour} != $compr[$ci]{hour} && $compr[0]{date} ne $compr[$ci]{date} && $forceAdd){
$recObrobFr++;
} else {
$arrHashSql = "SELECT * FROM ".&sayTblTraf($compr[0]{date})." WHERE day = \"$compr[$ci]{day}\" and hour = $compr[$ci]{hour} and acntCompIp = \"$compr[$ci]{clientIp}\" and inetIp = \"$compr[$ci]{inetIp}\" and inetPort = \"$compr[$ci]{inetPort}\" and proto = $compr[$ci]{proto} and trafType = $compr[$ci]{trafType} and traficRegionId = $compr[$ci]{traficRegionId};";
@arrHash = &valueDbSay("hash", $arrHashSql);
}

if ($#arrHash == -1){
my $strSql = "INSERT INTO ".&sayTblTraf($compr[0]{date})." (day,hour,acntCompIp,inetDnsName,size,acntId,acntCompId,inetIp,inetPort,proto,trafType,acntLoginInetId, traficRegionId) VALUES(\"$compr[$ci]{day}\",\"$compr[$ci]{hour}\",\"$compr[$ci]{clientIp}\",\"$compr[$ci]{inetDnsName}\",$compr[$ci]{size},\"$compr[$ci]{acntId}\",\"$compr[$ci]{acntCompId}\",\"$compr[$ci]{inetIp}\",\"$compr[$ci]{inetPort}\",\"$compr[$ci]{proto}\",\"$compr[$ci]{trafType}\",\"$compr[$ci]{acntLoginInetId}\" ,\"$compr[$ci]{traficRegionId}\");";
# &vrbs($strSql);
my ($aff, $ins_id) = &valueDbInsert($strSql);
if ($aff == 0){
&vrbs("affected_rows == 0 $strSql");
&error($strSql);
} else {
$recAdded++;
}
} elsif ($#arrHash>0){
&error("Duplicate entry for query $arrHashSql");
} else {
my $strUpdate = "size = $arrHash[0]{size}+$compr[$ci]{size} WHERE day = $compr[$ci]{day} and hour = $compr[$ci]{hour} and acntCompIp = \"$compr[$ci]{clientIp}\" and inetIp = \"$compr[$ci]{inetIp}\" and inetPort = \"$compr[$ci]{inetPort}\" and proto = $compr[$ci]{proto} and trafType = $compr[$ci]{trafType} and traficRegionId = $compr[$ci]{traficRegionId};";
my $aff = &valueDbUpdate(&sayTblTraf($compr[0]{date}), $strUpdate);
if ($aff == 0) {
&error($strUpdate);
} else {
$recUpdated++;
}
}
&vrbs("$recObrob записей обработано, $recAdded добавлено ($recObrobFr из них ускоренно) и $recUpdated обновлено.") if (&strRight($recObrob,2) eq "00");
}
&vrbs("$recObrob записей обработано, $recAdded добавлено ($recObrobFr из них ускоренно) и $recUpdated обновлено.") if ($recObrob > 0);

#удаляем добавленные записи
&vrbs("Удаляем добавленные записи из таблицы $mysqlTblFrom.");
&vrbs("Удалено ".&valueDbDel($mysqlTblFrom, "$trafTypeField > 0", $mysqlDbFrom)." записей.");

my @acntId;
for (my $i=0; $i<=$#compr; $i++){
$acntId[$#acntId+1] = $compr[$i]{acntId} if (&strInArr_($compr[$i]{acntId}, @acntId) == -1);
}
&vrbs("Выделено ".(@acntId)." аккаунтов из массива.");

&vrbs("Пересчитываем балансы.");
&refreshTime;
for (my $i=0; $i<=$#acntId; $i++){
&sayAcntBalance($acntId[$i], "$year-$mon-$mday", 3);
}

# modules part

sub vrbs {
#$_[0] - msg
return if (!$vrbs);
&refreshTime;
print "$year-$mon-$mday $hour:$min:$sec $_[0]\n";
}

sub ip2name {
my $ip = $_[0];
my $name;
my @name = `$cmdHost $ip`;
for (my $i=0;$i<=$#name;$i++) {
if ($name[$i] =~ /(domain name pointer )/) {
$name[$i] = $';
$name[$i] =~ s/\n//;
$name[$i] = &strLeft($name[$i], length($name[$i])-1);
}
$name = $name[$i] if (length($name)>length($name[$i]) || $i==0);
}
$name = $ip if (&strLeft($name,5) eq "Host ");
return $name;
}

sub chkUaix {
# $_[0] - ip
# &tester($_[0]);
my $uaddr = shift;
map {
my $ipm = $_;
$ipm =~ s/ //g;
$ipm =~ s/\n//g;
if ($ipm) {
my ($oaddr, $mask) = split/\//,$ipm;
my $poaddr = unpack("L", pack("C4", (split (/\./, $oaddr))));
my $puaddr = unpack("L", pack("C4", (split (/\./, $uaddr))));
my $pmask = unpack("L", pack("B32", (1 x $mask)));
return 1 if (($puaddr & $pmask) == ($poaddr & $pmask));
}
} (@arrUaIxIp);
# &tester("zzz");
return 0;
}

sub chkScan {
# $_[0] - ip1, $_[1] - ip2
if ($_[0] eq $_[1]){
return "false";
}

local ($str1, $str2);
if ($_[0] =~ /\A(\d+\.\d+\.\d+)/) {
$str1 = $1;
}
if ($_[1] =~ /\A(\d+\.\d+\.\d+)/) {
$str2 = $1;
}
if ($str1 eq $str2) {
return "true";
} else {
return "false";
}
}

sub joinScannedIp {
# $_[0] - ip1, $_[1] - ip2
if (&chkScan($_[0], $_[1]) eq "true"){
local ($str1, $str2, $strStr);
if ($_[0] =~ /\A(\d+\.\d+\.\d+.)/) {
$strStr = $1;
$str1 = $';
}
if ($_[1] =~ /\A(\d+\.\d+\.\d+.)/) {
$str2 = $';
}
return $strStr.&listCompr("$str1,$str2");
} else {
return $_[0];
}
}

sub listCompr {
#$_[0] - str
my $nl = "";
my $splt = ",";
my @arr = sort{$a <=> $b} split(/,/, $_[0]);
for (my $i=0;$i<$#arr;$i++){
my $n = 1;
while ($arr[$i+$n] eq $nl && $i+$n <= $#arr){ $n++; }
if ($i+$n <= $#arr) {
if (index($arr[$i],"-")>0 && index($arr[$i+$n],"-")>0){
my @arr_ = split(/-/, $arr[$i]);
my @arr_2 = split(/-/, $arr[$i+$n]);
if ($arr_[0] eq $arr_2[0] || $arr_[1] eq $arr_2[0] || ($arr_[0] < $arr_2[0] && $arr_[1] > $arr_2[0])){
$arr_2[0] = $nl;
if ($arr_[1] eq $arr_2[1] || ($arr_[0] < $arr_2[1] && $arr_[1] > $arr_2[1])){
$arr_2[1] = $nl;
} elsif ($arr_[1] < $arr_2[1]){
$arr_[1] = $arr_2[1];
$arr_2[1] = $nl;
}
} elsif ($arr_[1] eq $arr_2[0]+1){
$arr_[1] = $arr_2[1];
$arr_2[0] = $nl;
$arr_2[1] = $nl;
}
if ($arr_[0] ne $nl && $arr_[1] ne $nl){ $arr[$i] = join("-", @arr_); } else { $arr[$i] = $nl; }
if ($arr_2[0] ne $nl && $arr_2[1] ne $nl){ $arr[$i+$n] = join("-", @arr_2); } else { $arr[$i+$n] = $nl; }
} elsif (index($arr[$i],"-")>0 && index($arr[$i+$n],"-")<0){
my @arr_ = split(/-/, $arr[$i]);
if ($arr[$i+$n] eq $arr_[0] || $arr[$i+$n] eq $arr_[1] || ($arr[$i+$n] > $arr_[0] && $arr[$i+$n] < $arr_[1])){
$arr[$i+$n] = $nl;
} elsif ($arr[$i+$n] eq $arr_[1]+1){
$arr_[1]++;
$arr[$i+$n] = $nl;
}
if ($arr_[0] ne $nl && $arr_[1] ne $nl){ $arr[$i] = join("-", @arr_); } else { $arr[$i] = $nl; }
} elsif (index($arr[$i],"-")<0 && index($arr[$i+$n],"-")>0){
my @arr_ = split(/-/, $arr[$i+$n]);
if ($arr[$i] eq $arr_[0] || $arr[$i] eq $arr_[1] || ($arr[$i] > $arr_[0] && $arr[$i] < $arr_[1])){
$arr[$i] = $nl;
} elsif ($arr[$i] eq $arr_[0]-1){
$arr_[0]--;
$arr[$i] = $nl;
}
if ($arr_[0] ne $nl && $arr_[1] ne $nl){ $arr[$i+$n] = join("-", @arr_); } else { $arr[$i+$n] = $nl; }
} elsif (index($arr[$i],"-")<0 && index($arr[$i+$n],"-")<0){
if ($arr[$i] eq $arr[$i+$n]){
$arr[$i+$n] = $nl;
} elsif ($arr[$i] eq $arr[$i+$n]-1){
$arr[$i] = "$arr[$i]-$arr[$i+$n]";
$arr[$i+$n] = $nl;
}
} else {
&error("\n \$i=\"$i\"\n \$n=\"$n\"\n \$_[0]=\"$_[0]\"\n \$arr[\$i]:index($arr[$i],\"-\")=\"".index($arr[$i],"-")."\"\n $arr[$i+$n]:index($arr[$i+$n],\"-\")=\"".index($arr[$i+$n],"-")."\"\n join=\"".join(",", sort{$a <=> $b} @arr)."\"\n");
}
}
}

my $strRet;
$strRet = join(",", sort{$a <=> $b} @arr);
$strRet =~ tr/,,/,/s;
$strRet = substr($strRet,1) if (substr($strRet,0,1) eq $splt);
$strRet = &listCompr($strRet) if ($strRet ne $_[0]);
return $strRet;
}



Я к чему виду! За день у меня трафик в среднем 12 гиг, а сбрасыватся в основную базу не успевает. За сутки база ulog(a) в среднем занимает 1.5 гига. приводит к тому что трафик не весь отображается у пользователей.

Вроде и сервер новый, и памяти хватает. Почему это происходит? Может кто то подскажет ?


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
29741



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |