English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

导出数据 MySQL

In MySQL puoi utilizzareSELECT...INTO OUTFILEper esportare semplicemente i dati in un file di testo.

Esporta i dati utilizzando la dichiarazione SELECT ... INTO OUTFILE

Nell'esempio seguente esporteremo i dati della tabella w3codebox_tbl nel file /tmp/w3codebox.txt:

mysql> SELECT * FROM w3codebox_tbl 
    -> INTO OUTFILE '/tmp/w3codebox.txt';

Puoi impostare il formato specifico dell'output dei dati tramite l'opzione del comando, l'esempio seguente è l'esportazione in formato CSV:

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

Nell'esempio seguente, viene generato un file con i valori separati da virgola. Questo formato può essere utilizzato da molti programmi.

SELECT a, b, a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

La frase SELECT ... INTO OUTFILE ha le seguenti proprietà:

  • LOAD DATA INFILE è l'operazione inversa di SELECT ... INTO OUTFILE, la sintassi SELECT. Per scrivere i dati di un database in un file, utilizzare SELECT ... INTO OUTFILE, per leggere il file indietro nel database, utilizzare LOAD DATA INFILE.

  • La forma SELECT...INTO OUTFILE 'file_name' può scrivere le righe selezionate in un file. Il file viene creato sul host del server, quindi è necessario avere i permessi FILE per utilizzare questa sintassi.

  • L'output non può essere un file esistente. Per prevenire la manipolazione dei dati del file.

  • È necessario avere un account di accesso al server per recuperare il file. Altrimenti SELECT ... INTO OUTFILE non avrà alcun effetto.

  • Nel sistema UNIX, il file viene creato come leggibile e i permessi sono posseduti dal server MySQL. Questo significa che anche se è possibile leggere il file, potrebbe non essere possibile eliminarlo.

Esportare la tabella come dati originali

mysqldump è uno strumento di mysql utilizzato per il trasferimento di archiviazione dei database. Produce principalmente uno script SQL che contiene i comandi necessari per ricreare il database da zero, come CREATE TABLE, INSERT, ecc.

Per esportare i dati utilizzando mysqldump, è necessario utilizzare l'opzione --tab per specificare la directory del file di esportazione, che deve essere scrivibile.

Esempio di seguito, l'elenco dei dati della tabella w3codebox_tbl viene esportato nella directory /tmp:

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

Esportare i dati in formato SQL

Esportare i dati in formato SQL nel file specificato, come illustrato di seguito:

$ mysqldump -u root -p w3codebox w3codebox_tbl > dump.txt
password ********

Il contenuto del file creato dai seguenti comandi è il seguente:

-- MySQL dump 8.23
--
-- Host: localhost Database: w3codebox
---------------------------------------------------------
-- Versione del server 3.23.58
--
-- Struttura della tabella per la tabella `w3codebox_tbl`
--
CREATE TABLE w3codebox_tbl (
  w3codebox_id int(11) NOT NULL auto_increment,
  w3codebox_title varchar(100) NOT NULL default '',
  w3codebox_author varchar(40) NOT NULL default '',
  submission_date date default NULL,
  PRIMARY KEY (w3codebox_id),
  UNIQUE KEY AUTHORITY_INDEX (w3codebox_author)
) TYPE=MyISAM;
--
-- Estrazione dei dati per la tabella `w3codebox_tbl`
--
INSERT INTO w3codebox_tbl 
       VALUES (1, 'Learn PHP', 'John Poul', '2007-05-24');
INSERT INTO w3codebox_tbl 
       VALUES (2, 'Learn MySQL', 'Abdul S', '2007-05-24');
INSERT INTO w3codebox_tbl 
       VALUES (3, 'JAVA Tutorial', 'Sanjay', '2007-05-06');

Se si desidera esportare i dati dell'intero database, è possibile utilizzare il seguente comando:

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

Se si desidera eseguire il backup di tutti i database, è possibile utilizzare il seguente comando:

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

--all-databases opzione è stata aggiunta a MySQL a partire dalla versione 3.23.12.

该方法可用于实现数据库的备份策略。

将数据表及数据库拷贝至其他主机

如果你需要将数据拷贝至其他的 MySQL 服务器上,你可以在 mysqldump 命令中指定数据库名及数据表。

在源主机上执行以下命令,将数据备份至 dump.txt 文件中:

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

如果完整备份数据库,则无需使用特定的表名称。

如果你需要将备份的数据库导入到MySQL服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:

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

你也可以使用以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:

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

在上述命令中使用了管道来将导出的数据导入到指定的远程主机上。