środa, 19 września 2018

MySQL - Eksport bazy danych

MySQL - Eksport bazy danych


Najprostszym sposobem eksportowania danych tabeli do pliku tekstowego jest użycie instrukcji SELECT ... INTO OUTFILE , która eksportuje wynik zapytania bezpośrednio do pliku na hoście serwera.

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


Składnia tej instrukcji łączy zwykłe polecenie SELECT z INTO OUTFILE nazwa_pliku na końcu. Domyślny format wyjściowy jest taki sam, jak w przypadku polecenia LOAD DATA. Tak więc poniższa instrukcja eksportuje tabelę kurs_tbl do pliku /tmp/kurs.txt jako plik rozdzielany tabulatorami, zakończony końcem linii.
mysql> SELECT * FROM kurs_tbl
   -> INTO OUTFILE '/tmp/kurs.txt';
Możesz zmienić format wyjściowy za pomocą różnych opcji, aby wskazać sposób cytowania i rozdzielania kolumn i rekordów. Aby wyeksportować tabelę kurs_tbl w formacie CSV z liniami zakończonymi listą CRLF, użyj następującego kodu.
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/kurs.txt'
   -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
   -> LINES TERMINATED BY '\r\n';

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 ma być zapisany plik na hoście serwera. Nie ma  instrukcji LOCAL podobnej do LOCAL w wersji dla LOAD DATA.
·      Musisz mieć uprawnienie MySQL FILE do wykonania instrukcji SELECT ... INTO.
·      Plik wyjściowy nie może już istnieć. Zapobiega to aby MySQL zastąpił pliki, które mogą być ważne.
·      Powinieneś mieć konto logowania na hoście serwera lub w jakiś sposób pobrać plik z tego hosta. W przeciwnym razie polecenie SELECT ... INTO OUTFILEnajprawdopodobniej nie będzie dla ciebie wartością..
·      W systemie UNIX plik jest tworzony na world readable  i jest własnością serwera MySQL. Oznacza to, że chociaż będziesz w stanie odczytać plik, możesz nie być w stanie go usunąć.

Eksportowanie tabel jako dane surowe

Program mysqldump służy do kopiowania lub tworzenia kopii zapasowych tabel i baz danych. Może zapisać wynik tabeli jako plik danych surowych lub zestaw instrukcji INSERT, które odtwarzają rekordy w tabeli.
Aby zrzucić tabelę jako plik danych, należy określić opcję --tab , która wskazuje katalog, w którym serwer MySQL ma zapisać plik.
Na przykład, aby zrzucić tabelę kurs_tbl z bazy danych KURS do pliku w katalogu /tmp, użyj polecenia, jak pokazano poniżej.
$ mysqldump -u root -p --no-create-info \
   --tab=/tmp kurs kurs_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 KURS kurs_tbl > dump.txt
password ******
Spowoduje to utworzenie pliku zawierającego zawartość, jak pokazano poniżej.


-- MySQL dump 10.13  Distrib 5.6.24, for Win32 (x86)
--
-- Host: localhost    Database: KURS
-- ------------------------------------------------------
-- Server version        5.6.24

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `kurs_tbl`
--

DROP TABLE IF EXISTS `kurs_tbl`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `kurs_tbl` (
  `kurs_id` int(11) NOT NULL AUTO_INCREMENT,
  `kurs_title` varchar(100) NOT NULL,
  `kurs_author` varchar(40) NOT NULL,
  `submission_date` date DEFAULT NULL,
  PRIMARY KEY (`kurs_id`),
  UNIQUE KEY `author_index` (`kurs_author`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `kurs_tbl`
--

LOCK TABLES `kurs_tbl` WRITE;
/*!40000 ALTER TABLE `kurs_tbl` DISABLE KEYS */;
INSERT INTO `kurs_tbl` VALUES (1,'JavaScript','Berg','2018-02-02'),(2,'Nauka CSS','K. Nelberg','2018-02-02'),(4,'HTML','H.Kern','2016-02-14');
/*!40000 ALTER TABLE `kurs_tbl` ENABLE KEYS */;
UNLOCK TABLES;
Aby zrzucić wiele tabel, nadaj im nazwy, a następnie wpisz nazwę bazy danych. Aby zrzucić całą bazę danych, nie należy wymieniać tabel za bazą danych, jak pokazano w poniższym bloku kodu.
$ mysqldump -u root -p KURS > 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. Ta metoda może być używana do implementacji strategii tworzenia kopii zapasowych bazy danych.

Kopiowanie tabel lub baz danych na inny host

Jeśli chcesz skopiować tabele lub bazy danych z jednego serwera MySQL na inny, użyj mysqldump z nazwą bazy danych i nazwą tabeli.
Uruchom następującą komendę na hoście źródłowym. Spowoduje to zrzucenie pełnej bazy danych do pliku dump.txt.
$ mysqldump -u root -p nazwa_bazy nazwa_tabeli > dump.txt
password *****
Możesz skopiować kompletną bazę danych bez użycia konkretnej nazwy tabeli, jak wyjaśniono powyżej.
Teraz prześlij plik dump.txt przez ftp na inny host i użyj następującego polecenia. Przed uruchomieniem tego polecenia upewnij się, że utworzyłeś bazę na serwerze docelowym.
$ mysql -u root -p nazwa_bazy < dump.txt
password *****
Innym sposobem na osiągnięcie tego bez użycia 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 na obu serwerach).
$ mysqldump -u root -p nazwa_bazy \
   | mysql -h inny-host.com nazwa_bazy
W mysqldump, połowa polecenia łączy się z lokalnym serwerem i zapisuje wyjście dump do potoku. Pozostała połowa polecenia łączy się ze zdalnym serwerem MySQL na stronie inny-host.com. Odczytuje potok wejściowy i wysyła każdą instrukcję na serwer inny-host.com.



Brak komentarzy:

Prześlij komentarz