Datei in das YaBB-SE Verzeichnis legen, im YaBBSE-Verzeichnis ein Verzeichnis "dumps" anlegen, CHMOD 777 auf das Verzeichnis... dann das Script aufrufen...
Das Besondere an dem Script ist, dass es automatisch alle Tabellen in eine Datei schreibt und sich für jede Tabelle neu aufruft... ein Timeout wird so unwahrscheinlicher.... also man ruft das Script auf, es exportiert die erste Tabelle, dann zeigt es kurz an, welche Tabelle exportiert wurde und läd sich per HTML-Refresh neu und exportiert die nächste Tabelle... das wiederholt sich bis alle Tabellen geschrieben wurden...
<?php // (C) 2004 by Christian Land / tagdocs.com $GLOBALS["showcolumns"] = true; // true = complete insert statements (with field-names) $GLOBALS["droptables"] = true; // true = adds "DROP TABLE IF EXISTS ..." before CREATE-TABLE $url = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]; // function getTableContent($db_name, $tableName) { $crlf = "\r\n"; $result = mysql_db_query($db_name, "SELECT * FROM $tableName") or die(mysql_error()); $num_entrys = mysql_num_rows($result); $i = 0; for ($i = 0; $i < $num_entrys; $i++) { while($row = mysql_fetch_row($result)) { $table_list = "("; for($j=0; $j<mysql_num_fields($result);$j++) $table_list .= mysql_field_name($result,$j).", "; $table_list = substr($table_list,0,-2); $table_list .= ")"; if($GLOBALS["showcolumns"]) $schema_insert = "INSERT INTO $tableName $table_list VALUES ("; else $schema_insert = "INSERT INTO $tableName VALUES ("; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= " NULL,"; elseif($row[$j] != "") { $schema_insert .= " '" . mysql_escape_string($row[$j]) . "',"; } else $schema_insert .= " '',"; } $schema_insert = ereg_replace(",$", "", $schema_insert); $schema_insert .= ")"; $data .= $schema_insert.";".$crlf; } } return ($data); } // connect to database require_once('Settings.php'); $dbcon = mysql_connect($db_server, $db_user, $db_passwd) or die(mysql_error()); mysql_select_db($db_name) or die(mysql_error()); // ok, lets get a list of all tables $sqlquery = 'SHOW TABLES FROM '.$db_name.' LIKE "'.$db_prefix.'%"'; $request = mysql_query($sqlquery) or die(mysql_error()); $tables = array(); while ($data = mysql_fetch_row($request)) $tables[] = $data[0]; asort($tables); // now we've got an array with all tables - always sorted the same way... $dump_table = (int)$_GET['tabno']; // OK, get the create-table statement $filename = './dumps/dump_'.date('Ymd',time()).'.sql'; $sqlquery = 'SHOW CREATE TABLE '.$tables[$dump_table]; $request = mysql_query($sqlquery) or die(mysql_error()); $data = mysql_fetch_row($request); $dump = array(); if($GLOBALS["droptables"]) $dump[] = 'DROP TABLE IF EXISTS '.$tables[$dump_table].";\n"; $dump[] = trim($data[1]).';'."\n"; // get data... $dump[] = getTableContent($db_name, $tables[$dump_table])."\n"; // write SQL-File if ($dump_table == 0) @unlink($filename); if (file_exists($filename)) $fhandle = fopen($filename,'a'); else $fhandle = fopen($filename,'w'); fwrite($fhandle, implode("\n",$dump)); fclose($fhandle); if (isset($tables[(int)($dump_table+1)])) $dummy = '<html><head><meta http-equiv="refresh" content="2; URL='.$url.'?tabno='.(int)($dump_table+1).'"></head><body>'.$tables[$dump_table].' exported</body></html>'; else $dummy = 'Done...'; echo $dummy;?>
ACHTUNG!!! Wenn Euer Export gelaufen ist müsst ihr
DRINGEND das entstandene SQL-File vom Server löschen (nachdem ihr es runtergeladen habt

) !!! Ansonsten kann jeder den Dump runterladen und hat so alle IMs, Userdaten, etc. !!!!!!!
Sollte das Script nur die erste Tabelle sauber exportieren und danach auf eine falsche URL gehen, dann müsst ihr am Anfang die Zeile
$url = 'http://'.$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
so ändern, dass dort Eure URL steht... also z.B.
$url = 'http://www.blabla.bla/yse/dump.php';
...
Achja... es wäre auch nicht schlecht, das Script nach dem Backup wieder zu löschen

So rein vom Sicherheitsstandpunkt her....
(Das Problem des fehlenden Webspaces löst es aber leider auch nicht...)