结合Zabbix做MySQL相关性能参数
发布时间:2020-12-15 21:09:23  所属栏目:大数据  来源:网络整理 
            导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/perluse Getopt::Long;use DBI;use warnings;use strict;my $config_file='';my $db_option='';#用于保存从数据库得到的数据my %status;#P
                
                
                
            | 以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #!/usr/bin/perl
use Getopt::Long;
use DBI;
use warnings;
use strict;
my $config_file='';
my $db_option='';
#用于保存从数据库得到的数据
my %status;
#Parameters
my $test_para='';
my $rcode='';
#Check Parameters 
if([email?protected]){
	&Useage;
	exit(123);
}
sub Useage{
     print "Please Use for example:n";
     print "$0 --config_file=path --db_option=web007n";
}
#sub Help{
#    print "--dbname=dbnamen";
#    print "--location=locationn";
#    print "--port=portn";
#    print "--db_user=db_usern";
#    print "--db_pass=passwordn";
#}
#Parse Parameters  解析参数的函数,其中需要指定配置文件的位置、数据库选项
$rcode = GetOptions('config_file=s' => $config_file,'db_option=s' => $db_option);
if(!$db_option){
print "please chose db_optionn";
exit(44);
}
#Get MySQL refer Parameters 取MySQL相关参数
my $dbname=&Read_config_file("db_name");
my $location=&Read_config_file("location");
#print "$location=$locationn";
my $port=&Read_config_file("port");
my $db_user=&Read_config_file("db_user");
my $db_pass=&Read_config_file("db_pass");
my $get_status=&Read_config_file("status");
#Connect MySQL Server,Get status and push into  array;Get one line everytime
#For example:
#First time @fetch_row=(Aborted_clients,4),so $fetch_row[0]=Aborted_clients,$fetch_row[1]=4
#and the Second time $fetch_row=(Aborted_connects,10),etc.
sub Connect_MySQL{
my $database="DBI:mysql:$dbname:$location:$port";
my $dbh=DBI->connect($database,$db_user,$db_pass) or die "Can not connect MySQL Server". $DBI::errstr;
my $sql="show global status";
my $sth=$dbh->prepare($sql);
$sth->execute() or die "Can not Execute SQL statement";
my @fetch_row;
my @table_name;
while (@fetch_row = $sth->fetchrow_array){
        my @[email?protected]_row;
	#print scalar(@row);
	push(@table_name,@row);
}
#List 
foreach my $table_name (@table_name){
	my($key,$value)=(@$table_name[0],@$table_name[1]);
	if(($key)&&($value)){
	$status{$key}=$value;
	}
}
}
sub Read_config_file{
#	print "Can Not Find $config_filen" if(!$config_file);
#	print "Can find $config_filen";
	open(CONFIG_FILE,"$config_file") or die "Can Not Open $config_file"; 
	my $get_parameters=shift;
	my $return_parameter='';
	#print "$get_parameters=$get_parametersn";
	my $read_format_head="&;$db_option&;";
	my $read_format_end="&;/$db_option&;";
	my @read_file=(<CONFIG_FILE>);
	my [email?protected]_file;
	for(my $i=0;$i<=($array_count-1);$i++){
		chomp($read_file[$i]);
		print "$db_option=$db_optionn";
	        my $is_valid_option_qr="&;(.*)&;";
		my @Refer_db_option;
		if($read_file[$i] =~ $is_valid_option_qr){
			push(@Refer_db_option,$1);
		}
		my $return_value = &is_valid_option(@Refer_db_option,$db_option);
		#print "$return_value=$return_valuen";
#		foreach my $judge_db_option(@Judge_db_option){
#		print "$judge_db_option=$judge_db_optionn";
#		last if($1 =~ $db_option);
#		}
		next if($read_file[$i] =~ /$read_format_head/);
		last  if($read_file[$i] =~ /$read_format_end/);
		#print "$read_file[$i]n";
		#$return_parameter=$read_file[$i] if($read_file[$i] =~ /$get_parameters=(.*)/);
		$return_parameter=$1 if($read_file[$i] =~ /$get_parameters=(.*)/);
		#print "$dbname=$dbnamen";
	}
	return $return_parameter;
}
sub is_valid_option{
	my @Judge_db_option=shift;
	my $get_db_option=shift;
	my [email?protected]_db_option;
	print "$Judge_db_option_count=$Judge_db_option_countn";
	print "$get_db_option=$get_db_optionn";
	#foreach my $judege_db (@Judge_db_option){
	#print "$judege_db=$judege_dbn";
	#last if($judege_db =~ $get_db_option);
	#}
	#return 0;
}
#Get MySQL status:QPS/Insert/Update etc.
#For example
#If want to get QPS,You should call GET_MySQL_Status(Queries,$Interval_time)
sub GET_MySQL_Status{
	my $MySQL_Status=shift;
	print "$MySQL_Status=$MySQL_Statusn";
	if(!$MySQL_Status){
	print "please Specify status value on configure file($config_file)n";
	}
	my $Interval_time=shift; 
	$MySQL_Status = 'Queries' if($MySQL_Status eq 'qps');
	#$MySQL_Status = "Com_$MySQL_Status" if ($MySQL_Status);
	
	#Call function Connect_MySQL for connect MySQL Server
	&Connect_MySQL;
	print "$MySQL_Status=$MySQL_Statusn";
	$Interval_time=2 if (!$Interval_time);
	print "$Interval_time=$Interval_timen";
	my $GET_MySQL_Status;
	my $MySQL_Status_old=$status{$MySQL_Status};
	#print "$status{$MySQL_Status}=$status{$MySQL_Status}n";
#debug
	#print "$MySQL_Status_old=";
	#print  sprintf("%0.2f",$MySQL_Status_old)."n";
	my $Uptime_old=$status{'Uptime'};
	sleep 2;
	my $MySQL_Status_now=$status{$MySQL_Status};
#debug
	#print "$MySQL_Status_now=";
	#print sprintf("%0.2f",$MySQL_Status_now)."n";
	my $Uptime_now=$status{'Uptime'};
	if(($MySQL_Status_now)&&($MySQL_Status_old)&&($Uptime_old)&&($Uptime_now)){
		if(($MySQL_Status_now = $MySQL_Status_old) || ($MySQL_Status_now == 0)){
		print "0n";
		}else{
		$GET_MySQL_Status=($MySQL_Status_now-$MySQL_Status_old)/($Uptime_now-$Uptime_old);
		#print sprintf("%.2f",$GET_MySQL_Status);	
		print "$GET_MySQL_Statusn";	
		}
	}
}
&GET_MySQL_Status($get_status,3);
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
