You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/tools/check_variables.pl

70 lines
2.8 KiB

#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use DBD::mysql;
use Getopt::Long qw(:config permute no_ignore_case);
my %opts;
sub main {
@ARGV = @_;
$opts{'user'} = $ENV{"DBI_USER"} || "";
$opts{'password'} = $ENV{"MYSQL_PWD"} || "";
$opts{'host'} = $ENV{"MYSQL_HOST"} || "127.0.0.1";
$opts{'port'} = $ENV{"MYSQL_TCP_PORT"} || 6032;
GetOptions(\%opts,
'user|u=s',
'password|p=s',
'host|h=s',
'port|P=i',
);
my $dbn="dbi:mysql:main:".$opts{'host'}.":".$opts{'port'};
my $dbh=DBI->connect($dbn, $opts{'user'}, $opts{'password'}) or die "Unable to connect: $DBI::errstr\n";
my $query="SELECT * FROM runtime_global_variables";
my $selh=$dbh->prepare($query) or die "Unable to prepare: $DBI::errstr\n";
$selh->execute() or die "Unable to execute: $DBI::errstr\n";
my %data;
while (my $res=$selh->fetchrow_hashref) {
$data{$res->{'variable_name'}}=$res->{'variable_value'}
}
# printf "ProxySQL is running with: $data{'mysql-threads'} threads\n";
my $warns=0;
if ($data{'mysql-poll_timeout'}*2 > $data{'mysql-ping_interval_server_msec'}) {
printf "WARN: mysql-ping_interval_server_msec ($data{'mysql-ping_interval_server_msec'}) is too small compared to mysql-poll_timeout ($data{'mysql-poll_timeout'})\n";
$warns+=1;
}
if ($data{'mysql-ping_interval_server_msec'} < $data{'mysql-ping_timeout_server'}*5) {
printf "WARN: mysql-ping_interval_server_msec ($data{'mysql-ping_interval_server_msec'}) is too small compared to mysql-ping_timeout_server ($data{'mysql-ping_timeout_server'})\n";
$warns+=1;
}
if ($data{'mysql-monitor_ping_interval'} < $data{'mysql-monitor_ping_timeout'}*5) {
printf "WARN: mysql-monitor_ping_interval ($data{'mysql-monitor_ping_interval'}) is too small compared to mysql-monitor_ping_timeout ($data{'mysql-monitor_ping_timeout'})\n";
$warns+=1;
}
if ($data{'mysql-monitor_read_only_interval'} < $data{'mysql-monitor_read_only_timeout'}*5) {
printf "WARN: mysql-monitor_read_only_interval ($data{'mysql-monitor_read_only_interval'}) is too small compared to mysql-monitor_read_only_timeout ($data{'mysql-monitor_read_only_timeout'})\n";
$warns+=1;
}
if ($data{'mysql-monitor_replication_lag_interval'} < $data{'mysql-monitor_replication_lag_timeout'}*5) {
printf "WARN: mysql-monitor_replication_lag_interval ($data{'mysql-monitor_replication_lag_interval'}) is too small compared to mysql-monitor_replication_lag_timeout ($data{'mysql-monitor_replication_lag_timeout'})\n";
$warns+=1;
}
if ($data{'mysql-connect_timeout_server_max'} < $data{'mysql-connect_timeout_server'}*2) {
printf "WARN: mysql-connect_timeout_server_max ($data{'mysql-connect_timeout_server_max'}) is too small compared to mysql-connect_timeout_server ($data{'mysql-connect_timeout_server'})\n";
$warns+=1;
}
printf "Check variables completed with $warns warnings.\n";
return 0;
}
if(!caller) { exit(main(@ARGV)); }