Lo troverai scioccante, ma hai solo bisogno di una delle opzioni principali: --opt
Che cos'è --opt ?
Questa opzione, abilitata di default, è una scorciatoia per la combinazione di --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick - set-charset . Fornisce un'operazione di dump veloce e produce un file di dump che può essere ricaricato rapidamente in un server MySQL.
Poiché l' opzione - -opt è abilitata per impostazione predefinita , si specifica solo il contrario, --skip-opt per disattivare diverse impostazioni predefinite. Vedi la discussione sui gruppi di opzioni mysqldump per informazioni su come abilitare o disabilitare selettivamente un sottoinsieme delle opzioni interessate da --opt.
Poiché --opt è già abilitato, non è necessario specificare --opt . Nonostante ciò, potresti aver bisogno di alcune opzioni necessarie che non sono incluse.
Esegui questa query sul tuo database
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
Se hai tutte le tabelle di InnoDB, devi specificare --single-transazione . Ciò disattiverà automaticamente --lock-tables e ti consentirà di scaricare tutte le tabelle nello stesso punto temporale e di consentire la scrittura di nuove scritture contemporaneamente.
Se hai una o più tabelle MyISAM, devi specificare --lock-all-tables . Questo disattiverà automaticamente --lock-tables , disattiverà --single-transazione , bloccherà tutte le tabelle su tutti i database, quindi creerà il dump. Le scritture su tabelle InnoDB possono ancora verificarsi, ma verranno semplicemente messe in coda fino al rilascio dei blocchi. Qualsiasi connessione DB che tenta di scrivere su qualsiasi tabella MyISAM verrà effettivamente sospesa fino al rilascio di tutti i blocchi.
Esegui questa query: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Se Number_Of_Stored_Procedures
è maggiore di zero, utilizzare --routines .
Esegui questa query: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Se Number_Of_Triggers
è maggiore di zero, utilizzare --triggers .
CAVEAT : Per favore non usare - ordina per primario per scaricare tutti i database perché può potenzialmente rendere gli indici BTREE piuttosto sbilenco al ricaricamento. --order-by-primary dovrebbe essere usato solo quando si esegue il dump di una singola tabella che si conosce ha una chiave primaria intera e avrà molte scansioni di intervallo dall'applicazione.
Se hai bisogno di più tipi creativi di backup mysqldump, vedi il mio vecchio post Come posso ottimizzare un mysqldump di un database di grandi dimensioni? .
Si prega di leggere tutte le opzioni per mysqldump .
AGGIORNAMENTO 2014-12-29 09:44 EST
Ho aggiornato il mio comando mysqldump (vedere la mia modifica). Ho un'ultima domanda però. Pensi che varrebbe la pena usare anche tutti i seguenti argomenti? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Guardando il tuo commento e la tua ultima modifica, diamo un'occhiata a ciascuna di queste opzioni e vediamo se ne hai bisogno
- --opt : ho già detto che non è necessario specificarlo perché è abilitato per impostazione predefinita.
- --delayed-insert : sto decisamente lontano da questo con un database tutto InnoDB. In effetti, sto decisamente lontano da questo PERIODO !!! . Poiché 1) è possibile che INSERT DELAYED possa perdere dati, 2) viene convertito in INSERT per gli slave di replica MySQL, 3) esiste una segnalazione di bug aperta sull'utilizzo con i trigger di nuovo in MySQL 5.6 e non è considerato un bug , 4 ) è deprecato in MySQL 5.6 e 5) Morgan Tocker (noto MySQL Guru) ha previsto la sua deprecazione nel 2012 , dovresti dimenticare che questa opzione è mai esistita. Non usarlo mai (infinito) !!!
- --complete-insert : utilizzerà
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
invece di INSERT INTO tblname VALUES ...
. Questo potrebbe gonfiare il mysqldump se ci sono molte colonne nella definizione della tabella e molte righe nella tabella. Non usarlo.
- --add-drop-table : poiché --opt lo abilita per te, non è necessario specificarlo.
- --add-drop-database : se rilasciate --add-drop-database , rende il
DROP TABLE IF EXISTS
(che è stato aggiunto da --add-drop-table ) più veloce. Non utilizzarlo semplicemente si DROP TABLE IF EXISTS
verifica per ogni tabella. Pertanto, l'utilizzo di --add-drop-database è una questione di scelta personale.
- --tz-utc : se si prevede di ripristinare i dati sullo stesso server da cui si esegue il backup, non è necessario --tz-utc . Se ripristini i dati in un altro centro dati in un fuso orario diverso e ...
- se si desidera mantenere lo stesso fuso orario da cui si esegue il backup, non è necessario --tz-utc .
- se si desidera che i dati utilizzino il fuso orario di un nuovo centro dati, è necessario --tz-utc .
- ESEMPIO: supponi di aver effettuato il backup di un database a New York. Questo è EST. Se hai un altro data center a Seattle, sarebbe PST. Se si desidera ripristinare il backup di New York a Seattle e si desidera che i timestamp nel database rappresentino ancora New York, non si desidera utilizzare --tz-utc .
- --default-character-set
Modifica la tua ultima modifica, questo è ciò di cui hai particolarmente bisogno
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Ancora una volta, dico per favore leggi tutte le opzioni per mysqldump .