Betreff: dboptimize und dbbackup von silver74 am 07.09.2004 20:45:46
Hallo,
ich bräuchte einmal euer Fachwissen,denn ich habe zwei tolle scripts gefunden.Der eine optimiert mir meine db und der andere schickt sie mir per mail oder auf den ftp.Ich benutze die beiden schon als cronjob für meine Hompage.Nun frage ich mich wie kann ich die beiden zusammen verbinden in ein eiziges script. Ausserdem möchte ich gerne noch einen report in die e-mail einfügen.So in etwa wie bei php-stats,nur ich mochte halt eine statistik über meine db. Hier ein Beispiel: Zitat: Hallo Webmaster:
Die folgenden tabellen wurden erfogreich optimiert:
xoops_addresses_broken,xoops_addresses_broken,....
Die folgenden Tabellen wurden erfolgreich/erfolglos gesichert: xoops_addresses_broken,xoops_addresses_broken,....
Name der Datenbank: XXXX.sql Grösse der Datenbank:XXXX ko
und nun hier die beiden scripte:
Db-backup: Zitat:<? $dbhost = "XXXXXX"; $dbuser = "XXXXXX"; $dbpass = "XXXXXX"; $dbname = "XXXXXX"; $use_gzip = "no"; $remove_file = "yes"; $use_email = "yes"; $send_to = "mon mail"; $send_from = "mon mail"; $subject = "Backup de la Base ($dbname) - " . date("j F Y"); $use_ftp = "no"; $ftp_server = ""; $ftp_user_name = ""; $ftp_user_pass = ""; $ftp_path = "/"; $echo_status = "yes";
$db = mysql_connect("$dbhost","$dbuser","$dbpass"); mysql_select_db("$dbname",$db);
$path = make_dir();
if ($echo_status == 'yes') { print "Dumpfile will be written to $path<br>"; }
$result = mysql_query("show tables from $dbname"); while (list($table) = mysql_fetch_row($result)) { $newfile .= get_def($table); $newfile .= "\n\n"; $newfile .= get_content($table); $newfile .= "\n\n"; $i++; if ($echo_status == "yes") { print "Dumped table $table<br>"; } }
$file_name = $dbname . "-" . date("Ymd-Hi") . ".sql"; $file_path = $path . $file_name;
if ($use_gzip == "yes") { $file_name .= ".gz"; $file_path .= ".gz"; $zp = gzopen($file_path, "wb9"); gzwrite($zp,$newfile); gzclose($zp);
if ($echo_status == 'yes') { print "<br>Gzip-file is created...<br>"; } } else { $fp = fopen($file_path, "w"); fwrite($fp, $newfile); fclose($fp);
if ($echo_status == 'yes') { print "<br>SQL-file is created...<br>"; } }
if ($use_email == 'yes') { $fileatt_type = filetype($file_path);
$headers = "From: $send_from";
// Read the file to be attached ('rb' = read binary) $fp = fopen($file_path,'rb'); $data = fread($fp,filesize($file_path)); fclose($fp);
// Generate a boundary string $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// Add the headers for a file attachment $headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";
// Add a multipart boundary above the plain message $message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n";
// Base64 encode the file data $data = chunk_split(base64_encode($data));
// Add file attachment to the message $message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$file_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$file_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" . $data . "\n\n" ."--{$mime_boundary}--\n";
// Send the message $ok = @mail($send_to, $subject, $message, $headers);
if ($echo_status == 'yes') { print "<br>Mail is sent...<br>"; } }
if ($use_ftp == 'yes') { if ($use_gzip == 'yes') { $mode = FTP_BINARY; } else { $mode = FTP_ASCII; } $ftp_id = ftp_connect($ftp_server); $login_result = ftp_login($ftp_id, $ftp_user_name, $ftp_user_pass); $upload = ftp_put($ftp_id, $ftp_path . $file_name, $file_path, $mode); ftp_close($ftp_id);
if ($echo_status == 'yes') { print "<br>Backup is uploaded to $ftp_user_name@$ftp_server...<br>"; } }
if ($remove_file == "yes") { unlink($file_name); if ($echo_status == 'yes') { print "<br>File is deleted...<br>"; } }
if ($echo_status == 'yes') { print "<br>I am done!<br>"; }
function make_dir() { $page = split("/", getenv('SCRIPT_NAME')); $n = count($page)-1; $page = $page[$n]; $page = split("\.", $page, 2); $extension = $page[1]; $page = $page[0]; $script = "$page.$extension"; $base_url = "http://".$_SERVER['SERVER_NAME']; $directory = $_SERVER['PHP_SELF']; $url_base = "$base_url$directory"; $url_base = ereg_replace("$script", '', "$_SERVER[PATH_TRANSLATED]");
$path = $url_base;
return $path; }
function get_def($table) { $def = ""; $def .= "DROP TABLE IF EXISTS $table;\n"; $def .= "CREATE TABLE $table (\n"; $result = mysql_query("SHOW FIELDS FROM $table") or die("Table $table not existing in database"); while($row = mysql_fetch_array($result)) { $def .= " $row[Field] $row[Type]"; if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'"; if ($row["Null"] != "YES") $def .= " NOT NULL"; if ($row[Extra] != "") $def .= " $row[Extra]"; $def .= ",\n"; } $def = ereg_replace(",\n$","", $def); $result = mysql_query("SHOW KEYS FROM $table"); while($row = mysql_fetch_array($result)) { $kname=$row[Key_name]; if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname"; if(!isset($index[$kname])) $index[$kname] = array(); $index[$kname][] = $row[Column_name]; } while(list($x, $columns) = @each($index)) { $def .= ",\n"; if($x == "PRIMARY") $def .= " PRIMARY KEY (" . implode($columns, ", ") . ")"; else if (substr($x,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")"; else $def .= " KEY $x (" . implode($columns, ", ") . ")"; } $def .= "\n);"; return (stripslashes($def)); }
function get_content($table) { $content=""; $result = mysql_query("SELECT * FROM $table"); while($row = mysql_fetch_row($result)) { $insert = "INSERT INTO $table VALUES ("; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $insert .= "NULL,"; else if($row[$j] != "") $insert .= "'".addslashes($row[$j])."',"; else $insert .= "'',"; } $insert = ereg_replace(",$","",$insert); $insert .= ");\n"; $content .= $insert; } return $content; }
?>
und hier dboptimize:
Zitat:<?php
$base='xxxxx'; $login='xxxxx'; $pwd='xxxxx'; $serveur='xxxxx';
//connexion à la base $db=mysql_connect($serveur, $login, $pwd); if(!$db){ print "erreur connection $db<br>"; exit; }
// on choisit la bonne base if(!mysql_select_db($base,$db)){ print "erreur ".mysql_error()."<br>"; mysql_close($db); exit; }
$tables = mysql_list_tables($base); echo 'BASE :'.$base.'<br>'; while (list($table_name) = mysql_fetch_array($tables)) { $sql = "OPTIMIZE TABLE $table_name"; mysql_query($sql) or exit(mysql_error()); echo $table_name.' : optimisée<br>'; }
mysql_close($db); ?>
|