Domanda

Ho un database MySQL di circa 1,7 GB. Io di solito copia di backup utilizzando mysqldump e questo richiede circa 2 minuti. Tuttavia, vorrei conoscere le risposte alle seguenti domande:

  1. Il blocco mysqldump leggere e / o scrivere le operazioni alla base di dati? Perché in uno scenario vivo, non vorrei che a bloccare agli utenti di utilizzare il database mentre viene eseguito il backup.

  2. L'ideale sarebbe per me solo il backup del database TUTTO una volta, per esempio, una settimana, ma nei giorni intermedi solo tavolo ha bisogno di essere sostenuta come gli altri non cambieranno. C'è un modo per raggiungere questo obiettivo?

  3. E 'mysqlhotcopy una migliore alternativa per questi scopi?

È stato utile?

Soluzione

  1. No, è possibile specificare le tabelle devono essere bloccati utilizzando --lock-tavoli, ma non sono di default
  2. Se non si specifica alcuna tabella allora l'intero DB viene eseguito il backup, oppure è possibile specificare un elenco di tabelle:

    mysqldump [opzioni] db_name [tabelle]

  3. Non utilizzato è dispiaciuto, però ho eseguito una serie di MySQL DB, un po 'più grandi alcuni più piccolo di 1,7 GB e lo uso mysqldump per tutti i miei backup.

Altri suggerimenti

mysqlhotcopy non funziona in alcuni casi in cui si perde il readlock, e non funziona con le tabelle InnoDB.

mysqldump è più utilizzato perché può eseguire il backup di tutti i tipi di tabelle.

Da documentazione di MySQL

mysqlhotcopy è uno script Perl che è stato originariamente scritto e contribuito da Tim Bunce. Esso utilizza LOCK TABLES, tabelle colore, e cp o SCP per fare un backup del database in fretta. E 'il modo più veloce per fare un backup del database o tabelle di singoli, ma può essere eseguito solo sulla stessa macchina in cui si trovano le directory del database. mysqlhotcopy funziona solo per il backup le tabelle MyISAM e archiviare. Funziona su Unix e NetWare

Il mysqldump client è un programma di backup originariamente scritto da Igor Romanenko. Può essere utilizzato per scaricare un database o un insieme di banche dati per il backup o il trasferimento a un altro server SQL (non necessariamente un server MySQL). La discarica contiene tipicamente istruzioni SQL per creare la tabella, popolarla, o entrambi. Tuttavia, mysqldump può anche essere usato per generare file in formato CSV, altro testo delimitato, o formato XML.

Ciao.

1) mysqldump solo isolati quando si chiede a (uno dei --lock-tavoli, --lock-all-tavoli, --single-transazione). ma se si desidera il backup per essere coerente allora mysqldump dovrebbe del blocco (utilizzando --single-transazione o --lock-all-tabelle) o si potrebbe ottenere uno snapshot di database incoerente. Nota:. --Single-operazione funziona solo per InnoDB

2) sicuri, basta enumerare le tabelle che si desidera eseguire il backup dopo il nome del database:

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ...

In alternativa è possibile escludere le tabelle non si vuole:

mysqldump ... --ignore-table=TABLE1 --ignore-table=TABLE2 .. DATABASE

Così si può fare un intero dump del database una volta alla settimana e il backup solo le tabelle che cambiano una volta al giorno.

3) mysqlhotcopy lavora inly su tabelle MyISAM e nella maggior parte delle applicazioni si sta meglio con InnoDB. Ci sono strumenti commerciali (abbastanza costoso) per hotbackup di tabelle InnoDB. Ultimamente v'è anche quello nuovo opensource per questo scopo - Xtrabackup

Inoltre, per automatizzare il processo è possibile utilizzare astrails-safe . Esso supporta il backup del database con mysqldump e filesystem con il catrame. + + Crittografia di upload a S3, + molte altre chicche. Non c'è supporto xtrabackup ancora, ma dovrebbe essere facile da aggiungere, se questo è quello che vi serve.

L'aggiunta di uno schiavo mysql per la configurazione permetterebbe di prendere i backup consistant senza bloccare il database di produzione.

L'aggiunta di uno schiavo dà anche un log binario di cambiamenti. Una discarica è uno snapshot del database al momento hai preso il dump. Il log binario contiene tutte le dichiarazioni che hanno modificato i dati con un timestamp.

Se si dispone di un guasto nel bel mezzo della giornata e il vostro unico l'esecuzione dei backup una volta al giorno, hai perso un mezzo valore di giorni di lavoro. Con i log binari e mysqldump, si potrebbe ripristinare dal giorno precedente e 'giocare' i log in avanti fino al punto di guasto.

http://dev.mysql.com/doc /refman/5.0/en/binary-log.html

Se il tuo MySQL in esecuzione su un server Linux con dischi LVM o un server Windows con VSS, si dovrebbe verificare zamanda . Ci vuole diff binari dei dati su disco, che è molto più veloce da leggere e il ripristino di una discarica di testo del database.

per MySQL e PHP provare questo Questo sarà anche rimuovere i file dopo n giorni

$dbhost = 'localhost';
$dbuser = 'xxxxx';
$dbpass = 'xxxxx';
$dbname = 'database1';  
$folder = 'backups/';  // Name of folder you want to place the file
$filename = $dbname . date("Y-m-d-H-i-s") . ".sql";
$remove_days = 7; // Number of days that the file will stay on the server



$command="mysqldump --host=$dbhost --user=$dbuser --password=$dbpass $dbname > $folder$filename";
system($command);

$files = (glob("$folder"."*.sql"));

    foreach($files as $file) {
        if(is_file($file)
        && time() - filemtime($file) >= $remove_days*24*60*60) { // 2 days =  2*24*60*60
            unlink($file);
            echo "$file removed \n";
        } else { echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "\n"; }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top