Come si fa ?? ;) Devo salvare sia tabelle ke file ?? :)
Visualizzazione Stampabile
Come si fa ?? ;) Devo salvare sia tabelle ke file ?? :)
Se i file sono sul disco, devi fare anche il backup dei file.
Io mi sono scritto un programma che fa il download in automatico, perché mi sono stufato con i vari client FTP, e con i vari siti, ciascuno funziona a modo suo ...
Adesso ho fatto backup del database del forum di prova, ho cancellato le tabelle e sto ripristinando il database, vediamo se funziona ... :) Per i file .php e altri basta ke li salvo solo una volta ?? cioè se li salvo e vengono aggiunte altre discussioni, basta fare solo il backup del database da questa volta in poi ??
PS: altervista il .sql nn lo importa, fancul .... :mad: :confused:
Errore in altervista
Fatal error: Maximum execution time of 15 seconds exceeded in /var/www/html/phpmyadmin/libraries/read_dump.lib.php on line 91
ASD :D
No un pò a pezzi lo importa ;):D
Ok problema risolto ;) Ho solo il dubbio dei file dell' FTP se bisogna salvarli sad ogni backup o basta una volta :D
Non c'è bisogno di fare il backup dei file php perché sono identici a quelli che hai già (download dalla Jelly); tranne forse per gli hack/gif/jpg.Citazione:
Originariamente Scritto da DooM3
Invece sono gli allegati e gli avatar personali che devi "backuppare".
Ho messo il backup, però nn mi ha rimesso tutto infatti ci sono errori di database nel forum... stranoCitazione:
Originariamente Scritto da y2ksw
Riprova, a volte non funziona.
Ho rimesso il backup, adesso va bene :);)
Mi consigli di fare
Importazione & Manutenzione - Ripara/ottimizza tabelle ?? :);)
Un'altro dubbio:
se io installo il forum con prefisso vbve_ , mi ritrovo il portale (vbadvanced) e gli altri hack (log hack, links directory e shoutbox 1.03) con prefisso vbve_ o senza prefisso ?? ;)
Non c'è bisogno della riparazione, perché il ripristino rimette già tutto apposto.
Non saprei. Immagino con il prefisso :confused:Citazione:
Originariamente Scritto da DooM3
Speriamo, anke perkè nel database ci sono tabelle di altri forum ... comunque per sicurezza faccio il backup con solo vbve_, e un altro con tutte le tabelle esistenti ;)
35 MB il backup ma'zza :confused: :rolleyes: :eek:
35 MB non è niente. Quando avrai 150 o più, zippati, allora sì che si tratta di un backup consistente ... un oretta o due di download su adsl ... :)
Strano allora ke tanti hosting danno solo 50 MB di PHPmyAdmin ... :|
Ma durante il download del backup devo tenere il forum kiuso ??
e bhe certamente altrimenti poi ti trovi con un backup inconsistente ;)Citazione:
Originariamente Scritto da DooM3
SEMPRE chiudere il forum.
una cosa... non ho mai fatto il backup direttamente da vB... ho sempre usato phpmyadmin...
il bck di vB va bene?
dico questo perchè quando avevo phpBB il backup dalla board non era una bella cosa :D
Ho provato a farlo col forum di prova, ho cancellato le tabelle e messo il backup da phpadmin, tutto OK :) Moh ho provato a fare il backup del forum, e me la fatto ;)Citazione:
Originariamente Scritto da mossss
Ma se mentre faccio il backup qualcuno posta, nn si rovina sia il backup ke il database ?? :confused: :(
Sì il forum durante il backup lo kiuso, però gli admin possono lo stesso entrare, nn sarebbe buona cosa limitare l'accesso anke a loro ?? :confused: :rolleyes:
per come è strutturato vB gli admin hanno accesso anche a forum bloccato, come dicevo nell'altro topic contatta gli altri admin avvertendoli ;)
infine, mentre fai il backup su uno posta "rovineresti" solo il bck il db assolutamente no ;)
Ah meno male :D;)Citazione:
Originariamente Scritto da mossss
una funzione che c'è sempre stata ma ho 'scoperto' solo ora...
è ottimale per me che ho una flat ma lenta e non posso tenere bloccato il forum per ore.
in ACP => Importa & Manutenzione => Backup DB selezionate le tabelle che volete backuppare e poi Backup database in un file sul server
è una cosa interessantissima che mi ha permesso di fare l'intero backup (400MB) in soli 5 min
e poi me lo scarico tranquillamente quando voglio dal server :D
In vb.org c'è un hack che fa il backup in automatico e decidi tu il giorno e l'ora ;)
jancarlo
Al posto del hack è meglio creare un cron (script php) e chiamarlo da vbulletin. Oppure, meglio, chiamare uno script in asincrono dal phpinclude_end:
Naturale che lo script chiamato deve essere privo di errori, e non deve andare in loop per nessun motivo!Codice PHP:
session_start();
if(!$_SESSION['cronjob_done'])
{
ob_start();
$fs = fsockopen('www.sito.com', 80, $errno, $errstr, 5);
if($fs)
{
fwrite($fs, "GET /cron/cronjobs.php HTTP/1.0\r\n"
. "Host: www.sito.com\r\n\r\n");
}
ob_end_clean();
$_SESSION['cronjob_done'] = TRUE;
}
Giovanni potresti passare tutto il necessario per fare ciò che dici? Sarebbe molto utile...
grazie :)
Codice PHP:
<?php
/*******************************************************************************
* (C) Copyright Y2K Software s.a.s. 2005 *
* All Rights Reserved *
********************************************************************************
* Realtime Cronjobs *
* Require to run without error reporting nor locks or messages (blank pages). *
* All scripts must reside in the same folder and require to set $cron_ok to *
* TRUE if successful. *
* The database is already open so there is no need to repeat opening. *
* Also cron scripts should not open a session or use common functions or *
* variables. *
* Cronjobs should test if $cron_jobs = TRUE, else do nothing. *
*******************************************************************************/
error_reporting(0);
ignore_user_abort(TRUE); // continue script if session quits
$DEBUG = FALSE;
//$DEBUG = TRUE;
$cron_jobs = TRUE;
$time_limit = 10; // in seconds, 0 = no limit
// Functions -------------------------------------------------------------------
function cron_db_open()
{
$db = 0;
$db_host = 'localhost';
$db_name = 'database_name';
$db_username = 'username';
$db_password = 'password';
$db_port = 3306;
$host = $db_host;
if($db_port && $db_port != 3306)
{
$host = "$db_host:$db_port";
}
if(mysql_connect($host, $db_username, $db_password))
{
return mysql_select_db($db_name);
}
}
function cron_iif($var, $true, $false = '')
{
return $var ? $true : $false;
}
function cron_datadump($table)
{
$result .= "# Dump of `$table`\r\n"
. "# Dump DATE: " . date("Y-m-d H:i:s") . "\r\n"
. "\r\n"
;
$rss = mysql_query("SELECT * FROM $table");
$num_fields = @mysql_num_fields($rss);
while($rs = mysql_fetch_row($rss))
{
$result .= "INSERT INTO `$table` VALUES (";
for($j = 0; $j < $num_fields; $j++)
{
$a = addslashes($rs[$j]);
$a = ereg_replace("\r", "\\r", $a);
$a = ereg_replace("\n", "\\n", $a);
$result .= "'$a'";
$result .= $j < $num_fields - 1 ? ', ' : '';
}
$result .= ");\r\n";
}
return $result . "\r\n\r\n";
}
// BEGIN OF SCRIPT =============================================================
// Open database ---------------------------------------------------------------
while(cron_db_open()) // pseudo-loop
{
// Check if cronjob is running ---------------------------------------------
$SQL = "UPDATE service "
. "SET VALUE='1' "
. "WHERE PARAMETER='INCRON' "
. "AND VALUE='0' "
. "LIMIT 1"
;
if(!mysql_query($SQL)) break;
if(!mysql_affected_rows()) break;
// Open cronjob table ------------------------------------------------------
$SQL = "SELECT ID, SCRIPT "
. "FROM cron "
. "WHERE ENABLED=1 "
. "AND DATE<=NOW() "
. "AND SECS>0 "
. "ORDER BY EXECORDER"
;
if(!$rss_cron = mysql_query($SQL)) break;
// Cycle cronjobs ------------------------------------------------------
while($rs_cron = mysql_fetch_row($rss_cron))
{
// Set max execution time ------------------------------------------
set_time_limit($time_limit);
$cron_ok = FALSE;
$lastops = 0;
if($DEBUG)
{
echo $rs_cron[1];
}
// Check for cronjob file ------------------------------------------
if(file_exists($rs_cron[1]))
{
require_once($rs_cron[1]);
if($cron_ok)
{
// Update null dates ---------------------------------------
$SQL = "UPDATE cron "
. "SET DATE=CURDATE(), "
. "LASTOPS = $lastops "
. "WHERE ID=$rs_cron[0] "
. "AND DATE='0000-00-00 00:00:00' "
. "LIMIT 1"
;
if(mysql_query($SQL))
{
// Update cycle until DATE>NOW() ---------------------------
$SQL = "UPDATE cron "
. "SET DATE=DATE_ADD(DATE, INTERVAL SECS SECOND), "
. "LASTOPS = $lastops "
. "WHERE ID=$rs_cron[0] "
. "AND DATE<=NOW() "
. "LIMIT 1"
;
// Repeat until updated ------------------------------------
do
{
mysql_query($SQL);
} while(mysql_affected_rows() > 0);
}
}
}
if($DEBUG)
{
echo $cron_ok ? ' <b>OK</b><BR>' : " <b>Error</b><BR>";
}
}
// Enable cronjobs again ---------------------------------------------------
$SQL = "UPDATE service "
. "SET VALUE='0' "
. "WHERE PARAMETER='INCRON' "
. "LIMIT 1"
;
mysql_query($SQL);
break;
}
unset($cron_jobs);
// END OF SCRIPT ===============================================================
?>
Nota: Il mailer non voglio mettere qui, quindi inventatevi qualcosa :) , o pagate :DCodice PHP:
<?php
/*******************************************************************************
* (C) Copyright Y2K Software s.a.s. 2005 *
* All Rights Reserved *
********************************************************************************
* Realtime Cronjob: Database backup for vb3_* tables (forum) *
*******************************************************************************/
// BEGIN OF SCRIPT =============================================================
while($cron_jobs) // pseudo-loop
{
// Backup ------------------------------------------------------------------
$vbfiledata = '';
if(!$rss = mysql_list_tables('database_name')) break;
while($rs = mysql_fetch_row($rss))
{
if(substr($rs[0], 0, 4) == 'vb3_')
{
$vbfiledata .= cron_datadump($rs[0]);
$lastops++;
}
}
mysql_free_result($rss);
/*
$message = "This is a backup created by a script on your site.\r\n"
. "The location of the script is " . __FILE__ . ".\r\n"
;
if($vbfiledata)
{
$filename = date("Y-m-d_H-i-s") . "_vb3_database_name.sql.gz";
$vbfiledata = gzencode($vbfiledata, 9);
$mail = new xmail();
$mail->from = $from_email;
$mail->to = 'admin@domain.com';
$mail->subject = "Forums database backup";
$mail->xpriority = 1;
$mail->body = $message;
$mail->add_attachment($vbfiledata, $filename, 'application/x-zip-compressed', 'base64');
$vbfiledata = '';
$mail->send();
}
*/
$cron_ok = TRUE;
break;
}
// END OF SCRIPT ===============================================================
?>
Codice PHP:
# --------------------------------------------------------
#
# Struttura della tabella `cron`
#
DROP TABLE IF EXISTS `cron`;
CREATE TABLE `cron` (
`ID` int(11) NOT NULL auto_increment,
`ENABLED` tinyint(1) NOT NULL default '0',
`DATE` datetime NOT NULL default '0000-00-00 00:00:00',
`SECS` int(11) NOT NULL default '3600',
`DESCRIPTION` varchar(255) NOT NULL default '',
`SCRIPT` varchar(255) NOT NULL default '',
`EXECORDER` int(11) NOT NULL default '0',
`LASTOPS` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`)
) TYPE=MyISAM;
Eccovi il plugin (anziché hack) al vbulletin, e/o altre applicazioni php. Il tutto funziona alla meraviglia, se il safe-mode è OFF. Se invece è attivo, il timeout viene ignorato, e quindi bisogna accertarsi che il backup esegue a un'ora che è meno battuta, ma che vi sia comunque qualcuno.
Lo script esegue nel background, quindi l'utente non nota alcuna differenza.
Attenzione però: Se uno degli script va in loop, perché non vi sia alcun timeout + uno o più errori di programmazione, si consumano tutte le risorse del server, e l'unico modo per uscirci è riavviarlo. Per utenti che non hanno un proprio server, un loop del genere può significare una violazione del contratto all'ISP e si rischia un'ammonizione severa, se non addirittura la chiusura dell'account.
Il timeout va impostato a un valore in cui si è sicuri che il backup vada a buon termine. 10 secondi è buono per un database fino a 5 MB su un server veloce, dove lo zip prende il tempo maggiore.
Consiglio inoltre di usare il file system per gli allegati ed avatar, per ridurre le dimensioni.
Il mailer non è allegato qui, perché mi ci voleva troppo tempo per farlo, in modo che funzioni bene e (quasi) ovunque (php 4.3.10+), e di conseguenza è soltanto in vendita (ca. 50 euretti fatturabili). L'idea ho copiata, ma il codice è tutto mio, perché, come sappiamo tutti, gli esempi freeware non funzionano praticamente mai... ;)
grande giovanni...
ma che serve sto mailer?
il mio db è su aruba e pesa circa 220MB, a quanti secondi lo dovrei impostare?
Il mailer serve per inviare il backup all'amministratore. Per database più grandi bisogna dividere il file in unita logiche, ad esempio singole tabelle, oppure ottimizzare le query. Oppure salvare in una tabella di appoggio quali record sono vecchi, tipo un contatore dei top x record che si sono inviati l'ultima volta.
Le possibilità sono molti, per cui mi sono limitato alla descrizione di un sistema che funziona, non tanto a come poterlo ottimizzare :p
aaaaa :D
ho capito... non fa al mio casoallora visto che ho il 56k e non lo scaricherei mai da casa
preferirei quindi che me lo salvi nel mio spazio FTP
adessomi sto facendo il bck da phpmyadmin
Dovrò affrontare prossimamente il salvataggio su file, e quando fatto allego il codice qui. Ma in fondo credo che al posto del mailer potresti raccogliere i dati e salvarli via via che arrivano direttamente tramite FTP a destinazione. Sarebbe una soluzione anche per via della memoria, che non avrà disponibile 220 MB, immagino. E' comunque parecchio pesante e non credo che la connessione FTP abbia una velocità elevata su Aruba ...
Ragazzi, io ho salvato tutto il database con l'opzione del VB dal CPA, ed ora ho un file naturlamente .sql
Ora vorrei sapere come importarlo di nuovo, ovvero ora che mi trovo in locale vorrei sapere come importare sempre in locale, sia con phpmyadmin, sia direttamente dal CPA di VB 3.5.0 questo file per rispristinare il tutto.
Grazie