adding --reportfile for file output result
This commit is contained in:
		
							parent
							
								
									5ae4a7dddd
								
							
						
					
					
						commit
						0736ef7c56
					
				
					 1 changed files with 42 additions and 26 deletions
				
			
		|  | @ -1,5 +1,5 @@ | |||
| #!/usr/bin/perl -w | ||||
| # mysqltuner.pl - Version 1.4.3 | ||||
| # mysqltuner.pl - Version 1.4.4 | ||||
| # High Performance MySQL Tuning Script | ||||
| # Copyright (C) 2006-2014 Major Hayden - major@mhtx.net | ||||
| # | ||||
|  | @ -42,7 +42,7 @@ use Getopt::Long; | |||
| use File::Basename; | ||||
| use Cwd 'abs_path'; | ||||
| # Set up a few variables for use in the script | ||||
| my $tunerversion = "1.4.3"; | ||||
| my $tunerversion = "1.4.4"; | ||||
| my (@adjvars, @generalrec); | ||||
| 
 | ||||
| # Set defaults | ||||
|  | @ -62,6 +62,7 @@ my %opt = ( | |||
| 		"checkversion" 	=> 0, | ||||
| 		"buffers" 		=> 0, | ||||
| 		"passwordfile"	=> 0, | ||||
| 		"reportfile"	=> 0, | ||||
| 	); | ||||
| 
 | ||||
| # Gather the options from the command line | ||||
|  | @ -84,6 +85,8 @@ GetOptions(\%opt, | |||
| 		'help', | ||||
| 		'buffers', | ||||
| 		'passwordfile=s', | ||||
| 		'reportfile=s', | ||||
| 		'silent', | ||||
| 	); | ||||
| 
 | ||||
