mysqldump

Upgrading from MySQL to MariaDB? Let us help you!

  Contact Us

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:

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/etc/my.cnf
  4. ~/.my.cnf

mysqldump supporta anche le opzioni per elaborare i file di configurazione.

Le seguenti opzioni possono essere indicate come primo argomento:

OpzioneSpiegazione
--print-defaultsStampa la lista degli argomenti ed esce.
--no-defaultsNon 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.
--allDeprecato. Si usi --create-options invece.
-A, --all-databasesCopia tutti i database. E' come usare --databases con tutti i database selezionati.
-Y, --all-tablespacesCopia tutti i tablespace.
-y, --no-tablespacesNon copia le informazioni sui tablespace.
--add-drop-databaseAggiunge DROP DATABASE prima di ogni create.
--add-drop-tableAggiunge DROP TABLE prima di ogni create.
--add-locksAggiunge dei lock prima e dopo le istruzioni INSERT.
--allow-keywordsPermette l'uso di parole chiave come nomi di colonne.
--character-sets-dir=nomeDirectory dei set di caratteri.
-i, --commentsScrive informazioni aggiuntive. Si disabilita con --skip-comments.
--compatible=nomeCrea 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.
--compactProduce 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-insertUsa istruzioni INSERT complete che includono i nomi delle colonne.
-C, --compressUsa la compressione nel protocollo client/server. Funziona se sia il client sia il server supportano la compressione.
-a, --create-optionsInclude tutte le opzioni di CREATE TABLE specifiche di MariaDB e MySQL.
-B, --databasesCopia 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-checkControlla l'utilizzo della memoria e dei file aperti ed esce.
--debug-infoStampa alcune informazioni di debug ed esce.
--default-character-set=nomeImposta 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-insertInserisce i record con INSERT DELAYED invece di INSERT.
--delete-master-logsSu 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-keysAggiunge 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, --eventsInclude gli eventi dell'Event Scheduler nell'output dei relativi database. Questa opzione è stata aggiunta in in MySQL 5.1.8.
-e, --extended-insertUsa 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=nomeNel 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=nomeNel 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=nameNel 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=nameNel 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-slaveDeprecato, ora si chiama --lock-all-tables. --first-slave è stato rimosso da MySQL 5.5.
-F, --flush-logsSvuota 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-privilegesInvia 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, --forceContinua 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.
-?, --helpMostra un messaggio di help e termina.
--hex-blobScrive 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=nomeSi connette al server MariaDB o MySQL sull'host specificato. Quello predefinito è localhost.
--ignore-table=nomeNon 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-ignoreInserisce righe con INSERT IGNORE invece di INSERT.
--lines-terminated-by=nomeLe 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-tablesBlocca 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-tablesPer 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=nomeScrive 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-autocommitRacchiude le istruzioni INSERT di ogni tabella fra le istruzioni SET autocommit = 0 e COMMIT.
-n, --no-create-dbQuesta 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-infoNon scrive le istruzioni CREATE TABLE che ricreano ogni dabella.
-d, --no-dataNon 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-namesSopprime l'istruzione SET NAMES. Ha lo stesso effetto di --skip-set-charset.
--optQuesta 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-primaryOrdina 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, --pipeSu 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=nomeIl 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, --quickQuesta 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-namesVirgoletta 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.
--replaceUsa le istruzioni REPLACE INTO invece di INSERT INTO. Questa opzione è stata aggiunta in MySQL 5.1.3.
-r, --result-file=nomeInvia 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, --routinesInclude 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-charsetAggiunge 'SET NAMES default_character_set' all'output. E' abilitata per default; si può sopprimerla con --skip-set-charset.
-O, --set-variable=nomeModifica il valore di una variabile. Si noti che questa opzione è deprecata: è ora possibile impostare le variabili direttamente con --variable-name=valore.
--single-transactionQuesta 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-dateSe 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-optDisattiva --opt. Disattiva --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset e --disable-keys.
-S, --socket=nomePer le connessioni a localhost, il nome del file socket Unix da usare oppure, su Windows, il nome del named pipe.
--sslAbilita 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=nomeFile CA in formato PEM (si veda la documentazione di OpenSSL, implica --ssl).
--ssl-capath=nomeLa directory CA (si veda la documentazione di OpenSSL, implica --ssl).
--ssl-cert=nomeIl certificato X509 in formato PEM (si veda la documentazione di OpenSSL, implica --ssl).
--ssl-cipher=nomeLa cifratura SSL da usare (implica --ssl).
--ssl-key=nomeLa chiave X509 in formato PEM (implica --ssl).
--ssl-verify-server-certVerifica il "Common Name" del server indicato nel certificato con l'hostname utilizzato nella connessione. Questa opzione è disabilitata per default.
-T, --tab=nomeProduce 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.
--tablesQuesta opzione sovrascrive --databases (-B). mysqldump interpreta tutti i nomi che seguono l'opzione come nomi di tabelle.
--triggersInclude i trigger nel dump dei database. Questa opzione è attiva per default; si può disabilitarla con --skip-triggers.
--tz-utcQuesta 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=nomeIl nome utente di MariaDB da usare per la connessione.
-v, --verboseModalità verbosa. Scrive più informazioni su ciò che il programma fa nei vari stadi.
-V, --versionStampa 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, --xmlEsporta 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.

ValoreRappresentazione 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:

NomeValori predefinitiSpiegazione
allTRUE
all-databasesFALSE
all-tablespacesFALSE
no-tablespacesFALSE
add-drop-databaseFALSE
add-drop-tableTRUE
add-locksTRUE
allow-keywordsFALSE
character-sets-dir(Nessun valore predefinito)
commentsTRUE
compatible(Nessun valore predefinito)
compactFALSE
complete-insertFALSE
compressFALSE
create-optionsTRUE
databasesFALSE
debug-checkFALSE
debug-infoFALSE
default-character-setutf8
delayed-insertFALSE
delete-master-logsFALSE
disable-keysTRUE
eventsFALSE
extended-insertTRUE
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-slaveFALSE
flush-logsFALSE
flush-privilegesFALSE
forceFALSE
hex-blobFALSE
host(Nessun valore predefinito)
insert-ignoreFALSE
lines-terminated-by(Nessun valore predefinito)
lock-all-tablesFALSE
lock-tablesTRUE
log-error(Nessun valore predefinito)
master-data0
max_allowed_packet25165824Le dimensioni massime del buffer per le comunicazioni client/server. Il massimo è 1GB.
net_buffer_length1046528Le 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-autocommitFALSE
no-create-dbFALSE
no-create-infoFALSE
no-dataFALSE
order-by-primaryFALSE
port0
quickTRUE
quote-namesTRUE
replaceFALSE
routinesFALSE
set-charsetTRUE
single-transactionFALSE
dump-dateTRUE
socketNessun valore predefinito)
sslFALSE
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-certFALSE
tab(Nessun valore predefinito)
triggersTRUE
tz-utcTRUE
user(Nessun valore predefinito)
verboseFALSE
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.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.