mysqldump
Upgrading from MySQL to MariaDB? Let us help you!
Contact UsContents
Il client mysqldump
è un programma di backup scritto originariamente da Igor
Romanenko. Serve a creare il dump di un database o di una collezione di databases allo scopo di effettuare un
backup o trasferire i dati ad un altro server SQL (non necessariamente un server MySQL). Il dump tipicamente contiene istruzioni SQL per creare le tabelle, popolarle, o entrambe le cose. Tuttavia, mysqldump
può anche generare dei file CSV, o in altri formati di testo delimitato, o in XML.
Se si desidera effettuare il backup su un server in cui tutte le tabelle sono di tipo MyISAM, si può in alternativa utilizzare mysqlhotcopy, perché può eseguire i backup e recuperare i dati più rapidamente.
Utilizzo
Ci sono tre modi per invocare mysqldump
:
shell> mysqldump [opzioni] nome_db [nome_tab ...] shell> mysqldump [opzioni] --databases nome_db ... shell> mysqldump [opzioni] --all-databases
Se non si specifica alcuna tabella dopo nome_db, o se si utilizzano le opzioni
--databases
o --all-databases
, verrà effettuato il dump di tutto il database.
mysqldump
per default non copia il database INFORMATION_SCHEMA. In tutte le versioni di MariaDB e in MySQL 5.1.38 e più recenti, mysqldump
effettua il dump di
INFORMATION_SCHEMA
solo se questo viene nominato esplicitamente da riga di comando, sebbene attualmente occorra usare anche l'opzione --skip-lock-tables
. Prima di MySQL 5.1.38, mysqldump
ignorava silenziosamente INFORMATION_SCHEMA
anche se veniva specificato nella riga di comando.
Per ottenere un elenco delle opzioni supportate dalla propria versione di mysqldump
, si esegua mysqldump --help
.
Gruppi di opzioni
Alcune opzioni di mysqldump
sono scorciatoie per gruppi di altre opzioni:
- Usare
--opt
è come specificare--add-drop-table
,--add-locks
,--create-options
,--disable-keys
,--extended-insert
,--lock-tables
,--quick
e--set-charset
. Tutte queste opzioni sono inoltre attive per default, perché--opt
è attiva per default. - Usare
--compact
è come specificare--skip-add-drop-table
,--skip-add-locks
,--skip-comments
,--skip-disable-keys
e--skip-set-charset
.
Per invertire l'effetto di un gruppo di opzioni, si usa la sua forma --skip-xxx
(--skip-opt
o --skip-compact
). E' anche possibile selezionare soltanto una parte dell'effetto di un gruppo di opzioni, facendo seguire ad esso le opzioni che abilitano o disabilitano specifiche funzionalità. Ecco alcuni esempi:
- Per selezionare l'effetto di
--opt
eccetto alcune funzionalità, si possono usare le opzioni--skip
corrispondenti. Per disabilitare le insert estese e il buffering della memoria, si può usare--opt
--skip-extended-insert
--skip-quick
. (In effetti--skip-extended-insert
--skip-quick
sarebbe sufficiente, dato che--opt
è attivo per default.) - Per invertire
--opt
per tutte le funzionalità eccetto la disabilitazione degli indici e i lock sulle tabelle, si può usare--skip-opt
--disable-keys
--lock-tables
.
Quando si abilita o disabilita selettivamente l'effetto di un gruppo di opzioni, l'ordine è importante perché i parametri vengono letti ed eseguiti dal primo all'ultimo. Per esempio,
--disable-keys
--lock-tables
--skip-opt
non avrebbe l'effetto desiderato; ha lo stesso effetto di --skip-opt
.
Riga per riga o buffering?
mysqldump
può estrarre e copiare il contenuto delle tabelle riga per riga,
oppure può estrarlo interamente dalla tabella e immetterlo in un buffer di memoria prima di copiarlo. Usare il buffering può essere un problema quando si copiano grandi tabelle. Per effettuare il dump riga per riga, si può usare l'opzione --quick
(o --opt
, che abilita --quick
). L'opzione --opt
(e quindi anche --quick
) è abilitata per default, perciò per abilitare il buffering, si usi
--skip-quick
.
mysqldump in MariaDB 5.3 e superiore
A partire da MariaDB 5.3, mysqldump
supporta i nuovi
miglioramenti a START TRANSACTION WITH CONSISTENT SNAPSHOT.
mysqldump e le vecchie versioni di MySQL
Se si utilizza una versione recente di mysqldump
per generare un
dump da caricare in un server MySQL molto vecchio, si dovrebbe evitare di usare le opzioni
--opt
e --extended-insert
. Si usi invece
--skip-opt
.
Nota: mysqldump
distribuito con MySQL 5.1.21 non può essere usato per creare un dump da un server MySQL 5.1.20 o più vecchio. Questo problema è stato eliminato in MySQL
5.1.22. (MySQL Bug #30123)
Opzioni
mysqldump
supporta le seguenti opzioni, che possono essere specificate dalla
riga di comando o nei file di configurazione nei gruppi [mysqldump]
e [client]
. Le opzioni predefinite vengono lette dai seguenti file, nell'ordine:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/etc/my.cnf
~/.my.cnf
mysqldump
supporta anche le opzioni per elaborare i file di configurazione.
Le seguenti opzioni possono essere indicate come primo argomento:
Opzione | Spiegazione |
---|---|
--print-defaults | Stampa la lista degli argomenti ed esce. |
--no-defaults | Non legge le opzioni predefinite dai file di configurazione. |
--defaults-file=# | Legge le opzioni solo dal file #. |
--defaults-extra-file=# | Legge questo file dopo aver letto quelli globali. |
--all | Deprecato. Si usi --create-options invece. |
-A, --all-databases | Copia tutti i database. E' come usare --databases con tutti i database selezionati. |
-Y, --all-tablespaces | Copia tutti i tablespace. |
-y, --no-tablespaces | Non copia le informazioni sui tablespace. |
--add-drop-database | Aggiunge DROP DATABASE prima di ogni create. |
--add-drop-table | Aggiunge DROP TABLE prima di ogni create. |
--add-locks | Aggiunge dei lock prima e dopo le istruzioni INSERT . |
--allow-keywords | Permette l'uso di parole chiave come nomi di colonne. |
--character-sets-dir=nome | Directory dei set di caratteri. |
-i, --comments | Scrive informazioni aggiuntive. Si disabilita con --skip-comments . |
--compatible=nome | Crea un dump compatibile con la modalità specificata. Per default nel dump le tabelle hanno un formato ottimizzato per MySQL. Le modalità ammesse sono: ansi , mysql323 , mysql40 , postgresql , oracle , mssql , db2 , maxdb , no_key_options , no_table_options e no_field_options . E' possibile indicare più modalità separate da una virgola.Questa opzione non garantisce la compatibilità con altri server. Abilita solo quelle modalità SQL che sono attualmente disponibili per effettuare un dump più compatibile. Per esempio, --compatible=oracle non trasforma i tipi di dato nei corrispondenti di Oracle, nè usa la sintassi dei commenti di Oracle.Nota: Richiede MySQL server versione 4.1.0 o più recente. Nelle versioni precedenti, questa opzione viene ignorata. |
--compact | Produce un output meno verboso (utile per il debug). Disabilita i commenti nella struttura e i costrutti dell'header e del footer. Abilita le opzioni --skip-add-drop-table , --skip-add-locks , --skip-comments , --skip-disable-keys e --skip-set-charset . |
-c, --complete-insert | Usa istruzioni INSERT complete che includono i nomi delle colonne. |
-C, --compress | Usa la compressione nel protocollo client/server. Funziona se sia il client sia il server supportano la compressione. |
-a, --create-options | Include tutte le opzioni di CREATE TABLE specifiche di MariaDB e MySQL. |
-B, --databases | Copia più database. Normalmente, mysqldump considera il primo nome indicato nella riga di comando come nome di database, e i seguenti come nomi di tabella. Con questa opzione, li considera tutti come nomi di database. Le istruzioni CREATE DATABASE e USE vengono incluse nell'output prima di ogni nuovo database. |
-#, --debug[=#] | Se si usa una versione di debug di MariaDB, scrive un log di debug. Una stringa debug_options tipica è: ´d:t:o,nome_file´. Il valore predefinito è: ´d:t:o,/tmp/mysqldump.trace´. Se non si usa una versione di debug, mysqldump termina l'esecuzione. |
--debug-check | Controlla l'utilizzo della memoria e dei file aperti ed esce. |
--debug-info | Stampa alcune informazioni di debug ed esce. |
--default-character-set=nome | Imposta il set di caratteri predefinito a nome. Se il nome non è specificato, mysqldump usa utf8 (latin1 per le versioni più vecchie).Prima di MySQL 5.1.38, questa opzione non aveva effetto sui file di dati prodotti utilizzando l'opzione --tab . Si veda la descrizione di quella opzione per ulteriori dettagli. |
--delayed-insert | Inserisce i record con INSERT DELAYED invece di INSERT . |
--delete-master-logs | Su un master, cancella i log binari inviando un'istruzione PURGE BINARY LOGS al server dopo aver terminato il dump. Questa opzione abilita automaticamente --master-data . |
-K, --disable-keys | Aggiunge all'output '/*!40000 ALTER TABLE nome_tab DISABLE KEYS */; e '/*!40000 ALTER TABLE nome_tab ENABLE KEYS */; . In questo modo il dump verrà caricato più velocemente perché gli indici verranno creati dopo l'inserimento dei dati. Questa opzione ha effetto solo sugli indici non univoci delle tabelle MyISAM. |
-E, --events | Include gli eventi dell'Event Scheduler nell'output dei relativi database. Questa opzione è stata aggiunta in in MySQL 5.1.8. |
-e, --extended-insert | Usa le INSERT di più righe, che includono più di una clausola VALUES . In questo modo si ha un file di dump più piccolo e si velocizza l'inserimento dei dati. |
--fields-terminated-by=nome | Nel file dei dati, i campi saranno separati con la stringa indicata. Va usato con l'opzione --tab e hanno lo stesso significato delle clausole FIELDS in LOAD DATA INFILE . |
--fields-enclosed-by=nome | Nel file dei dati, i campi saranno racchiusi nel carattere indicato. Va usato con --tab e hanno lo stesso significato delle clausole FIELDS in LOAD DATA INFILE . |
--fields-optionally-enclosed-by=name | Nel file dei dati, i campi potranno opzionalmente essere racchiusi nel carattere indicato. Va usato con --tab e hanno lo stesso significato delle clausole FIELDS in LOAD DATA INFILE . |
--fields-escaped-by=name | Nel file dei dati, il carattere indicato verrà usato come escape. Va usato con --tab e hanno lo stesso significato delle clausole FIELDS in LOAD DATA INFILE . |
--first-slave | Deprecato, ora si chiama --lock-all-tables . --first-slave è stato rimosso da MySQL 5.5. |
-F, --flush-logs | Svuota i file di log prima di cominciare il dump. Questa opzione richiede il privilegio RELOAD . Se la si usa in combinazione con --databases= o --all-databases , i log vengono svuotati dopo ogni dump di un singolo database. Fa eccezione quando si usa --lock-all-tables o --master-data : in questo caso i log saranno svuotati una sola volta, cioè nel momento in cui tutte le tabelle vengono bloccate. Se si desidera che il dump e lo svuotamento dei log accadano nello stesso istante, occorre usare --flush-logs insieme a --lock-all-tables o a --master-data . |
--flush-privileges | Invia un'istruzione FLUSH PRIVILEGES al server dopo il dump del database mysql. Questa opzione andrebbe usata ogni volta che si effettua il dump del database mysql o qualsiasi altro database che dipende da mysql. E' stata aggiunta in MySQL 5.1.12. |
-f, --force | Continua anche se si verifica un errore SQL durante il dump di una tabella. Si può usare questa opzione per far sì che mysqldump continui l'esecuzione se incontra una vista che non è più valida perché la sua definizione fa riferimento a una tabella che è stata eliminata. Senza --force , in questo caso, mysqldump termina con un messaggio di errore. Con --force , stampa il messaggio di errore ma scrive nel dump un commento SQL contenente la definizione della vista, poi continua l'esecuzione. |
-?, --help | Mostra un messaggio di help e termina. |
--hex-blob | Scrive le stringhe binarie (BINARY , VARBINARY , BLOB ) in formato esadecimale (per esempio, ´abc´ diventa 0x616263 ). Questa opzione agisce sui tipi BINARY , VARBINARY , i tipi BLOB e BIT . |
-h, --host=nome | Si connette al server MariaDB o MySQL sull'host specificato. Quello predefinito è localhost . |
--ignore-table=nome | Non effettua il dump della tabella specificata. Per specificare più di una tabella da ignorare, si può ripetere questa direttiva più volte. Ogni tabella deve essere indicata insieme al nome del database: --ignore-table=database.tabella . Può essere usata anche per ignorare le viste. |
--insert-ignore | Inserisce righe con INSERT IGNORE invece di INSERT . |
--lines-terminated-by=nome | Le righe nel file dei dati terminano con la stringa specificata. Va utilizzata con --tab e ha lo stesso significato della clausola LINES corrispondente in LOAD DATA INFILE . |
-x, --lock-all-tables | Blocca tutte le tabelle in tutti i database. Viene acquisito un lock in lettura globale per tutta la durata del dump. Questa opzione disattiva automaticamente --single-transaction e --lock-tables . |
-l, --lock-tables | Per ogni database, effettua un lock su tutte le tabelle prima di iniziare la copia. Le tabelle vengono bloccate con READ LOCAL per permettere le insert concorrenti sulle tabelle MyISAM. Per le tabelle transazionali come InnoDB, è molto meglio usare --single-transaction perché non ha bisogno di bloccare alcuna tabella.Siccome --lock-tables blocca le tabelle dei vari database separatamente, questa opzione non può garantire che i dump relativi ai vari database siano coerenti tra loro. Infatti, tabelle di database differenti possono essere copiate mentre assumono stati diversi. |
--log-error=nome | Scrive i warning e gli errori in fondo al file specificato. Per default è disattivato. Questa opzione è stata aggiunta in MySQL 5.1.18. |
--master-data[=#] | Fa sì che il nome del file del log binario e la posizione vengano aggiunti alla fine dell'output. Se è 1, la scrive come comando CHANGE MASTER ; se è 2, il comando viene inserito in un commento. Questa opzione attiva anche --lock-all-tables , a meno che --single-transaction sia specificata (nelle versioni precedenti a MariaDB 5.3 questo implica un lock globale in lettura per un breve periodo di tempo all'inizio del dump; si legga --single-transaction sotto). In tutti i casi, tutte le azioni sui log accadranno nel momento esatto del dump. Questa opzione disattiva automaticamente --lock-tables .Si può usare questa opzione per effettuare il dump di un master, per produrre un file di dump che può essere utilizzato per creare un altro server, che sia uno slave di quel master. Fa sì che l'output includa un'istruzione CHANGE MASTER TO che indica le coordinate del log binario (file e posizione) del master. Queste sono le coordinate dalle quali lo slave dovrebbe iniziare la replica dopo che si è caricato in esso il dump. Se l'opzione è impostata a 2, l'istruzione CHANGE MASTER TO viene scritta in un commento SQL, perciò è solo informativa; non ha effetto quando il dump viene caricato. Se l'opzione è 1, l'istruzione viene scritta senza commento, e viene eseguita quando il dump viene caricato. Se l'opzione non è specificata, il valore predefinito è 1. Questa opzione richiede il privilegio RELOAD e il log binario deve essere abilitato. L'opzione --master-data disattiva automaticamente --lock-tables . Inoltre attiva --lock-all-tables , a meno che --single-transaction sia specificata, nel qual caso viene acquisito un lock globale in lettura per un breve periodo di tempo all'inizio del dump (si veda la spiegazione di --single-transaction ). In ogni caso, tutte le azioni che coinvolgono i log avvengono nel momento esatto del dump.E' anche possibile preparare uno slave partendo dal dump di uno slave già esistente, che abbia lo stesso master. Per fare questo, si utilizzi la seguente procedura sullo slave già esistente: 1. Si arresti il thread SQL dello slave e si legga il suo stato corrente: mysql> STOP SLAVE SQL_THREAD; mysql> SHOW SLAVE STATUS; 2. Nell'output dell'istruzione SHOW SLAVE STATUS, le coordinate del log binario del server che ci interessa sono i valori dei campi Relay_Master_Log_File e Exec_Master_Log_Pos. Questi valori sono indicati più avanti come file_name e file_pos. 2. Si effettui il dump dello slave: shell> mysqldump --master-data=2 --all-databases > dumpfile 3. Si riavvii lo slave: mysql> START SLAVE; 4. Sul nuovo slave, si carichi il file di dump: shell> mysql < dumpfile 5. Sul nuovo slave, si impostino le coordinate di teplica identiche a quelle del master, indicate sopra: mysql> CHANGE MASTER TO MASTER_LOG_FILE = ´file_name´, MASTER_LOG_POS = file_pos;L'istruzione CHANGE MASTER TO potrebbe aver bisogno di altri parametri, come il MASTER_HOST che punta all'host dove si trova il master. Si aggiungano i parametri che sono necessari. |
--max_allowed_packet=# | La lunghezza massima dei pacchetti che si possono inviare o ricevere dal server. |
--net_buffer_length=# | Le dimensioni del buffer delle comunicazioni via TCP/IP e via socket. |
--no-autocommit | Racchiude le istruzioni INSERT di ogni tabella fra le istruzioni SET autocommit = 0 e COMMIT . |
-n, --no-create-db | Questa opzione sopprime l'istruzione CREATE DATABASE ... IF EXISTS che normalmente viene scritta per ogni database se viene specificato --all-databases o --databases . |
-t, --no-create-info | Non scrive le istruzioni CREATE TABLE che ricreano ogni dabella. |
-d, --no-data | Non scrive i record (cioé non effettua il dump dei dati). E' utile se si desiderano soltanto le istruzioni CREATE TABLE (per esempio, per ricreare una copia vuota delle tabella). |
-N, --no-set-names | Sopprime l'istruzione SET NAMES . Ha lo stesso effetto di --skip-set-charset . |
--opt | Questa opzione è una scorciatoia. E' come specificare --add-drop-table , --add-locks , --create-options , --quick , --extended-insert , --lock-tables , --set-charset e --disable-keys . E' abilitata per default e si disabilita con --skip-opt . Dovrebbe velocizzare il dump e produrre un file che può essere ricaricato più rapidamente su un server MariaDB.L'opzione --opt è abilitata per default. Si usi --skip-opt per disabilitarla. Si veda la discussione all'inizio di questa sezione per sapere come abilitare o disabilitare selettivamente le opzioni che sono influenzate da --opt . |
--order-by-primary | Ordina le righe di ogni tabella per chiave primaria, o per la prima chiave univoca, se esiste. E' utile quando si effettua il dump di tabelle MyISAM che devono essere ricaricate in tabelle InnoDB, ma rallenta considerevolmente il dump. |
-p, --password[=nome] | La password da usare per connettersi al server. Se si utilizza la forma breve (-p ), non è possibile inserire spazi tra l'opzione e la password. Se si omette la password dopo --password o -p sulla riga di comando, mysqldump chiederà di digitarla.Specificare la password dalla riga di comando potrebbe essere considerato rischioso. Per evitarlo, si può scriverla nei file delle opzioni. |
-W, --pipe | Su Windows, si connette al server utilizzando un named pipe. Questa opzione ha effetto solo se il server supporta le connessioni via named-pipe. |
-P, --port=# | Il numero di porta TCP/IP da usare per la connessione. |
--protocol=nome | Il protocollo da usare per connettersi al server (TCP, SOCKET, PIPE, MEMORY). E' utile quando gli altri parametri specificati, normalmente, fanno sì che venga scelto un protocollo diverso da quello desiderato. |
-q, --quick | Questa opzione è utile quando si esegue il dump di tabelle di grandi dimensioni. Forza mysqldump ad estrarre i record uno alla volta dal server, e inviare l'output direttamente allo stdout, invece di estrarre tutti i dati e inserirlo in un buffer di memoria prima di scriverlo. |
-Q, --quote-names | Virgoletta gli identificatori (come i nomi dei database, delle tabelle e delle colonne) con i caratteri backtick (` ). Se la modalità SQL ANSI_QUOTES è attiva, gli identificatori saranno racchiusi tra i caratteri (" ). Questa opzione è abilitata per default. Può essere disabilitata con --skip-quote-names , ma questa deve essere specificata dopo ogni opzione che, come <<fixed.>--compatible<</code>> , abilita --quote-names . |
--replace | Usa le istruzioni REPLACE INTO invece di INSERT INTO . Questa opzione è stata aggiunta in MySQL 5.1.3. |
-r, --result-file=nome | Invia l'output direttamente al file specificato. Questa opzione andrebbe usata su Windows per impedire che i caratteri "\n" vengano convertiti nella sequenza "\r\n" (carriage return/newline). Se il file esiste il suo contenuto viene sovrascritto, anche se avviene un errore durante la generazione del dump. |
-R, --routines | Include le Stored Routine (procedure e funzioni) nell'output del dump. Per usare questa opzione occorre disporre del privilegio SELECT sulla tabella mysql.proc . L'output generato contiene le istruzioni CREATE PROCEDURE e CREATE FUNCTION necessarie per ricreare le routine. Tuttavia, queste istruzioni non comprendono alcuni attributi come i timestamp della creazione e dell'ultima modifica. Questo significa che quando le routine verranno ricreate, questi timestamp corrisponderanno al momento della nuova creazione.Se si desidera che le routine conservino i loro timestamp originali, non bisogna utilizzare --routines , ma effettuare un dump della tabella mysql.proc e ricrearla direttamente, utilizzando un account di MariaDB che disponga dei privilegi necessari per accedere al database mysql.Questa opzione è stata aggiunta in MySQL 5.1.2. Prima di allora, le routine non venivano incluse nel dump. I valori DEFINER non venivano esportati prima di MySQL 5.1.8. Questo significa che con versioni precedenti alla 5.1.8, quando si ricreano le routine, il loro nuovo definer corrisponde all'utente corrente. Se si desidera che le routine vengano ricreate con il definer originale, si esegua un dump della tabella mysql.proc e la si ricarichi direttamente come descritto sopra. |
--set-charset | Aggiunge 'SET NAMES default_character_set' all'output. E' abilitata per default; si può sopprimerla con --skip-set-charset . |
-O, --set-variable=nome | Modifica il valore di una variabile. Si noti che questa opzione è deprecata: è ora possibile impostare le variabili direttamente con --variable-name=valore . |
--single-transaction | Questa opzione invia un'istruzione START TRANSACTION al server prima di effettuare il dump dei dati. E' utile solo con le tabelle transazionali come InnoDB, perché fa sì che si ottenga il dump del database nello stato in cui si trova quando viene eseguita BEGIN , senza bloccare le altre applicazioni.Quando si usa questa opzione, si dovrebbe tenere a mente che solo le tabelle InnoDB vengono esportate in uno stato coerente. Il dump non garantisce la coerenza degli altri Storage Engine. Per esempio, le tabelle MyISAM o MEMORY esportate con questa opzione, potranno continuare a cambiare stato durante la generazione del dump. Durante l'elaborazione di un dump --single-transaction , per assicurarsi che il dump sia coerente (dati corretti e coordinate del log binario), occorre che nessun'altra connessione utilizzi le seguenti istruzioni: ALTER TABLE , CREATE TABLE , DROP TABLE , RENAME TABLE o TRUNCATE TABLE . Una lettura coerente non è isolata da quelle istruzioni, quindi se esse vengono eseguite le SELECT (eseguite da mysqldump per estrarre i dati) otterranno risultati non corretti o falliranno.Le opzioni --single-transaction e --lock-tables sono mutualmente esclusive perché LOCK TABLES causa un commit implicito delle transazioni pendenti. Perciò questa opzione disattiva automaticamente --lock-tables L'opzione non è supportata per le tabelle di MySQL Cluster; non è possibile garantire la coerenza dei dati esportati perché lo Storage Engine NDBCLUSTER supporta un solo livello di isolamento: READ_COMMITTED . Occorre quindi utilizzare il backup e il restore di NDB.Per effettuare il dump di grandi tabelle, occorre usare sia --single-transaction , sia --quick . |
--dump-date | Se l'opzione --comments e questa opzione sono specificate, mysqldump aggiunge un commento alla fine del dump nella seguente forma:-- Dump completed on DATE
. Tuttavia, la data fa sembrare diversi due dump che sono stati eseguiti in date diverse, anche se i dati in sè sono identici. --dump-date e --skip-dump-date stabiliscono se il commento con la data venga aggiunto o meno. Il default è --dump-date (include il commento). --skip-dump-date lo sopprime. Questa opzione è stata aggiunta in MySQL 5.1.23. |
--skip-opt | Disattiva --opt . Disattiva --add-drop-table , --add-locks , --create-options , --quick , --extended-insert , --lock-tables , --set-charset e --disable-keys . |
-S, --socket=nome | Per le connessioni a localhost, il nome del file socket Unix da usare oppure, su Windows, il nome del named pipe. |
--ssl | Abilita SSL per la connessione (abilitato automaticamente con gli altri flag). Si disabilita con --skip-ssl . Tutte le opzioni che iniziano con --ssl (questa e le seguenti) specificano se la connessione al server deve utilizzare SSL e indicano dove trovare le chiavi e i certificati. |
--ssl-ca=nome | File CA in formato PEM (si veda la documentazione di OpenSSL, implica --ssl ). |
--ssl-capath=nome | La directory CA (si veda la documentazione di OpenSSL, implica --ssl ). |
--ssl-cert=nome | Il certificato X509 in formato PEM (si veda la documentazione di OpenSSL, implica --ssl ). |
--ssl-cipher=nome | La cifratura SSL da usare (implica --ssl ). |
--ssl-key=nome | La chiave X509 in formato PEM (implica --ssl ). |
--ssl-verify-server-cert | Verifica il "Common Name" del server indicato nel certificato con l'hostname utilizzato nella connessione. Questa opzione è disabilitata per default. |
-T, --tab=nome | Produce file di dati separati con caratteri tab. Con questa opzione, per ogni tabella esportata mysqldump crea un file tbl_name.sql contenente l'istruzione CREATE TABLE che ricrea la tabella, e un file tbl_name.txt contenente i dati. Il valore dell'opzione rappresenta la directory nella quale saranno scritti i file.Nota: Questa opzione può essere usata solo se mysqldump viene eseguito sulla stessa macchina del server mysqld. Occorre il privilegio FILE , e il server deve avere il permesso di scrivere i file nella directory specificata.Per default, i file di dati .txt sono formattati con caratteri tab che separano tra loro i valori delle colonne e caratteri di nuova riga alla fine di ogni record. Il formato può però essere specificato esplicitamente utilizzando le opzioni --fields-xxx e --lines-terminated-by .A partire da MySQL 5.1.38, i valori delle colonne sono convertiti nel set di caratteri specificato dall'opzione --default-character-set . Con le versioni precedenti alla 5.1.38, e quando questa opzione non è presente, i valori sono esportati nel set di caratteri binary. In effetti, non avviene alcuna conversione. Se una tabella contiene colonne con set di caratteri differenti, sarà così anche per il file dei dati in output e potrebbe non essere possibile ricaricarlo correttamente. |
--tables | Questa opzione sovrascrive --databases (-B ). mysqldump interpreta tutti i nomi che seguono l'opzione come nomi di tabelle. |
--triggers | Include i trigger nel dump dei database. Questa opzione è attiva per default; si può disabilitarla con --skip-triggers . |
--tz-utc | Questa opzione fa sì che le colonne TIMESTAMP possano essere esportate e ricaricate tra server che si trovano in timezone differenti. mysqldump imposta la time zone della sua connessiona a UTC e aggiunge SET TIME_ZONE=´+00:00´ al file di dump. Senza questa opzione, i campi TIMESTAMP sono esportati e ricaricati nelle time zone locali del server di partenza e di quello di destinazione, pertanto i valori potrebbero cambiare se i due server si trovano in time zone diverse. --tz-utc protegge anche dalle modifiche dovute all'ora legale. --tz-utc è abilitato per default. Per disabilitarlo si usa --skip-tz-utc . Questa opzione è stata aggiunta in MySQL 5.1.2. |
-u, --user=nome | Il nome utente di MariaDB da usare per la connessione. |
-v, --verbose | Modalità verbosa. Scrive più informazioni su ciò che il programma fa nei vari stadi. |
-V, --version | Stampa la versione e termina. |
-w, --where="condizione_where" | Esporta solo i record che corrispondono alla condizione WHERE specificata. Le virgolette sono obbligatorie se la condizione contiene spazi o altri caratteri che sono speciali per l'interprete dei comandi.Esempi: --where="user=´jimf´" -w"userid>1"
-w"userid<1"
|
-X, --xml | Esporta i database in XML ben formato. |
NULL, ´NULL´ e i valori vuoti in XML
Per una colonna chiamata nome_colonna
, il valore NULL
, una stringa vuota e la stringa ´NULL´
si distinguono l'uno dall'altro nel modo seguente.
Valore | Rappresentazione XML |
---|---|
NULL (valore sconosciuto) | <field name="nome_colonna" xsi:nil="true" />
|
´´ (stringa vuota) | <field name="nome_colonna"></field>
|
´NULL´ (stringa) | <field name="nome_colonna">NULL</field>
|
A cominciare da MySQL 5.1.12, anche l'output del client mysql avviato con l'opzione --xml
segue le regole sopra indicate.
A partire da MySQL 5.1.18, l'output XML prodotto da mysqldump
include i namespace XML, come mostrato di seguito:
shell> mysqldump --xml -u root world City <?xml version="1.0"?> <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <database name="world"> <table_structure name="City"> <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" /> <field Field="Name" Type="char(35)" Null="NO" Key="" Default="" Extra="" /> <field Field="CountryCode" Type="char(3)" Null="NO" Key="" Default="" Extra="" /> <field Field="District" Type="char(20)" Null="NO" Key="" Default="" Extra="" /> <field Field="Population" Type="int(11)" Null="NO" Key="" Default="0" Extra="" /> <key Table="City" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID" Collation="A" Cardinality="4079" Null="" Index_type="BTREE" Comment="" /> <options Name="City" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="4079" Avg_row_length="67" Data_length="273293" Max_data_length="18858823439613951" Index_length="43008" Data_free="0" Auto_increment="4080" Create_time="2007-03-31 01:47:01" Update_time="2007-03-31 01:47:02" Collation="latin1_swedish_ci" Create_options="" Comment="" /> </table_structure> <table_data name="City"> <row> <field name="ID">1</field> <field name="Name">Kabul</field> <field name="CountryCode">AFG</field> <field name="District">Kabol</field> <field name="Population">1780000</field> </row> ... <row> <field name="ID">4079</field> <field name="Name">Rafah</field> <field name="CountryCode">PSE</field> <field name="District">Rafah</field> <field name="Population">92020</field> </row> </table_data> </database> </mysqldump>
Variabili
E' anche possibile impostare le seguenti variabili
(--variable-name=valore
) e le opzioni booleane
{FALSE|TRUE}
usando:
Nome | Valori predefiniti | Spiegazione |
---|---|---|
all | TRUE | |
all-databases | FALSE | |
all-tablespaces | FALSE | |
no-tablespaces | FALSE | |
add-drop-database | FALSE | |
add-drop-table | TRUE | |
add-locks | TRUE | |
allow-keywords | FALSE | |
character-sets-dir | (Nessun valore predefinito) | |
comments | TRUE | |
compatible | (Nessun valore predefinito) | |
compact | FALSE | |
complete-insert | FALSE | |
compress | FALSE | |
create-options | TRUE | |
databases | FALSE | |
debug-check | FALSE | |
debug-info | FALSE | |
default-character-set | utf8 | |
delayed-insert | FALSE | |
delete-master-logs | FALSE | |
disable-keys | TRUE | |
events | FALSE | |
extended-insert | TRUE | |
fields-terminated-by | (Nessun valore predefinito) | |
fields-enclosed-by | (Nessun valore predefinito) | |
fields-optionally-enclosed-by | (Nessun valore predefinito) | |
fields-escaped-by | (Nessun valore predefinito) | |
first-slave | FALSE | |
flush-logs | FALSE | |
flush-privileges | FALSE | |
force | FALSE | |
hex-blob | FALSE | |
host | (Nessun valore predefinito) | |
insert-ignore | FALSE | |
lines-terminated-by | (Nessun valore predefinito) | |
lock-all-tables | FALSE | |
lock-tables | TRUE | |
log-error | (Nessun valore predefinito) | |
master-data | 0 | |
max_allowed_packet | 25165824 | Le dimensioni massime del buffer per le comunicazioni client/server. Il massimo è 1GB. |
net_buffer_length | 1046528 | Le dimensioni iniziali del buffer per le comunicazioni client/server. Quando si creano istruzioni INSERT multiriga (con l'opzione --extended-insert o --opt ), mysqldump crea righe fino ad una lunghezza massima di net_buffer_length . Se si incrementa questa variabile, occorre assicurarsi che la variabile net_buffer_length del server MariaDB sia uguale o maggiore. |
no-autocommit | FALSE | |
no-create-db | FALSE | |
no-create-info | FALSE | |
no-data | FALSE | |
order-by-primary | FALSE | |
port | 0 | |
quick | TRUE | |
quote-names | TRUE | |
replace | FALSE | |
routines | FALSE | |
set-charset | TRUE | |
single-transaction | FALSE | |
dump-date | TRUE | |
socket | Nessun valore predefinito) | |
ssl | FALSE | |
ssl-ca | (Nessun valore predefinito) | |
ssl-capath | (Nessun valore predefinito) | |
ssl-cert | (Nessun valore predefinito) | |
ssl-cipher | (Nessun valore predefinito) | |
ssl-key | (Nessun valore predefinito) | |
ssl-verify-server-cert | FALSE | |
tab | (Nessun valore predefinito) | |
triggers | TRUE | |
tz-utc | TRUE | |
user | (Nessun valore predefinito) | |
verbose | FALSE | |
where | (Nessun valore predefinito) |
Esempi
Un uso comune di mysqldump
è per ottenere un backup di un intero database:
shell> mysqldump nome_db > file-di-backup.sql
E' possibile ricaricare il file di dump nel server così:
shell> mysql nome_db < file-di-backup.sql
Oppure così:
shell> mysql -e "source /path-del-backup/file-di-backup.sql" nome_db
mysqldump
è molto utile anche per popolare i database
copiando i dati da un server MariaDB ad un altro:
shell> mysqldump --opt nome_db | mysql --host=host_remoto -C nome_db
E' possibile esportare diversi database con un solo comando:
shell> mysqldump --databases nome_db1 [nome_db2 ...] > miei_db.sql
Per esportare tutti i database si usa l'opzione --all-databases
:
shell> mysqldump --all-databases > tutti_i_db.sql
Per le tabelle InnoDB, mysqldump
fornisce un modo per creare un
backup in linea:
shell> mysqldump --all-databases --single-transaction tutti_i_db.sql
Questo backup acquisisce un lock in lettura globale su tutte le tabelle (usando
FLUSH TABLES WITH READ LOCK
)all'inizio del dump. Subito dopo
il lock è acquisito, le coordinate del log binario vengono lette
e il lock rilasciato.
Quando il comando FLUSH viene eseguito, se sono in esecuzione delle lunghe
istruzioni che modificano i dati,
il server MySQL potrebbe essere bloccato fino a quando quelle istruzioni non
terminano. Dopodiché, il dump sarà libero dai lock e non disturberà le
letture e le modifiche sulle tabelle. Se le istruzioni che modificano i dati
sono brevi anche il lock iniziale dovrebbe essere breve, anche nel caso in cui
le modifiche siano molte.
Per un recupero "point-in-time" (chiamato anche "roll-forward", quando si desidera recuperare un vecchio backup e ripetere i cambiamenti che sono avvenuti da quel momento in poi), è spesso utile ruotare i lock binari (si veda la Sezione 5.2.4, “The Binary Log”) o almeno conoscere le coordinate del log binario a cui corrisponde il dump:
shell> mysqldump --all-databases --master-data=2 > tutti_i_db.sql
Oppure:
shell> mysqldump --all-databases --flush-logs --master-data=2 > tutti_i_db.sql
Le opzioni --master-data
e --single-transaction
possono essere usate simultaneamente; è un modo comodo per effettuare un backup in linea, che è adatto al recupero point-in-time sopra spiegato se le tabelle sono di tipo InnoDB.