2010-08-15 13 views
10

ho il backup di un database MySQL per diversi anni con il comando: mysqldump myDatabaseName -u root > myBackupFile.sqlCome ripristinare in modo affidabile MySQL blob

I backup sono apparsi funzionare bene ...

Ho poi voluto ristabilire un dei backup a un diverso database denominato così ho fatto: mysql myNewDatabaseName -u root < myBackupFile.sql

ho avuto alcuni errori relative alla dimensione del file di log così ho smesso di Mysql e rimosso i file di log e impostare i seguenti parametri nel file my.ini e mysql riavviato.

innodb_log_file_size=64M

innodb_log_buffer_size=8M

Il ripristino ora completa senza gli errori, ma uno dei tre tavoli che contiene blob non è mai ripristinata.

mio max-allowed-packet è impostato su 32M

La dimensione backup del database è di circa 2.2 GB la maggior parte di quelle dimensioni sia nella tabella che non ripristinare. Se eseguo un mysqldump sul database ripristinato, la dimensione è 185 MB.

Ora ho provato a fare un mysqldump con l'opzione --hex-blob ma non ho ancora provato a ripristinare quel file (3,9 GB).

Ho davvero bisogno di un modo a prova di bomba per il backup e il ripristino, poiché i miei backup esistenti sembrano inutili. Sono particolarmente preoccupato del fatto che "fallisce silenziosamente" senza voci di registro degli errori per quanto posso vedere.

l'ambiente è server Windows 2003 SP2

Qualsiasi aiuto apprezzato!

George

+0

I BLOB sono presenti nel file di dettagli?Forse non sono mai stati sottoposti a backup e il processo di ripristino ha funzionato perfettamente con i dati effettivamente disponibili. Il max_packet influenza i dati in entrambe le direzioni. Se si scarica con un limite troppo piccolo, i BLOB potrebbero essere stati eliminati o troncati. –

risposta

4

sono riuscito a eseguire il backup e il ripristino dei blob utilizzando il seguente mysqldump comando:

mysqldump --opt --skip-extended-insert --max_allowed_packet=128M -u root myDB > filename 

Non sono sicuro se è specificando max_allowed_packet sulla riga di comando o il skip-extended-insert che ha fatto il trucco.

Supponevo che il mio max_allowed_packet di 32M fosse in uso, ma penso che nel file di configurazione mysql sia nella sezione [mysqld] e quindi probabilmente non si applica al dump.

Ancora non capisco perché non ho ricevuto errori né sul dump né sul ripristino.

+0

mysqldump ignora max_allowed_packet. Leggi questo bug report per cercare di capire se è di progettazione o meno: http://bugs.mysql.com/bug.php?id=9753 – Leopd

2

mysqldump --skip-extended-insert funziona ma può ridurre le prestazioni di 100x al ripristino, rendendolo non una scelta praticabile.

Quando si esegue il backup, max_allowed_packet è ignorato da mysqldump (da design?) Il complemento reale è net_buffer_length. Assicurati che il tuo max_allowed_packet sia più grande del tuo net_buffer_length e dovrebbe funzionare. Come in:

mysqldump -u root --net_buffer_length=100k oldDB > backup.sql 
mysql -u root --max_allowed_packet=10M newDB < backup.sql 
Problemi correlati