- Offizieller Beitrag
Keine Diskussion vorhanden. Bei Bedarf bitte erstellen.
Auf Grund der Anregung in einem anderen Thread nun ein AddOn, mit dem man aus PD-Admin heraus die mySql-Datenbank überprüfen und optimieren kann.
Update 11.11. (nein, nicht 11 Uhr 11):
Unser "Mod-Moderator" Michael hat mich auf eine Idee gebracht, um die bisher vorhandene "Tainted"-Warnmeldung von Perl zu verhindern. Das scheint jetzt zu funktionieren. Der Code wurde angepasst.
-rwsr-xr-x 1 root root /opt/pdadmin/www/administrator/addon_mysql.cgi
Code
#!/usr/local/bin/perl -w -U
####
#### PD-Admin Add-On: mySql checking
#### miko 10/2005 + 11/2005
####
use CGI ':standard';
use DBI;
use strict;
use vars qw($dsn $user $password $color_scheme $color_scheme_administrator);
do "/opt/pdadmin/etc/pdadmin.conf" or die "Can't read configuration: $!";
####
#### Korrekte Session ueberpruefen
####
unless (defined $ENV{REQUEST_URI}) {die "no request url available!"};
$ENV{REQUEST_URI} =~ m/\S*\/(\w*)\/addon_mysql.cgi$/;
my $SessionID = $1;
my $dbh = DBI->connect($dsn,$user,$password) or die "can't connect!";
my $query = "select time from sessions where session='$SessionID' limit 1";
my $sth = $dbh->prepare($query) or die "cannot prepare query '$query'";
my $rv = $sth->execute or die "cannot execute query '$query'";
my $myTime = $sth->fetchrow;
$sth->finish();
$myTime or die "session not found!";
####
#### Session Time aktualisieren
####
my $time = time;
$query = "Update sessions set time ='$time' where session='$SessionID'";
$sth = $dbh->prepare($query) or die "cannot prepare query '$query'";
$rv = $sth->execute or die "cannot execute query '$query'";
$sth->finish;
####
#### Version anzeigen
####
$query = "select version()";
$sth = $dbh->prepare($query) or die "cannot prepare query '$query'";
$rv = $sth->execute or die "cannot execute query '$query'";
my $data1 = $sth->fetchrow;
$sth->finish;
$dbh->disconnect();
####
#### Geforderte Aktionen durchführen
####
my $mcg = CGI->new;
my $action = $mcg->param('action') || '';
my $pw = `cat /opt/pdadmin/etc/mysql_rootpw.conf 2>/dev/null`;
# Variable "untainted" machen, um spaetere Fehlermeldungen zu verhindern
$pw =~ m/(.*)$/;
$pw = $1;
# Aktionen ausfuehren
my $data2 = '';
if ($action eq '1')
{ $data2 = `export TERM=dumb; /usr/local/pd-admin2/bin/mysqlcheck -ec -A -uroot -p$pw`; }
elsif ($action eq '2')
{ $data2 = `export TERM=dumb; /usr/local/pd-admin2/bin/mysqlcheck -eo -A -uroot -p$pw`; }
####
#### Html-Template parsen und die eigentlichen Daten ausgeben
####
my $html_data = `cat /opt/pdadmin/www/addons/addons.mysql.main.html`;
my $Color = 'blue';
if (defined $color_scheme and length $color_scheme)
{$Color = $color_scheme;}
elsif (defined $color_scheme_administrator and length $color_scheme_administrator )
{$Color = $color_scheme_administrator};
$html_data =~ s/\$\$form_data1/$data1/g;
$html_data =~ s/\$\$form_data2/$data2/g;
$html_data =~ s/\$\$form_link/$ENV{REQUEST_URI}/g;
$html_data =~ s/\$\$color_scheme/$Color/g;
print header;
print $html_data;
exit
Alles anzeigen
-rw-r--r-- 1 root root /opt/pdadmin/www/addons/addons.mysql.main.html
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>pd-admin v3.x - Mainframe</title>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<link rel="stylesheet" href="/administrator/css/$$color_scheme/styles.css" type="text/css">
</head>
<body>
<table width="90%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td align="right">
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="22"><img src="/administrator/images/$$color_scheme/left_top.gif" alt="" width="22" height="27"></td>
<td width="22" background="/administrator/images/$$color_scheme/middle_top.gif"> <img src="/administrator/images/$$color_scheme/pfeil.gif" alt="" width="20" height="22"></td>
<td background="/administrator/images/$$color_scheme/middle_top.gif" align="left" valign="middle" class="header">AddOn: mySql Check</td>
<td align="right" width="22"><img src="/administrator/images/$$color_scheme/right_top.gif" alt="" width="22" height="27"></td>
</tr>
</table>
</td>
</tr>
</table>
<table width="90%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="25" height="25"><img src="/administrator/images/$$color_scheme/top_left.gif" alt="" width="25" height="25"></td>
<td background="/administrator/images/$$color_scheme/top_middle.gif" align="center"><img src="/administrator/images/$$color_scheme/top_middle.gif" alt="" width="25" height="25"></td>
<td width="25" height="25" align="right"><img src="/administrator/images/$$color_scheme/top_right.gif" alt="" width="25" height="25"></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" width="25"> </td>
<td bgcolor="#FFFFFF" align="center" valign="top">
<table border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td bgcolor="#FFFFFF" align="center">
<!-- Formular-Daten -->
<center>mySql Version: <b>$$form_data1</b></center><br>
<br>
<form action="$$form_link" method="post" target="">
<input type="hidden" name="action" value="1">
<input style="width:200px;" type="submit" value="Check mySql Database" >
</form>
<form action="$$form_link" method="post" target="">
<input type="hidden" name="action" value="2">
<input style="width:200px;" type="submit" value="Optimize mySql Database">
</form>
<center><pre>$$form_data2</pre></center><br>
<!-- Formular-Daten -->
</td>
</tr>
</table>
</td>
<td bgcolor="#FFFFFF" width="25" rowspan="2"> </td>
</tr>
</table>
</body>
</html>
Alles anzeigen
Und wie immer nun noch in der /opt/pdadmin/etc/administrator_menu_individual.conf (-rw-r--r-- root root)
Code
$links{610}{sublinks}{140}{name}{de} = 'mySql Check';
$links{610}{sublinks}{140}{name}{en} = 'mySql Check';
$links{610}{sublinks}{140}{url} = 'addon_mysql.cgi';
$links{610}{sublinks}{140}{target} = 'mainFrame';
Viel Spass!