| if (defined $opt{'help'} && $opt{'help'} == 1) { usage(); } | ||||
|  | @ -117,6 +120,7 @@ sub usage { | |||
| 		"      --forcemem <size>    Amount of RAM installed in megabytes\n". | ||||
| 		"      --forceswap <size>   Amount of swap memory configured in megabytes\n". | ||||
| 		"      --passwordfile <path>Path to a password file list(one password by line)\n". | ||||
| 		"      --reportfile <path>  Path to a report txt file\n". | ||||
| 		"\n". | ||||
| 		"   Output Options:\n". | ||||
| 		"      --nogood             Remove OK responses\n". | ||||
|  | @ -131,17 +135,28 @@ sub usage { | |||
| my $devnull = File::Spec->devnull(); | ||||
| my $basic_password_files=($opt{passwordfile} eq "0")? abs_path(dirname(__FILE__))."/basic_passwords.txt" : abs_path($opt{passwordfile}) ; | ||||
| 
 | ||||
| #  | ||||
| my $reportfile=undef; | ||||
| $reportfile=abs_path($opt{reportfile}) unless $opt{reportfile} eq "0"; | ||||
| 
 | ||||
| my $fh=undef; | ||||
| open($fh, '>', $reportfile) or die("Fail opening $reportfile") if defined($reportfile); | ||||
| 
 | ||||
| # Setting up the colors for the print styles | ||||
| my $good = ($opt{nocolor} == 0)? "[\e[0;32mOK\e[0m]" : "[OK]" ; | ||||
| my $bad = ($opt{nocolor} == 0)? "[\e[0;31m!!\e[0m]" : "[!!]" ; | ||||
| my $bad  = ($opt{nocolor} == 0)? "[\e[0;31m!!\e[0m]" : "[!!]" ; | ||||
| my $info = ($opt{nocolor} == 0)? "[\e[0;34m--\e[0m]" : "[--]" ; | ||||
| 
 | ||||
| # Functions that handle the print styles | ||||
| sub goodprint { print $good." ".$_[0] unless ($opt{nogood} == 1); } | ||||
| sub infoprint { print $info." ".$_[0] unless ($opt{noinfo} == 1); } | ||||
| sub badprint { print $bad." ".$_[0] unless ($opt{nobad} == 1); } | ||||
| sub redwrap { return ($opt{nocolor} == 0)? "\e[0;31m".$_[0]."\e[0m" : $_[0] ; } | ||||
| sub greenwrap { return ($opt{nocolor} == 0)? "\e[0;32m".$_[0]."\e[0m" : $_[0] ; } | ||||
| sub prettyprint { | ||||
| 	print $_[0]; | ||||
| 	print $fh $_[0] if defined($fh); | ||||
| } | ||||
| sub goodprint { prettyprint $good." ".$_[0] unless ($opt{nogood} == 1); } | ||||
| sub infoprint { prettyprint $info." ".$_[0] unless ($opt{noinfo} == 1); } | ||||
| sub badprint  { prettyprint $bad. " ".$_[0] unless ($opt{nobad}  == 1); } | ||||
| sub redwrap   { return ($opt{nocolor} == 0) ? "\e[0;31m".$_[0]."\e[0m" : $_[0] ; } | ||||
| sub greenwrap { return ($opt{nocolor} == 0) ? "\e[0;32m".$_[0]."\e[0m" : $_[0] ; } | ||||
| 
 | ||||
| # Calculates the parameter passed in bytes, and then rounds it to one decimal place | ||||
| sub hr_bytes { | ||||
|  | @ -468,7 +483,7 @@ sub get_basic_passwords { | |||
| } | ||||
| 
 | ||||
| sub security_recommendations { | ||||
| 	print "\n-------- Security Recommendations  -------------------------------------------\n"; | ||||
| 	prettyprint "\n-------- Security Recommendations  -------------------------------------------\n"; | ||||
| 	# Looking for Anonymous users | ||||
| 	my @mysqlstatlist = `$mysqlcmd $mysqllogin -Bse "SELECT CONCAT(user, '\@', host) FROM mysql.user WHERE TRIM(USER) = '' OR USER IS NULL ;"`; | ||||
| 	if (@mysqlstatlist) { | ||||
|  | @ -500,7 +515,7 @@ sub security_recommendations { | |||
| 			chomp($line); | ||||
| 			badprint "User '".$line."' has user name as password.\n"; | ||||
| 		} | ||||
| 		push(@generalrec, "Set up a Secure Password for user\@host ( SET PASSWORD FOR  'user'\@'SpecificDNSorIp' = PASSWORD('secure_password'); )"); | ||||
| 		push(@generalrec, "Set up a Secure Password for user\@host ( SET PASSWORD FOR 'user'\@'SpecificDNSorIp' = PASSWORD('secure_password'); )"); | ||||
| 	} | ||||
| 
 | ||||
| 	@mysqlstatlist = `$mysqlcmd $mysqllogin -Bse "SELECT CONCAT(user, '\@', host) FROM mysql.user WHERE HOST='%';"`; | ||||
|  | @ -620,12 +635,12 @@ sub check_architecture { | |||
| my (%enginestats,%enginecount,$fragtables); | ||||
| sub check_storage_engines { | ||||
| 	if ($opt{skipsize} eq 1) { | ||||
| 		print "\n-------- Storage Engine Statistics -------------------------------------------\n"; | ||||
| 		prettyprint "\n-------- Storage Engine Statistics -------------------------------------------\n"; | ||||
| 		infoprint "Skipped due to --skipsize option\n"; | ||||
| 		return; | ||||
| 	} | ||||
| 	print "\n-------- Storage Engine Statistics -------------------------------------------\n"; | ||||
| 	infoprint "Status: "; | ||||
| 	prettyprint "\n-------- Storage Engine Statistics -------------------------------------------\n"; | ||||
| 	 | ||||
| 	my $engines; | ||||
| 	if (mysql_version_ge(5, 1)) { | ||||
| 		my @engineresults = `$mysqlcmd $mysqllogin -Bse "SELECT ENGINE,SUPPORT FROM information_schema.ENGINES WHERE ENGINE NOT IN ('performance_schema','MyISAM','MERGE','MEMORY') ORDER BY ENGINE ASC"`; | ||||
|  | @ -642,7 +657,7 @@ sub check_storage_engines { | |||
| 		$engines .= (defined $myvar{'have_isam'} && $myvar{'have_isam'} eq "YES")? greenwrap "+ISAM " : redwrap "-ISAM " ; | ||||
| 		$engines .= (defined $myvar{'have_ndbcluster'} && $myvar{'have_ndbcluster'} eq "YES")? greenwrap "+NDBCluster " : redwrap "-NDBCluster " ; | ||||
| 	} | ||||
| 	print "$engines\n"; | ||||
| 	infoprint "Status: $engines\n"; | ||||
| 	if (mysql_version_ge(5)) { | ||||
| 		# MySQL 5 servers can have table sizes calculated quickly from information schema | ||||
| 		my @templist = `$mysqlcmd $mysqllogin -Bse "SELECT ENGINE,SUM(DATA_LENGTH),COUNT(ENGINE) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema','mysql') AND ENGINE IS NOT NULL GROUP BY ENGINE ORDER BY ENGINE ASC;"`; | ||||
|  | @ -890,7 +905,7 @@ sub calculations { | |||
| } | ||||
| 
 | ||||
| sub mysql_stats { | ||||
| 	print "\n-------- Performance Metrics -------------------------------------------------\n"; | ||||
| 	prettyprint "\n-------- Performance Metrics -------------------------------------------------\n"; | ||||
| 	# Show uptime, queries per second, connections, traffic stats | ||||
| 	my $qps; | ||||
| 	if ($mystat{'Uptime'} > 0) { $qps = sprintf("%.3f",$mystat{'Questions'}/$mystat{'Uptime'}); } | ||||
|  | @ -1152,10 +1167,10 @@ sub mysql_stats { | |||
| 					and ( | ||||
| 						($myvar{'innodb_buffer_pool_size'}/$myvar{'innodb_buffer_pool_instances'}) < 1024*1024*924 | ||||
| 					or  ($myvar{'innodb_buffer_pool_size'}/$myvar{'innodb_buffer_pool_instances'}) > 1024*1024*1124 ) ) { | ||||
| 				badprint "InnoDB buffer pool is greater than 1Go and each InnoDB buffer pool instance must manage 900Mo to 1.1Go buffer pool size"; | ||||
| 				badprint "InnoDB buffer pool is greater than 1Go and each InnoDB buffer pool instance must manage 900Mo to 1.1Go buffer pool size.\n"; | ||||
| 				push(@adjvars,"innodb_buffer_pool_instances must be calculated with innodb_buffer_pool_size / 1Go "); | ||||
| 			} else { | ||||
| 				goodprint "InnoDB buffer pool instances is configurated for managing around 1Go Buffer pool size."; | ||||
| 				goodprint "InnoDB buffer pool instances is configurated for managing around 1Go Buffer pool size.\n"; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | @ -1163,29 +1178,28 @@ sub mysql_stats { | |||
| 
 | ||||
| # Take the two recommendation arrays and display them at the end of the output | ||||
| sub make_recommendations { | ||||
| 	print "\n-------- Recommendations -----------------------------------------------------\n"; | ||||
| 	prettyprint "\n-------- Recommendations -----------------------------------------------------\n"; | ||||
| 	if (@generalrec > 0) { | ||||
| 		print "General recommendations:\n"; | ||||
| 		foreach (@generalrec) { print "    ".$_."\n"; } | ||||
| 		prettyprint "General recommendations:\n"; | ||||
| 		foreach (@generalrec) { prettyprint "    ".$_."\n"; } | ||||
| 	} | ||||
| 	if (@adjvars > 0) { | ||||
| 		print "Variables to adjust:\n"; | ||||
| 		prettyprint "Variables to adjust:\n"; | ||||
| 		if ($mycalc{'pct_physical_memory'} > 90) { | ||||
| 			print "  *** MySQL's maximum memory usage is dangerously high ***\n". | ||||
| 			prettyprint "  *** MySQL's maximum memory usage is dangerously high ***\n". | ||||
| 				  "  *** Add RAM before increasing MySQL buffer variables ***\n"; | ||||
| 		} | ||||
| 		foreach (@adjvars) { print "    ".$_."\n"; } | ||||
| 		foreach (@adjvars) { prettyprint "    ".$_."\n"; } | ||||
| 	} | ||||
| 	if (@generalrec == 0 && @adjvars ==0) { | ||||
| 		print "No additional performance recommendations are available.\n" | ||||
| 		prettyprint "No additional performance recommendations are available.\n" | ||||
| 	} | ||||
| 	print "\n"; | ||||
| } | ||||
| 
 | ||||
| # --------------------------------------------------------------------------- | ||||
| # BEGIN 'MAIN' | ||||
| # --------------------------------------------------------------------------- | ||||
| print	"\n >>  MySQLTuner $tunerversion - Major Hayden <major\@mhtx.net>\n". | ||||
| prettyprint	" >>  MySQLTuner $tunerversion - Major Hayden <major\@mhtx.net>\n". | ||||
| 		" >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/\n". | ||||
| 		" >>  Run with '--help' for additional options and output filtering\n"; | ||||
| mysql_setup;				# Gotta login first | ||||
|  | @ -1198,6 +1212,8 @@ security_recommendations;	# Display some security recommendations | |||
| calculations;				# Calculate everything we need | ||||
| mysql_stats;				# Print the server stats | ||||
| make_recommendations;		# Make recommendations based on stats | ||||
| 
 | ||||
| close($fh) if defined($fh); | ||||
| # --------------------------------------------------------------------------- | ||||
| # END 'MAIN' | ||||
| # --------------------------------------------------------------------------- | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 root
						root