MySQL
Backup con mysqldump
Ricerca…
Sintassi
- mysqldump -u [nome utente] -p [password] [altre opzioni] nome_db> dumpFileName.sql /// Per eseguire il backup di un singolo database
- mysqldump -u [nome utente] -p [password] [altre opzioni] nome_db [nome_tbl tbl_nome2 nome_tbl2 ...]> dumpFileName.sql /// Per eseguire il backup di una o più tabelle
- mysqldump -u [nome utente] -p [password] [altre opzioni] - database db_name1 db_name2 nome_db3> dumpFileName.sql /// Per eseguire il backup di uno o più database completi
- mysqldump -u [nome utente] -p [password] [altre opzioni] --all-databases> dumpFileName.sql /// Per eseguire il backup dell'intero server MySQL
Parametri
Opzione | Effetto |
---|---|
- | # Opzioni di accesso al server |
-h ( --host ) | Host (indirizzo IP o nome host) a cui connettersi. L'impostazione predefinita è localhost ( 127.0.0.1 ) Esempio: -h localhost |
-u ( --user ) | Utente MySQL |
-p ( --password ) | Password MySQL. Importante : quando si utilizza -p , non deve esserci uno spazio tra l'opzione e la password. Esempio: -pMyPassword |
- | # Opzioni di scarico |
--add-drop-database | Aggiungi un'istruzione DROP DATABASE prima di ogni istruzione CREATE DATABASE . Utile se si desidera sostituire i database nel server. |
--add-drop-table | Aggiungi un'istruzione DROP TABLE prima di ogni istruzione CREATE TABLE . Utile se si desidera sostituire le tabelle nel server. |
--no-create-db | Sopprimere le istruzioni CREATE DATABASE nel dump. Ciò è utile quando sei sicuro che il (i) database (i) che stai scaricando esiste già (s) nel server in cui caricerai il dump. |
-t ( --no-create-info ) | Elimina tutte le istruzioni CREATE TABLE nel dump. Ciò è utile quando si desidera scaricare solo i dati dalle tabelle e utilizzerà il file di dump per popolare tabelle identiche in un altro database / server. |
-d ( --no-data ) | Non scrivere informazioni sulla tabella. Questo scaricherà solo le istruzioni CREATE TABLE . Utile per creare database "modello" |
-R ( --routines ) | Includere stored procedure / funzioni nel dump. |
-K ( --disable-keys ) | Disabilitare le chiavi per ogni tabella prima di inserire i dati e abilitare le chiavi dopo aver inserito i dati. Ciò accelera gli inserimenti solo nelle tabelle MyISAM con indici non univoci. |
Osservazioni
L'output di un'operazione mysqldump
è un file leggermente commentato contenente istruzioni SQL sequenziali compatibili con la versione delle utilità MySQL utilizzate per generarlo (con attenzione alla compatibilità con le versioni precedenti, ma nessuna garanzia per quelle future). Pertanto, il ripristino di un database mysqldump
ed include l'esecuzione di tali istruzioni. Generalmente, questo file
-
DROP
s la prima tabella o vista specificata -
CREATE
s quella tabella o vista - Per le tabelle scaricate con dati (cioè senza l'opzione
--no-data
)-
LOCK
il tavolo -
INSERT
tutte le righe della tabella originale in un'unica istruzione
-
-
UNLOCK TABLES
- Ripete il precedente per tutte le altre tabelle e viste
-
DROP
s la prima routine inclusa -
CREATE
questa routine - Ripete lo stesso per tutte le altre routine
La presenza del DROP
prima di CREATE
per ogni tabella indica che se lo schema è presente, indipendentemente dal fatto che sia vuoto o meno, l'utilizzo di un file mysqldump
per il suo ripristino compila o sovrascrive i dati in esso contenuti.
Creazione di un backup di un database o una tabella
Crea un'istantanea di un intero database:
mysqldump [options] db_name > filename.sql
Creare uno snapshot di più database:
mysqldump [options] --databases db_name1 db_name2 ... > filename.sql
mysqldump [options] --all-databases > filename.sql
Crea uno snapshot di una o più tabelle:
mysqldump [options] db_name table_name... > filename.sql
Crea uno snapshot escludendo una o più tabelle:
mysqldump [options] db_name --ignore-table=tbl1 --ignore-table=tbl2 ... > filename.sql
L'estensione del file .sql
è completamente una questione di stile. Qualsiasi estensione funzionerebbe.
Specifica nome utente e password
> mysqldump -u username -p [other options]
Enter password:
Se è necessario specificare la password sulla riga di comando (ad esempio in uno script), è possibile aggiungerla dopo l'opzione -p
senza spazio:
> mysqldump -u username -ppassword [other options]
Se la password contiene spazi o caratteri speciali, ricorda di usare l'escape a seconda della shell / sistema.
Opzionalmente la forma estesa è:
> mysqldump --user=username --password=password [other options]
(L'esplicita specificazione della password sulla riga di comando non è consigliata a causa di problemi di sicurezza.)
Ripristino di un backup di un database o di una tabella
mysql [options] db_name < filename.sql
Nota che:
-
db_name
deve essere un database esistente; - il tuo utente autenticato ha privilegi sufficienti per eseguire tutti i comandi all'interno del tuo
filename.sql
; - L'estensione del file
.sql
è completamente una questione di stile. Qualsiasi estensione funzionerebbe. - Non è possibile specificare un nome tabella da caricare in anche se è possibile specificarne uno da cui eseguire il dump. Questo deve essere fatto all'interno di
filename.sql
.
In alternativa, quando lo strumento riga di comando MySQL , è possibile ripristinare (o eseguire qualsiasi altro script) utilizzando il comando di origine:
source filename.sql
o
\. filename.sql
mysqldump da un server remoto con compressione
Per utilizzare la compressione sul filo per un trasferimento più veloce, passare l'opzione --compress
a mysqldump
. Esempio:
mysqldump -h db.example.com -u username -p --compress dbname > dbname.sql
Importante: se non si desidera bloccare il db di origine , è necessario includere anche --lock-tables=false
. Ma potresti non ottenere un'immagine db coerente internamente in questo modo.
Per salvare anche il file compresso, puoi inviare pipe a gzip
.
mysqldump -h db.example.com -u username -p --compress dbname | gzip --stdout > dbname.sql.gz
ripristinare un file mysqldump gzip senza decomprimere
gunzip -c dbname.sql.gz | mysql dbname -u username -p
Nota: -c
significa scrivere output su stdout.
Backup diretto su Amazon S3 con compressione
Se si desidera eseguire un backup completo di una grande installazione MySql e non si dispone di una memoria locale sufficiente, è possibile scaricarla e comprimerla direttamente su un bucket Amazon S3. È anche una buona pratica farlo senza avere la password del DB come parte del comando:
mysqldump -u root -p --host=localhost --opt --skip-lock-tables --single-transaction \
--verbose --hex-blob --routines --triggers --all-databases |
gzip -9 | s3cmd put - s3://s3-bucket/db-server-name.sql.gz
Viene richiesta la password, dopodiché viene avviato il backup.
Trasferimento dei dati da un server MySQL a un altro
Se hai bisogno di copiare un database da un server a un altro, hai due opzioni:
Opzione 1:
- Memorizza il file di dump nel server di origine
- Copia il file dump sul tuo server di destinazione
- Carica il file di dump nel tuo server di destinazione
Sul server di origine:
mysqldump [options] > dump.sql
Sul server di destinazione, copiare il file di dump ed eseguire:
mysql [options] < dump.sql
Opzione 2:
Se il server di destinazione può connettersi al server host, è possibile utilizzare una pipeline per copiare il database da un server all'altro:
Sul server di destinazione
mysqldump [options to connect to the source server] | mysql [options]
Allo stesso modo, lo script potrebbe essere eseguito sul server di origine, spingendo verso la destinazione. In entrambi i casi, è probabile che sia significativamente più veloce dell'opzione 1.
Database di backup con stored procedure e funzioni
Per impostazione predefinita, stored procedure e funzioni o non generate da mysqldump
, è necessario aggiungere il parametro --routines
(o -R
):
mysqldump -u username -p -R db_name > dump.sql
Quando si utilizza --routines
la creazione e la modifica dei timestamp non vengono mantenute, si dovrebbe invece scaricare e ricaricare il contenuto di mysql.proc
.