MySQL - eksport bazy danych

Najprostszym sposobem wyeksportowania danych tabeli do pliku tekstowego jest użycie rozszerzenia SELECT...INTO OUTFILE instrukcja eksportująca wynik zapytania bezpośrednio do pliku na hoście serwera.

Eksportowanie danych za pomocą instrukcji SELECT ... INTO OUTFILE

Składnia tej instrukcji łączy zwykły plik SELECT polecenie z INTO OUTFILE filenamena końcu. Domyślny format wyjściowy jest taki sam, jak w przypadku polecenia LOAD DATA. Tak więc poniższa instrukcja eksportuje pliktutorials_tbl stół do /tmp/tutorials.txt jako plik rozdzielany znakami tabulacji i zakończony wysuwem wiersza.

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

Możesz zmienić format wyjściowy, korzystając z różnych opcji, aby wskazać, jak cytować i ograniczać kolumny i rekordy. Aby wyeksportować tabelę tutorial_tbl w formacie CSV z liniami zakończonymi CRLF, użyj następującego kodu.

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

Plik SELECT ... INTO OUTFILE ma następujące właściwości -

  • Plik wyjściowy jest tworzony bezpośrednio przez serwer MySQL, więc nazwa pliku powinna wskazywać, gdzie chcesz zapisać plik na hoście serwera. Nie ma LOKALNEJ wersji instrukcji analogicznej doLOCAL wersja LOAD DATA.

  • Musisz mieć MySQL FILE przywilej wykonania SELECT ... INTO komunikat.

  • Plik wyjściowy nie może już istnieć. Zapobiega to blokowaniu przez MySQL plików, które mogą być ważne.

  • Powinieneś mieć konto logowania na hoście serwera lub jakiś sposób na pobranie pliku z tego hosta. W przeciwnym razieSELECT ... INTO OUTFILE polecenie najprawdopodobniej nie będzie dla ciebie wartościowe.

  • W systemie UNIX plik jest tworzony world readablei jest własnością serwera MySQL. Oznacza to, że chociaż będziesz mógł odczytać plik, możesz nie być w stanie go usunąć.

Eksportowanie tabel jako surowych danych

Plik mysqldumpProgram służy do kopiowania lub tworzenia kopii zapasowych tabel i baz danych. Może zapisać dane wyjściowe tabeli jako plikRaw Datafile lub jako zestaw INSERT instrukcje odtwarzające rekordy w tabeli.

Aby zrzucić tabelę jako plik danych, musisz określić plik --tab opcja wskazująca katalog, w którym serwer MySQL ma zapisać plik.

Na przykład, aby zrzucić plik tutorials_tbl stół z TUTORIALS bazy danych do pliku w /tmp katalogu, użyj polecenia, jak pokazano poniżej.

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

Eksportowanie zawartości tabeli lub definicji w formacie SQL

Aby wyeksportować tabelę w formacie SQL do pliku, użyj polecenia pokazanego poniżej.

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

Spowoduje to utworzenie pliku o zawartości pokazanej poniżej.

-- 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');

Aby zrzucić wiele tabel, nadaj im nazwę, a po niej argument nazwa bazy danych. Aby zrzucić całą bazę danych, nie nazywaj żadnych tabel po bazie danych, jak pokazano w poniższym bloku kodu.

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

Aby utworzyć kopię zapasową wszystkich baz danych dostępnych na hoście, użyj następującego kodu.

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

Opcja --all-databases jest dostępna w wersji MySQL 3.23.12. Tej metody można użyć do wdrożenia strategii tworzenia kopii zapasowych bazy danych.

Kopiowanie tabel lub baz danych do innego hosta

Jeśli chcesz skopiować tabele lub bazy danych z jednego serwera MySQL na inny, użyj rozszerzenia mysqldump z nazwą bazy danych i nazwą tabeli.

Uruchom następujące polecenie na hoście źródłowym. Spowoduje to zrzucenie całej bazy danych dodump.txt plik.

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

Możesz skopiować całą bazę danych bez używania konkretnej nazwy tabeli, jak wyjaśniono powyżej.

Teraz plik ftp dump.txt na innym hoście i użyj następującego polecenia. Przed uruchomieniem tego polecenia upewnij się, że utworzyłeś nazwę_bazy_danych na serwerze docelowym.

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

Innym sposobem na osiągnięcie tego bez korzystania z pliku pośredniczącego jest wysłanie danych wyjściowych mysqldump bezpośrednio przez sieć do zdalnego serwera MySQL. Jeśli możesz połączyć się z obydwoma serwerami z hosta, na którym znajduje się źródłowa baza danych, użyj następującego polecenia (upewnij się, że masz dostęp do obu serwerów).

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

W mysqldump połowa polecenia łączy się z lokalnym serwerem i zapisuje dane wyjściowe zrzutu do potoku. Pozostała połowa polecenia łączy się ze zdalnym serwerem MySQL na stronie other-host.com. Odczytuje potok wejściowy i wysyła każdą instrukcję do serwera other-host.com.