MySQL - Esportazione di database

Il modo più semplice per esportare i dati di una tabella in un file di testo è utilizzare l'estensione SELECT...INTO OUTFILE istruzione che esporta il risultato di una query direttamente in un file sull'host del server.

Esportazione di dati con l'istruzione SELECT ... INTO OUTFILE

La sintassi di questa istruzione combina un normale SELECT comando con INTO OUTFILE filenamealla fine. Il formato di output predefinito è lo stesso del comando LOAD DATA. Quindi, la seguente istruzione esporta il filetutorials_tbl tabella in /tmp/tutorials.txt come un file delimitato da tabulazioni e terminato con avanzamento riga.

mysql> SELECT * FROM tutorials_tbl 
   -> INTO OUTFILE '/tmp/tutorials.txt';

È possibile modificare il formato di output utilizzando varie opzioni per indicare come citare e delimitare colonne e record. Per esportare la tabella tutorial_tbl in un formato CSV con righe con terminazione CRLF, utilizzare il codice seguente.

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
   -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
   -> LINES TERMINATED BY '\r\n';

Il SELECT ... INTO OUTFILE ha le seguenti proprietà:

  • Il file di output viene creato direttamente dal server MySQL, quindi il nome del file dovrebbe indicare dove si desidera che il file venga scritto sull'host del server. Non esiste una versione LOCALE dell'istruzione analoga aLOCAL versione di LOAD DATA.

  • Devi avere il file MySQL FILE privilegio per eseguire il SELECT ... INTO dichiarazione.

  • Il file di output non deve esistere già. Ciò impedisce a MySQL di distruggere file che potrebbero essere importanti.

  • Dovresti avere un account di accesso sull'host del server o un modo per recuperare il file da quell'host. Altrimenti, il fileSELECT ... INTO OUTFILE molto probabilmente non avrà alcun valore per te.

  • In UNIX, il file viene creato world readableed è di proprietà del server MySQL. Ciò significa che anche se sarai in grado di leggere il file, potresti non essere in grado di eliminarlo.

Esportazione di tabelle come dati grezzi

Il mysqldumpviene utilizzato per copiare o eseguire il backup di tabelle e database. Può scrivere l'output della tabella come fileRaw Datafile o come un insieme di INSERT istruzioni che ricreano i record nella tabella.

Per eseguire il dump di una tabella come file di dati, è necessario specificare un file --tab opzione che indica la directory in cui desideri che il server MySQL scriva il file.

Ad esempio, per scaricare il file tutorials_tbl tabella dal TUTORIALS database in un file in /tmp directory, utilizzare un comando come mostrato di seguito.

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp tutorials tutorials_tbl
password ******

Esportazione del contenuto della tabella o delle definizioni in formato SQL

Per esportare una tabella in formato SQL in un file, utilizzare il comando mostrato di seguito.

$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txt
password ******

Questo creerà un file con contenuto come mostrato di seguito.

-- MySQL dump 8.23
--
-- Host: localhost    Database: TUTORIALS
---------------------------------------------------------
-- Server version       3.23.58

--
-- Table structure for table `tutorials_tbl`
--

CREATE TABLE tutorials_tbl (
   tutorial_id int(11) NOT NULL auto_increment,
   tutorial_title varchar(100) NOT NULL default '',
   tutorial_author varchar(40) NOT NULL default '',
   submission_date date default NULL,
   PRIMARY KEY  (tutorial_id),
   UNIQUE KEY AUTHOR_INDEX (tutorial_author)
) TYPE = MyISAM;

--
-- Dumping data for table `tutorials_tbl`
--

INSERT INTO tutorials_tbl 
   VALUES (1,'Learn PHP','John Poul','2007-05-24');
INSERT INTO tutorials_tbl 
   VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
INSERT INTO tutorials_tbl 
   VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');

Per eseguire il dump di più tabelle, denominarle tutte seguito dall'argomento del nome del database. Per eseguire il dump di un intero database, non denominare alcuna tabella dopo il database come mostrato nel seguente blocco di codice.

$ mysqldump -u root -p TUTORIALS > database_dump.txt
password ******

Per eseguire il backup di tutti i database disponibili sull'host, utilizzare il codice seguente.

$ mysqldump -u root -p --all-databases > database_dump.txt
password ******

L'opzione --all-databases è disponibile nella versione MySQL 3.23.12. Questo metodo può essere utilizzato per implementare una strategia di backup del database.

Copia di tabelle o database su un altro host

Se desideri copiare tabelle o database da un server MySQL a un altro, utilizza l'estensione mysqldump con nome database e nome tabella.

Eseguire il seguente comando sull'host di origine. Questo scaricherà il database completo indump.txt file.

$ mysqldump -u root -p database_name table_name > dump.txt
password *****

È possibile copiare il database completo senza utilizzare un nome di tabella particolare come spiegato sopra.

Ora, ftp dump.txt file su un altro host e utilizzare il seguente comando. Prima di eseguire questo comando, assicurati di aver creato database_name sul server di destinazione.

$ mysql -u root -p database_name < dump.txt
password *****

Un altro modo per ottenere ciò senza utilizzare un file intermedio è inviare l'output di mysqldump direttamente sulla rete al server MySQL remoto. Se è possibile connettersi a entrambi i server dall'host in cui risiede il database di origine, utilizzare il comando seguente (assicurarsi di avere accesso su entrambi i server).

$ mysqldump -u root -p database_name \
   | mysql -h other-host.com database_name

In mysqldump, metà del comando si connette al server locale e scrive l'output del dump sulla pipe. La restante metà del comando si connette al server MySQL remoto su other-host.com. Legge la pipe per l'input e invia ogni istruzione al server other-host.com.