Konfiguracja sprzętu i oprogramowania

Jak wyeksportować dane do mysql. Jak zaimportować dużą bazę danych MySQL z pominięciem ograniczeń phpMyAdmin

Ta procedura polega na przeniesieniu danych z jednej bazy danych (A) do drugiej (B). Z reguły baza danych B jest hostowana (lub Denver), a baza danych A znajduje się na komputerze użytkownika i jest plikiem z rozszerzeniem sql. Baza danych A ma inną nazwę - Zrzut.

Jak zaimportować bazę danych?

Importowanie bazy danych MySQL za pomocą SSH

Ta metoda jest stosowana dość rzadko, ale opiszemy ją. W pierwszej kolejności wypełnij bazę danych, z której nastąpi import na serwer dostawcy hostingu, na którym przechowywane są pliki Twojej witryny. Do importu bazy danych służy następująca komenda:

mysql -uNAZWAUŻYTKOWNIKA -pHASŁOUŻYTKOWNIKA NAZWABAZYDANYCH< DUMPFILENAME.sql

mysql --user=NAZWA UŻYTKOWNIKA --password=HASŁO UŻYTKOWNIKA NAZWA DANYCH< DUMPFILENAME.sql

Zamiast słów pisanych wielkimi literami zastępujemy:
USERNAME - nazwa użytkownika bazy danych, np. uhosting_databaseuser;

USERPASSWORD - hasło użytkownika bazy danych, np. Rjkweuik12;

DBNAME - nazwa bazy danych do zaimportowania, na przykład uhosting_databasename

DUMPFILENAME - nazwa pliku zrzutu, z którego będą importowane dane. Tutaj również musisz podać ścieżkę do bazy danych, którą wgraliśmy na serwer dostawcy hostingu.

Jeśli tak utworzyć kopię zapasową lub wyeksportowałeś bazę danych do pliku SQL, następnie możesz ją zaimportować do jednej z baz danych Dane MySQL Twoje konto hostingowe za pośrednictwem phpMyAdmin.

Notatka. Baza danych MySQL nie może zawierać wiersza CREATE DATABASE. V Inaczej import może się nie powieść.

Interfejs phpMyAdmin umożliwia jednoczesne importowanie 8 MB danych. Jeśli chcesz zaimportować większy plik, podziel go na wiele 8 MB fragmentów.

Uwaga! Jeśli importujesz bazę danych do zarządzanego hostingu WordPress, aby Twoja witryna działała płynnie.

Importowanie plików SQL do baz danych MySQL za pomocą phpMyAdmin

Następnie plik SQL zostanie uruchomiony i zaktualizuje bazę danych wybraną w pliku SQL. Przywrócenie bazy danych może zająć kilka minut.

Notatka. Jeśli pojawi się komunikat o błędzie Przekroczono limit czasu skryptu, jeśli chcesz zakończyć import, prześlij ponownie ten sam plik, a import zostanie wznowiony, możesz natychmiast wybrać ten sam plik i ponownie uruchomić proces.

Pozdrowienia, przyjaciele! 🙂.

Dzisiaj postanowiłem kontynuować rozmowę o pracy z MySQL w konsoli i zwrócić uwagę na procedurę eksportu bazy danych MySQL.

W artykule opowiem o tym, jak zrobić zrzut Bazy danych MySQL, a także przesłać dane z MySQL do plik Excel i csv.

Rozważymy różne opcje pobieranie informacji z: tworzenia zrzutu jednej i kilku baz danych, eksportu danych z poszczególnych tabel i dowolnych wyników WYBIERAĆ upraszanie.

A także porozmawiajmy o tym, jak wyświetlić dane z bazy danych MySQL w konsoli serwera i wiersz poleceń MySQL.

W tym artykule nie będę mówił o tym, jak eksportować dane za pomocą phpMyAdmin i innych narzędzi wizualnych.

Po pierwsze dlatego, że w sieci jest już wystarczająco dużo materiału na ten temat. Do tego materiał wysokiej jakości, którego nie wypalam z chęcią kopiuj-wklej.

Po drugie, sam krótko rozważyłem proces wyprowadzania informacji z bazy danych MySQL do pliku SQL w jednym z moich artykułów, o którym mówiłem.

Więc jeśli nie jesteś profesjonalnym programistą lub Administrator systemu, który może potrzebować informacji o pracy z konsolą, a Ty przyszedłeś tylko po instrukcje dotyczące eksportu bazy danych do phpMyAdmina, wtedy możesz ograniczyć się do przeczytania informacji z powyższego linku.

Chcę, żebyś dobrze mnie zrozumiał: nie chcę Cię w żaden sposób urazić, ale chcę tylko, abyś spędził swój czas z maksymalną korzyścią dla sprawy i dostał to, czego szukałeś.

Na tym kończymy część wstępną i przechodzimy do przeglądu poleceń konsoli do tworzenia zrzutu bazy danych MySQL, który postanowiłem posortować według ilości przechowywanych danych: od eksportu całej bazy danych do poszczególnych tabel i wyników dowolnych zapytań .

Tworzenie zrzutu bazy danych MySQL za pomocą konsoli

Na samym początku chcę dokonać małego wyjaśnienia.

Zrzut podstawowy jest plikiem z zestaw SQL poleceń, które po uruchomieniu pozwalają tworzyć bazy danych i tabele, a także wypełniać je informacjami. Zrzut jest potrzebny tym, którzy chcą pobrać bazę danych MySQL w celu skopiowania jej na inny serwer lub w obrębie istniejącego.

Ponadto, jeśli ktoś nie wie, kopia zapasowa bazy danych MySQL jest w rzeczywistości jej zrzutem wykonywanym w określonym czasie, co pozwala w razie potrzeby przywrócić strukturę bazy danych i dane.

Eksport danych- to po prostu wyciąganie informacji z tabel w formie tekstowej do dalszej pracy z edytorami tekstowymi lub graficznymi.

Dlatego polecenia dla tych działań będą nieco inne.

Aby utworzyć zrzut bazy danych, MySQL ma wbudowane narzędzie o nazwie mysqldump, do użycia poza wierszem poleceń MySQL w konsoli serwera lub innej powłoce.

Tak więc dla najprostszej i najczęstszej opcji - wyeksportowania danych z określonej bazy danych w konsoli MySQL w celu przeniesienia ich na inny serwer lub kopię wewnętrzną, należy uruchomić następującą komendę:

mysqldump -u nazwa użytkownika -p nazwa_bazy danych > ścieżka_i_nazwa_pliku_zrzutu

To narzędzie może tworzyć zrzuty bazy danych MySQL tylko w postaci plików z poleceniami SQL, więc bez względu na rozszerzenie, które wybierzesz dla swojego pliku, w każdym przypadku jego zawartość będzie taka sama. I nie zapomnij sprawdzić uprawnień do zapisu katalogu, w którym będzie się on znajdować, przed wyeksportowaniem informacji z MySQL, aby możliwe było utworzenie pliku.

Jeśli nagle potrzebujesz zrobić zrzut ze wszystkimi bazami danych na serwerze, użyj następującej opcji polecenia:

mysqldump -u nazwa użytkownika -p --all-databases > ścieżka_i_nazwa_pliku_zrzutu

Aby zrzucić tylko kilka konkretnych baz danych, musisz wywołać mysqldump z następującymi opcjami:

mysqldump -u nazwa użytkownika -p --databases nazwa_bazy1, nazwa_bazy_danych2, ... > ścieżka_i_nazwa_pliku_zrzutu

Dzięki temu w każdym przypadku otrzymasz zrzut bazy danych MySQL zawierający polecenia tworzenia struktury zawartych tabel (pól, ich typów, indeksów, kluczy itp.), a także operacje wypełniania ich danymi.

Ta opcja jest odpowiednia tylko do przywracania i kopiowania całych baz danych.

Jak wykonać kopię zapasową niektórych tabel MySQL i uzyskać ich dane w czytelnej formie, zostanie omówione w dalszej części.

Zrzucanie tabeli MySQL i eksportowanie danych

Aby utworzyć zrzut niektórych tabel bazy danych MySQL, potrzebujemy tego samego narzędzia mysqldump, wywoływana z następującymi parametrami:

mysqldump -u nazwa użytkownika -p nazwa_bazy_danych nazwa_tabeli1, nazwa_tabeli2, ... > ścieżka_i_nazwa_pliku_zrzutu

Nawet podczas wywoływania mysqldump możesz określić wymagane tabele jako wartość parametru --tabele, przy użyciu którego parametr --bazy danych zostaną zignorowane:

mysqldump -u nazwa użytkownika -p --databases nazwa_bazy1, nazwa_bazy_danych2 --tables nazwa_tabeli1, nazwa_tabeli2, ... > ścieżka_i_nazwa_pliku_zrzutu

Powyższy przykład wyświetli następujący błąd:

Mysqldump: Wystąpił błąd: 1049: Nieznana baza danych "database_name1" podczas wybierania bazy danych

Jak widać, zostanie użyta tylko najnowsza baza danych z listy podanych. W zasadzie to zachowanie jest dość logiczne, ponieważ. wszystkie bazy danych mogą nie zawierać określonych tabel.

OK, mamy zrzut tabel bazy danych MySQL. Może służyć do ich przywracania lub kopiowania wraz ze strukturą.

Ale co, jeśli potrzebujesz tylko informacji w nich przechowywanych i najlepiej w czytelnej formie, aby móc je wysłać do menedżera i przeglądać w zwykłym edytorze tekstu lub arkusza kalkulacyjnego? MySQL również ma do tego narzędzia.

Opcja wywołania narzędzia pomoże nam osiągnąć nasze cele. mysql z konsoli z określonymi parametrami:

Mysql -u nazwa_użytkownika -p nazwa_bazy_danych -e "SELECT * FROM nazwa_tabeli"

To polecenie pozwoli nam wykonać zapytanie do wymaganej bazy danych i wyprowadzić wynik do konsoli bez przechodzenia do wiersza poleceń MySQL.

Otóż, aby nie wyprowadzać danych do konsoli, ale zapisać je do pliku, należy uzupełnić polecenie w następujący sposób:

Mysql -u nazwa użytkownika -p -e "SELECT * FROM nazwa_tabeli" > ścieżka_i_nazwa_pliku

Dzięki tym konstrukcjom możemy uzyskać nie tylko dane zapisane we wszystkich polach tabeli, ale także w konkretnych. W tym celu zamiast znaku wieloznacznego (*) wystarczy zarejestrować wymagane znaki oddzielone przecinkiem.

W efekcie na wyjściu otrzymamy zwykły plik tekstowy, który będzie zawierał nazwy pól w postaci nagłówka oraz informacje o nich dla wszystkich rekordów. Można go otworzyć w normalny sposób Edytor tekstu, bez względu na to, jaką rozdzielczość nadasz mu podczas tworzenia.

Jeśli chcesz wyeksportować dane z bazy danych MySQL w formacie xls lub csv, aby wynikowy plik był poprawnie wyświetlany w edytory arkuszy kalkulacyjnych, to jak to zrobić zostanie omówione nieco później 🙂

Tworzenie kopii zapasowych i wyodrębnianie danych z bazy danych MySQL za pomocą zapytań

Rozmawialiśmy o tym, jak zrzucić bazę danych MySQL - jedną i kilka, a także ich poszczególne tabele. Ale czasami w praktyce zdarzają się sytuacje, w których trzeba wyeksportować zestaw danych, który nie jest ograniczony do jednej tabeli. Lub musisz wybrać tylko niektóre dane z tabeli.

Szczególnie często spotykają się z tym deweloperzy projektów korporacyjnych, gdy menedżerowie proszą ich o dostarczenie różnego rodzaju danych statystycznych. Lub gdy potrzebujesz wykonać kopię zapasową określonej części stołu w celu jej szybkiego przywrócenia.

Do tworzenia kopii zapasowych potrzebujemy tego samego narzędzia mysqldump, który należy nazwać tak:

Mysqldump -u nazwa użytkownika -p nazwa_bazy_danych nazwa_tabeli --where "wyszukaj" > ścieżka_i_nazwa_pliku_zrzutu

W efekcie otrzymamy plik z poleceniami SQL do tworzenia tabeli wraz z całą jej strukturą, która po utworzeniu zostanie wypełniona wybranymi za pomocą zapytania wyszukiwawczego informacjami.

Jeśli potrzebujemy tylko uzyskać dane przechowywane w jednej lub kilku tabelach, musimy zmodyfikować polecenie użyte w poprzednim przypadku, aby wybrać wszystkie dane w tabeli, z kilkoma wyjaśnieniami:

Mysql -u nazwa użytkownika -p -e "SELECT * FROM nazwa_tabeli WHERE wyszukiwanie" > ścieżka_i_nazwa_pliku

Jak rozumiesz, oprócz różnych wyjaśnień określonych we wniosku za pomocą dyrektywy GDZIE, możesz użyć innych konstrukcji SQL: PRZYSTĄP, UNIA itp.

Można zbierać dowolne statystyki 🙂

Tę samą akcję można również wykonać z wiersza poleceń MySQL za pomocą następującego polecenia:

SELECT * FROM database_table GDZIE wyszukiwanie INTO OUTFILE "ścieżka_i_nazwa_pliku";

To polecenie jest przeznaczone tylko do tworzenia plików z wynikami selekcji. Co więcej, wyniki można nie tylko eksportować do plików, ale także zapisywać do zmiennych, a dane wyjściowe można formatować na różne sposoby.

Jeśli tak jest w Twoim przypadku, pełną listę parametrów i opcji wywoływania tego polecenia znajdziesz tutaj - https://dev.mysql.com/doc/refman/5.7/en/select-into.html

Pod koniec jego krótka dygresja dla mysqldump chcę dać opcję wywołania polecenia z listą parametrów w celu utworzenia zoptymalizowanego zrzutu bazy danych i tabel MySQL, przywrócenie bazy danych i poszczególnych tabel z których zajmie mniej czasu niż przy normalnym wywołaniu:

mysqldump -u nazwa_użytkownika -h Host_lub_IP_serwera_MySQL -p --no-autocommit --opt nazwa_bazy_danych > ścieżka_i_nazwa_pliku_zrzutu;

Na potrzeby eksperymentu użyłem ta opcja w celu zrzucenia 143 MB bazy danych MySQL. Kolejne przywracanie trwało 59 sekund w porównaniu do 1 minuty i 3 sekund, gdy baza danych została przywrócona ze zrzutu wykonanego przez wywołanie mysqldump bez specjalnych opcji.

Zgadzam się, że to drobiazg. Ale to tylko w przypadku określonej ilości danych. Jeśli użyjesz tej techniki podczas tworzenia zrzutu większego niż 1 GB, różnica będzie bardziej znacząca.

Jeśli napotkasz taką sytuację, nie zapomnij najpierw spakować zrzutu bazy danych MySQL do archiwum. tar.gz jest najlepszy. Wtedy powrót do zdrowia zajmie jeszcze mniej czasu.

Eksportuj dane z MySQL do plików Excel i csv

Nie na próżno połączyłem w jednym bloku informacje o wyprowadzaniu informacji z MySQL w te dwa formaty, ponieważ są one bardzo podobne, są używane mniej więcej w ten sam sposób (do strukturyzacji informacji w postaci tabel) i te same polecenia będą wywoływane do eksportu.

Jak wiesz, jedyną istotną różnicą między tymi formatami jest to, że rozszerzenia xls i xlsx mają pliki utworzone w programie. Microsoft Office Excel, który działa tylko pod Windows, natomiast pliki csv są bardziej wszechstronne i operacje na nich są możliwe w wielu edytorach.

Nie oznacza to, że xls jest nigdzie indziej niż Microsoft Biuro Excel, nie chce się otworzyć. Ten sam OpenOffice potwierdza coś przeciwnego.

Ale dla tej możliwości to wsparcie musi być obecny w Produkt oprogramowania. Pliki csv są czytelne nawet w zwykłym edytorze tekstu, takim jak Notatnik, tylko ta forma nie będzie w pełni czytelna.

Na początek tylko wyniki można wyeksportować do xls lub csv Zapytania SQL, z którym nauczyliśmy się pracować wcześniej, ponieważ całej bazy danych w jednym pliku nie będzie można wyświetlić w jednej operacji.

Po pierwsze nie jest to optymalne, ponieważ taki plik prawdopodobnie nie otworzy się z dużą ilością informacji przechowywanych w bazie danych. Po drugie, nie jest jasne, jak podzielić informacje na tabele i pola w pliku.

Nie, oczywiście jest to możliwe, ale jest mało prawdopodobne, że zrobi to jedna komenda i generalnie jest mało prawdopodobne, żeby ktoś to zrobił w konsoli. Myślę, że do tych celów potrzebne będzie specjalne oprogramowanie, a przynajmniej skrypt.

Jeśli nagle wiesz, w jaki sposób możesz wyeksportować informacje z całej bazy danych MySQL do jednego lub więcej plików xls w konsoli naraz, to napisz o tym w komentarzach. Myślę, że czytanie o tym przyda się wielu.

Jeśli więc mówimy o tym, jak wyeksportować dane z MySQL do xls i csv, możesz to zrobić bezpośrednio w konsoli serwera za pomocą narzędzia mysql lub w pracy, którą przedstawiłem w poprzednim artykule.

Zacznijmy w kolejności.

Możesz eksportować dane z bazy danych MySQL do formatów csv i xls bezpośrednio w konsoli serwera za pomocą poniższych poleceń.

Na linux systemy:

Mysql -u nazwa użytkownika -d nazwa_bazy_danych -p -e "WYBIERZ * Z dbtable;" | sed "s/"/\"/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"> ścieżka_i_nazwa_pliku. csv

Zasadniczo, jeśli jest to absolutnie konieczne, możesz użyć tego polecenia, aby wyeksportować dane MySQL do pliku Excel. Ale szczerze mówiąc, nie zajmowałem się danymi w praktyce, a co w końcu wyjdzie - nie mam pojęcia, bo. Pracuję teraz pod Windowsem. Jeśli używasz tego polecenia pod Linuksem, napisz w komentarzach o wynikach swojej pracy. Myślę, że informacja zainteresuje wszystkich.

Na Okna:

Eksport danych z tabel MySQL do csv za pomocą powyższego polecenia niestety w tym przypadku się nie powiedzie, ponieważ Windows, w przeciwieństwie do Linuksa, nie ma wbudowanego polecenie konsoli do pracy ze strumieniami, który jest sed na Linuksie.

Zainstaluj go, oczywiście, możesz, ale za dużo kłopotów. Alternatywnie możesz również użyć CygWin to emulator konsoli Linux dla systemów Windows.

Cóż, jeśli już to masz zainstalowane. W przeciwnym razie wyeksportowanie danych z bazy MySQL w wybrany sposób sprawi nam zbyt wiele kłopotów.

Ale wyodrębnienie informacji do pliku xls jest tak proste, jak 5 kopiejek 🙂 Bardzo łatwo uruchomić go w następujący sposób, który osobiście próbowałem:

Mysql -u nazwa użytkownika -d nazwa_bazy_danych -p -e "WYBIERZ * Z dbtable;" > ścieżka_i_nazwa_pliku.xls

Ten plik został otwarty w programie Microsoft Office Excel bez żadnych problemów. Jedyną rzeczą jest to, że podczas otwierania wyświetlało się ostrzeżenie, że rzeczywisty format otwieranego pliku różni się od określonego rozszerzenia.

Ale podczas potwierdzania akcji dokument otwierał się bez trudności - wszystkie informacje zostały podzielone na komórki w formie, w jakiej były przechowywane w samej tabeli.

Nie wiem, może przy wykonywaniu jakichś konkretnych czynności w Microsoft Office Excel pojawią się problemy w przyszłości, nie kopałem tak głęboko. Przynajmniej przy zwykłym widoku danych nie natknąłem się na nic niezwykłego.

Jeśli napotkasz jakiekolwiek problemy w procesie korzystania z pliku xls wyeksportowanego z MySQL, czy to w tym programie, czy w innych, daj mi znać w komentarzach.

W sposób opisany powyżej możesz w zasadzie wyeksportować zawartość bazy danych MySQL do pliku csv. Ale wtedy dane z różnych pól tabeli zostaną zapisane zbiorczo, bez separatorów, co może być źle wyświetlane w różne programy do pracy z tabelami, w których zwykle pracują z plikami csv.

OpenOffice nawiasem mówiąc, to nie obchodzi 🙂 Automatycznie rozgraniczał informacje uzyskane po tym, jak wyeksportowaliśmy zawartość bazy danych MySQL do xls. Nie wiem jak on to robi - ale polecam go używać 🙂

Cóż, ten sam Microsoft Office Excel wyświetlał wszystkie informacje odpowiadające jednemu rekordowi w tabeli, zapisując go w jednej komórce bez żadnych separatorów. Myślę, że inne edytory arkuszy kalkulacyjnych zrobią to samo.

Dlatego eksportując bazę danych MySQL do plików csv, musisz to zrobić, oddzielając informacje znakami specjalnymi, które są akceptowane przez redaktorów.

A potem płynnie podszedłem do drugiej metody Eksport do MySQL dane w csv i xls, czyli do korzystania z wiersza poleceń MySQL.

Tak więc, aby w ten sposób wyeksportować dane MySQL do pliku csv, potrzebujemy następującego polecenia:

SELECT * FROM database_table INTO OUTFILE "ścieżka_i_nazwa_pliku.csv" POLA ZAKOŃCZONE PRZEZ "," ZAKOŃCZONE PRZEZ """ LINIE ZAKOŃCZONE PRZEZ "\n";

W wyniku jego wykonania otrzymasz plik csv wzdłuż ścieżki określonej podczas wywoływania, który otworzy się poprawnie w większości nowoczesnych edytorów arkuszy kalkulacyjnych. Na wszelki wypadek przypominam, żebyś uciekał wydane polecenie potrzebne tylko po połączeniu z bazą danych MySQL.

To polecenie doskonale nadaje się również do eksportowania danych MySQL do pliku xls w celu prawidłowego wyświetlania w programie Microsoft Office Excel. Tylko w tym przypadku nie potrzebujemy separatorów, ponieważ będą zakłócać podział informacji na komórki:

SELECT * FROM database_table INTO OUTFILE "ścieżka_i_nazwa_pliku.xls";

Jednak w praktyce nie wszystko jest tak proste, jak opisałem. Podczas wykonywania polecenia w konsoli może pojawić się następujący błąd uniemożliwiający zakończenie eksportu:

BŁĄD 1290 (HY000): Serwer MySQL działa z opcją --secure-file-priv, więc nie może wykonać tej instrukcji

Jest to spowodowane tym, że twój serwer MySQL został uruchomiony z opcją --bezpieczny-plik-priv. Osobiście napotkałem ten problem ze względu na to, że do pracy w konsoli używam zestawu dystrybucyjnego MySQL zawartego w zestawie WAMP OpenServer, który z kolei uruchamia w ten sposób serwer MySQL.

Problem można rozwiązać na dwa sposoby:

  • Zmień opcje uruchamiania serwera MySQL
  • Zmień ścieżkę na plik końcowy Eksport do MySQL

Pierwsza metoda wydawała mi się zbyt skomplikowana, ponieważ. Musiałbym zagłębić się w konfigurację OpenServera, która nie została napisana przeze mnie ze wszystkimi zaistniałymi okolicznościami 🙂 Dlatego zdecydowałem się pójść w drugą stronę. Jeśli napotkasz podobny problem, powtórz za mną.

Najpierw musisz przejść do wiersza poleceń MySQL i uruchomić jedno z następujących poleceń:

POKAŻ ZMIENNE, TAKIE JAK "secure_file_priv"; WYBIERZ @@GLOBAL.secure_file_priv;

Wynikiem wykonania obu będzie wartość zmiennej globalnej MySQL bezpieczny_plik_prywatny, który zawiera ścieżkę do katalogu, przez który można wykonać operacje eksportu i importu danych MySQL (w przyszłości link do artykułu o imporcie danych).

Tych. podczas używania poleceń WCZYTAJ DANE oraz WYBIERZ… DO WYJŚCIA eksportowane i importowane pliki mogą znajdować się tylko w tym katalogu.

W moim przypadku ta zmienna miała w ogóle ustawioną wartość ZERO, bo Ja, jak już wspomniałem, do pracy w konsoli używam narzędzi MySQL z dystrybucji zawartej w OpenServer. Ta wartość wskazuje, że operacje eksportu i importu danych MySQL przy użyciu określonych poleceń zostały całkowicie zamknięte.

Jak się później okazało, jest to powszechna sytuacja podczas korzystania z pudełkowanych serwerów WAMP i MAMP.

Niestety w moim przypadku nie udało się zastosować zwykłych metod zmiany wartości zmiennych globalnych MySQL:

SET nazwa_zmiennej = wartość;

W efekcie widziałem tylko następujący błąd w konsoli:

BŁĄD 1238 (HY000) w wierszu 1: Zmienna „secure_file_priv” jest zmienną tylko do odczytu.

Wreszcie, aby zmienić wartość zmiennej bezpieczny_plik_prywatny i otworzyć operacje eksportu i importu, musiałem przejść do pliku konfiguracyjnego MySQL mysql.ini, który znajduje się w katalogu głównym dystrybucji MySQL lub można uzyskać do niego dostęp w inny sposób, jeśli MySQL jest dołączony do twojego WAMP/LAMP/ Budowa serwera MAMP.

Przy okazji, jeśli chcesz zmienić ścieżkę do katalogu bufora wymiany plików, musisz zrobić to samo.

W moim przypadku ta zmienna już istniała w konfiguracji, tylko w formie wykomentowanej:

secure-file-priv = "%dprogdir%\\userdata\\temp"

Jeśli go nie masz, napisz go od nowa w dziale (przynajmniej mam go tam).

Odkomentowałem go i postanowiłem wykorzystać w takiej formie, w jakiej został napisany. Tych. podczas eksportowania danych z MySQL i importowania ich z powrotem, moje pliki będą teraz przechowywane w katalogu c:\openserver\userdata\temp\.

Po zmianie konfiguracji (dowolnej, nawiasem mówiąc), nie zapomnij zrestartować serwera lub osobnej usługi, której ustawienia poprawiłeś, jeśli to możliwe, aby zmiany odniosły skutek!

Dla pewności po ponownym uruchomieniu serwera MySQL ponownie wyświetl zmienną bezpieczny_plik_prywatny i skopiuj jego wartość do schowka.

A teraz musimy wywołać polecenie, tak jak na początku, tylko przed nazwą pliku, w którym zostaną zapisane informacje z bazy MySQL, należy wpisać ścieżkę zapisaną w zmiennej, którą zmieniamy w postaci:

SELECT * FROM database_table INTO OUTFILE "value_secure_file_priv\file_name.csv";

Potem w moim przypadku zadziałało eksportowanie danych z MySQL.

Ważny punkt! Jeśli pracujesz z MySQL w systemie Windows, nie zapomnij zmienić "\" na "/" podczas określania ścieżki do pliku, w przeciwnym razie błąd z --bezpieczny-plik-priv i tak nadal będzie się pojawiać.

Ten artykuł o tym, jak zrzucić bazę danych MySQL i jej tabele, a także jak wyprowadzić dane z tabel MySQL do różnych formatów, dobiega końca. Napisz swoją opinię w komentarzach i podziel się wszystkimi opcjami skryptu, z których najczęściej korzystasz w praktyce.

Jeśli podobał Ci się artykuł, możesz podziękować autorowi, przesyłając artykuł ponownie w portale społecznościowe lub finansowo za pomocą poniższego formularza, aby móc opłacić podstawowy hosting.

Powodzenia wszystkim i do zobaczenia wkrótce! 🙂.

PS: jeśli potrzebujesz strony internetowej lub chcesz dokonać zmian w już istniejącej, ale nie ma na to czasu i chęci, mogę zaoferować swoje usługi.

Ponad 5 lat doświadczenia rozwój zawodowy witryny. Pracuj z PHP

Dzień dobry przyjaciele, dzisiaj nauczymy się, jak to zrobić. Po co to jest, możesz zadać pytanie. Głównie eksport bazy danych należy to robić okresowo, aby w sytuacjach awaryjnych nie stracić ważnych dla Ciebie informacji. Eksport będzie małym plikiem, w którym będą przechowywane wszystkie informacje o bazie danych. Do eksport bazy danych musisz przejść do PHPMyAdmin i kliknąć interesującą Cię bazę danych. Następnie zobaczysz w nim wszystkie tabele i bez wchodzenia w nie kliknij przycisk menu o nazwie eksport. Przed Tobą pojawi się następująca strona:


Radzę wybrać szybki sposób eksportuj, a także określ w formacie SQL. Następnie możesz nacisnąć OK. Zobaczysz okno z prośbą o zapisanie pliku.


Zapisujesz plik w miejscu, którego potrzebujesz, najważniejsze jest, aby pamiętać, gdzie go zapisałeś, ponieważ jest to dla nas bardzo ważne.
Dotyczący konwencjonalny sposób eksport. Możesz go również użyć, jeśli tego potrzebujesz, jest ich wiele zaawansowane ustawienia, który można określić podczas eksportowania. Na przykład wybierz niezbędne tabele z bazy danych, określ kodowanie i wiele więcej. Jeśli jesteś zainteresowany tym ustawieniem, możesz to zobaczyć. Ale nie będziemy zagłębiać się w to ustawienie.
Po zapisaniu pliku na komputerze poproszę o usunięcie bazy danych. Jak to zrobić, nie wyjaśnię ci, bo już przez to przeszliśmy. Nie bój się usuwać, zwrócimy wszystko z Tobą na swoje miejsce.
Czas być zajęty import bazy danych. Przejdź do menu importu.


Wybieramy przegląd Twojego komputera i wskazujemy ścieżkę do naszego pliku. I naciśnij OK. Jak widzisz masz błąd. Nie przejmuj się, chodzi o to, że nie zaimportowaliśmy samej bazy danych, a tylko wszystkie jej tabele. Dlatego najpierw utwórz bazę danych, wejdź do niej i kliknij przycisk importu, po wykonaniu wszystkich powyższych czynności. Klikając przycisk OK, odniesiesz sukces, a jeśli zrobiłeś wszystko poprawnie, nie powinny pojawić się żadne błędy.


Jak widać, nasza tabela pojawiła się ponownie na swoim miejscu, a wszystkie dane w niej zawarte zostały zapisane. Teraz rozumiesz, jaka to wspaniała okazja eksport i import bazy danych w PHPMyAdmin. W końcu, jeśli stracisz w jeden dzień wszystkie swoje osiągnięcia na przestrzeni lat, dzięki podany plik Możesz zwrócić wszystko. Z tym żegnam się z tobą wkrótce.

Dzień dobry, koledzy 🙂

Dzisiaj będę dalej przedstawiał Wam pracę z MySQL w konsoli MySQL oraz w linii poleceń MySQL.

Pisałem już artykuły o tym, jak wykonywać podstawowe czynności z danymi MySQL poprzez konsolę oraz jak wykonać kopię zapasową bazy danych MySQL, a także jak eksportować przechowywane w niej informacje.

Logiczną kontynuacją tej historii będzie przywrócenie bazy danych i przechowywanych w niej informacji za pomocą operacji importu bazy danych MySQL. I, co ważne, nadal będziemy to robić za pomocą narzędzia wszystkich twardych programistów - za pośrednictwem konsoli.

Jeśli potrzebujesz instrukcji dotyczących importowania bazy danych przez phpMyAdmin, możesz je znaleźć w artykule na temat. W obecnym artykule nie mam ochoty ponownie tego opisywać, zwłaszcza że dzisiejszy materiał będzie poświęcony wyłącznie importowaniu bazy danych MySQL poprzez konsolę.

Ale zanim zaczniemy przeglądać sposoby i narzędzia, kilka słów o tym, czym jest import bazy danych MySQL, jak to jest i jak najlepiej to zrobić?

Importowanie bazy danych MySQL: co i dlaczego?

Importowanie bazy danych MySQL to operacja, która zapełnia bazę informacjami. W tym przypadku źródłem danych jest plik zrzutu - migawka innej bazy danych, tworzona automatycznie podczas operacji eksportu lub specjalnie przygotowany skrypt SQL.

Import oraz eksport bazy danych MySQL, w bazie danych przechowywane są dwa rodzaje informacji:

  1. strukturę bazy danych, jej tabele i przechowywane w nich dane (potocznie zwane zrzutem bazy danych);
  2. tylko dane przechowywane w tabeli lub zebrane za pomocą WYBIERAĆ upraszanie.

W tym artykule omówimy obie opcje.

Wyzdrowieć Zrzut MySQL bazy danych wraz z jej strukturą i wszystkimi przechowywanymi informacjami, jak już wspomniano, potrzebny jest plik zrzutu bazy danych, który jest plikiem tekstowym o dowolnym rozszerzeniu (można go najpierw spakować do archiwum w celu zmniejszenia rozmiaru), zawierający Polecenia SQL do tworzenia samej bazy danych i tabel, a także wypełniania ich informacjami.

Dlatego w celu przywrócenia bazy danych MySQL ze zrzutu należy wykonać polecenia zawarte w pliku.

W przypadku normalnego odzyskiwania danych takie zawiłości nie są konieczne. Wystarczy mieć do dyspozycji plik testowy, w którym informacje będą ustrukturyzowane w taki sam sposób jak w tabeli bazy danych: liczba kolumn z informacjami odpowiada liczbie atrybutów wpisu w tabeli.

Do tych celów zwykle plik txt, dane, w których zostaną podzielone, lub pliki utworzone w specjalnych edytorach arkuszy kalkulacyjnych (Microsoft Office Excel, OpenOffice itp.), które mają inne rozszerzenie: xls, csv, odt itp.

Te formaty są nawet preferowane, ponieważ. podczas ich tworzenia, ograniczniki danych są dodawane automatycznie przez redaktorów i nie ma potrzeby ich oddzielnego wprowadzania, jak w przypadku zwykłego pliku tekstowego.

Dodawanie danych do MySQL: Narzędzia

Jeśli chodzi o narzędzia do importu baz danych MySQL, to mogę powiedzieć, że obecnie są ich trzy.

Wymienię je, zaczynając od najniższego poziomu, kończąc na najwyższym (pod względem wykorzystania wszelkiego rodzaju powłok i dodatków):

  1. Konsola serwera i wiersz poleceń MySQL;
  2. Skrypty napisane w językach programowania, które pozwalają zapisywać dane do MySQL za pomocą narzędzi językowych;
  3. Gotowe programy, które zapewniają wizualny interfejs do pracy z bazą danych (ten sam phpMyAdmin, MySQL WorkBench, MySQL Manager itp.).

Myślę, że kolejność instrumentów nie będzie budzić wątpliwości, bo. Narzędzia języka programowania zwykle działają w oparciu o polecenia konsoli MySQL, a programy oparte są na skryptach lub bezpośrednio z wiersza poleceń MySQL.

Tak czy inaczej, konsola stoi na czele wszystkiego, a reszta narzędzi jest w rzeczywistości jej emulatorami.

Dlatego korzystanie z konsoli podczas importowania danych do MySQL pozwala na ominięcie różnego rodzaju ograniczeń nałożonych przez ustawienia języków programowania na serwer internetowy i same programy (które, nawiasem mówiąc, nie zawsze można zmienić).

Dzięki temu wypełnianie bazy danych MySQL poprzez konsolę może być nie tylko szybsze, ale także w zasadzie umożliwić tę operację, ponieważ skrypty i programy mają tendencję do przerywania importu po osiągnięciu maksymalnego czasu wykonania skryptu lub w ogóle się nie uruchamiają ze względu na rozmiar pobranego pliku.

Myślę, że każdy, kto kiedykolwiek próbował przesłać zrzut do dużej bazy danych MySQL za pomocą phpMyAdmin, rozumie, o czym mówię.

Często te ograniczenia są przyczyną błędów podczas importowania bazy danych MySQL, których nigdy nie zobaczysz podczas korzystania z konsoli.

Oczywiście nie są one stałe i można je zmieniać, ale jest to dodatkowy ból głowy, który notabene może okazać się nie do rozwiązania dla zwykłych użytkowników.

Mam nadzieję, że zmotywowałem Cię do importu bazy danych MySQL poprzez konsolę (do tego zarówno jej struktury, jak i osobnych danych).

I z tą pozytywną nutą przechodzimy do długo oczekiwanej praktyki i rozważamy metody i polecenia przesyłania danych do bazy danych na konsoli.

Jak przywrócić bazę danych MySQL ze zrzutu za pomocą konsoli?

Tak więc, aby wdrożyć zrzut MySQL z konsoli, istnieją dwa sposoby:

  1. za pomocą polecenia w wierszu poleceń MySQL;
  2. w samej konsoli serwera.

Zacznijmy w kolejności.

Tak więc, aby zaimportować zrzut bazy danych MySQL do istniejącego repozytorium za pośrednictwem , najpierw musimy go uruchomić i wybrać żądaną bazę danych, do której prześlemy nasz zrzut.

Realizacja tych działań jest szczegółowo opisana w artykule pod linkiem powyżej, więc jeśli potrzebujesz ich opisu, weź go stamtąd, ponieważ. Nie chcę ich powielać w drugiej rundzie.

Po wykonaniu powyższych czynności wprowadź następujące polecenie w MySQL Shell:

Ścieżka źródłowa_i_nazwa_pliku_zrzutu;

Pozostaje nam tylko przestudiować komunikaty w konsoli o postępie operacji zawartych w zrzucie.

Bez uprzedniego przełączenia się na żądaną bazę danych, po połączeniu się z serwerem MySQL w konsoli, zrzut można zaimportować za pomocą następującego polecenia:

Mysql -u nazwa użytkownika -p nazwa_bazy danych< путь_и_имя_файла_дампа

To wszystko. Najważniejsze jest, aby poczekać na zakończenie importu, jeśli plik jest bardzo duży. Zakończenie zrzutu można ocenić po tym, kiedy konsola serwera będzie ponownie dostępna.

W rzeczywistości jest to wada Ta metoda w porównaniu do poprzedniego, ponieważ w pierwszym można obserwować operacje wykonywane na bazie danych podczas importu, w drugim nie.

Jeśli plik zrzutu jest spakowany do archiwum, to podczas pobierania będziesz musiał go po drodze rozpakować.

W systemie Linux można to zrobić w następujący sposób:

Gunzip > [nazwa_pliku_archiwum.sql.gz] | mysql -u -p

V Okna standardowe w konsoli nie ma narzędzia do rozpakowywania archiwum, więc trzeba je dodatkowo zainstalować.

Jak widać, importowanie zrzutu MySQL za pomocą konsoli to bardzo prosta operacja, którą można wykonać za pomocą jednego polecenia. Więc nie musisz być programistą, aby wykonać tę procedurę.

Jeśli nagle nie wiesz, jak uruchomić konsolę serwera, to możesz znaleźć tę informację w artykule na temat wiersza poleceń MySQL, do którego link miałem już wcześniej.

Nawiasem mówiąc, za pomocą opisanych metod można również zaimportować tabelę MySQL, a nie całą bazę danych. W takim przypadku przesłany zrzut musi zawierać operacje tworzenia go i wypełniania danymi.

Ładowanie danych do bazy danych MySQL z pliku w konsoli

Rozmawialiśmy o przywróceniu bazy danych MySQL ze zrzutu w konsoli. Teraz nadszedł czas, aby dowiedzieć się, jak w ten sam sposób importować dane z plików, w tym z xls i csv do bazy danych MySQL.

Do tego zadania ponownie mamy te same dwa narzędzia, co w poprzednim przypadku: wiersz poleceń MySQL i konsolę serwera.

Zacznijmy przegląd ponownie w kolejności.

Tak więc, aby zaimportować plik w linii poleceń MySQL, uruchamiamy go ponownie i przechodzimy do bazy danych, do której zostaną załadowane dane.

LOAD DATA INFILE "ścieżka_i_nazwa_pliku_zrzutu" DO TABELI `database_table` KOLUMNY ZAKOŃCZONE PRZEZ "," ZAKOŃCZONE PRZEZ "\"" LINIE ZAKOŃCZONE PRZEZ "\n";

Nie zapominaj, że jeśli serwer MySQL został uruchomiony z opcją --bezpieczny-plik-priv(co często się zdarza) przy użyciu MySQL dystrybucje zawarte w kompilacjach WAMP/MAMP), nazwa pliku musi być określona z uwzględnieniem zmiennej systemowej bezpieczny_plik_priv.

Aby zaimportować bazę danych MySQL w konsoli serwera bez wchodzenia do powłoki MySQL, potrzebujemy narzędzia mysqlimport, który jest częścią dystrybucji MySQL i następujące wywołanie:

mysqlimport -u nazwa użytkownika -p nazwa_bazy_danych nazwa_i_ścieżka_do_importu_pliku

To narzędzie jest odpowiednikiem polecenia SQL WCZYTAJ PLIK DANYCH, tylko wiersz poleceń. Ale można się zastanawiać, dlaczego więc wśród parametrów jego wywołania nie podano tabeli, do której zostaną załadowane dane z pliku?

Faktem jest, że mysqlimport po prostu fizycznie nie ma tego parametru. Zamiast tego w nazwie importowanego pliku musi znajdować się nazwa tabeli, do której zostaną załadowane dane.

Tych. jeśli chcesz importować z Excel arkusz kalkulacyjny w tabeli MySQL użytkownicy, wtedy twój plik powinien mieć nazwę użytkownicy.xls.

Rozszerzenie importowanego pliku, jak już wspomniano, może być dowolne.

Dzięki mysqlimport możliwe jest również jednoczesne wgrywanie wielu plików xls lub csv do MySQL. Aby dane dotarły do ​​miejsca przeznaczenia, nazwy plików i tabel bazy danych, podobnie jak w poprzednim przykładzie, również muszą się zgadzać.

Jeśli nagle kolumny w importowanym pliku nie są w tej samej kolejności co kolumny tabeli bazy danych, to w celu wyjaśnienia ich kolejności należy użyć opcji --columns w następującej postaci:

Mysqlimport -u nazwa_użytkownika -p nazwa_bazy_danych --kolumny kolumna1, kolumna2, ... nazwa_pliku_importu i ścieżka

Oczywiście w moich przykładach nie brałem pod uwagę pełna lista parametry mysqlimport, ponieważ niektóre z nich są bardzo specyficzne i rzadko stosowane w praktyce.

Jeśli chcesz się z nimi zapoznać, to ich pełna lista jest dostępna tutaj - https://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html

Funkcje ładowania danych do bazy danych MySQL ze zrzutu

Jeśli chcesz, aby proces importowania dużej bazy danych MySQL przebiegał szybciej, musisz utworzyć zrzut bazy danych za pomocą opcje specjalne komendy mysqldump, o których pisałem w poprzednim artykule o eksporcie bazy danych MySQL, do którego link zamieściłem wcześniej w tekście.

Niestety, same polecenia importu bazy danych MySQL nie mają takich opcji.

Jedyną rzeczą jest zwiększenie prędkości podczas ładowania dużego zrzutu bazy danych, możesz skorzystać z następującej funkcji.

1. Otwórz plik zrzutu (najlepiej w menedżery plików, bo zwykli redaktorzy mogą po prostu umrzeć z dużych plików).

2. Na początku pliku piszemy następujące wiersze:

SET Foreign_key_checks = 0; ZESTAW UNIQUE_CHECKS = 0; USTAW AUTOCOMMIT = 0;

Notatka! Może już tam są lub zostały skomentowane (wiele programów, które robią zrzuty, może je dodawać automatycznie)

3. Na końcu pliku napisz akcje odwrotne:

SET Foreign_key_checks = 1; ZESTAW UNIQUE_CHECKS = 1; USTAW AUTOCOMMIT = 1;

Nawiasem mówiąc, te polecenia pomogą nie tylko przyspieszyć proces importu, ale także sprawią, że będzie to możliwe.

Faktem jest, że jeśli kiedykolwiek zaglądałeś do pliku zrzutu w celu zaimportowania bazy danych MySQL, mogłeś zauważyć, że operacja ustawiania struktury załadowanych tabel wygląda tak:

DROP TABLE IF EXISTS `klienci`; CREATE TABLE `klienci` (...);

Tych. w bazie danych dokonuje się wyszukiwania tabeli o tej samej nazwie, co importowana, a jeśli takowa zostanie znaleziona, jest usuwana i ponownie tworzona.

A jeśli nagle istniejąca tabela zostanie połączona za pomocą kluczy obcych z innymi, wówczas całe obciążenie zawiedzie.

Więc wyłączenie sprawdzania istnienia klucz obcy i inne to także świetna gwarancja pomyślnego zakończenia procesu importu bazy danych MySQL.

Funkcje importowania csv do bazy danych MySQL i innych plików

Podczas ładowania danych do bazy danych MySQL z pliki tekstowe może być również konieczne wyłączenie kluczy obcych.

Co więcej, w przeciwieństwie do poprzedniej sytuacji, w tym przypadku nie będzie działać zapisywanie dyrektyw do pliku, ponieważ Znajdujące się w nim polecenia SQL nie będą akceptowane i wykonywane.

W poprzednim artykule o eksporcie bazy danych MySQL wspomniałem już, jak to zrobić za pomocą następującej operacji w wierszu poleceń MySQL:

USTAW FOREIGN_KEY_CHECKS=0;

Nie wspomniałem tam jednak, że zmienna systemowa MySQL FOREIGN_KEY_CHECKS ma dwa znaczenia: globalne i sesyjne (dla bieżącej sesji).

Globalna wartość zmiennych MySQL obowiązuje dla każdej akcji podjętej na serwerze MySQL, włącznie z ponownym uruchomieniem serwera. Następnie wartości zmiennych zostaną zresetowane i zostaną im przypisane wartości domyślne.

Wartość sesji zmiennej systemowej MySQL jest ustawiana tylko na czas trwania sesji użytkownika z serwerem MySQL. Sesja lub sesja rozpoczyna się, gdy klient łączy się z serwerem, na którym przypisywany jest mu unikalny identyfikator połączenia, a kończy się po rozłączeniu z serwerem, co może nastąpić w dowolnym momencie (na przykład po przekroczeniu limitu czasu).

Dlaczego zdecydowałem się o tym pamiętać?

Ponieważ wykonując polecenia załadowania pliku do bazy danych MySQL przez konsolę serwera, bez wchodzenia do powłoki MySQL, stwierdziłem, że nie działa wyłączenie sprawdzania kluczy obcych w opisany wcześniej sposób.

Konsola nadal pokazywała komunikat o błędzie spowodowany obecnością kluczy obcych w tabeli.

A powstało z tego powodu, że powyższe polecenie wyłączyło sprawdzanie istnienia kluczy obcych w ramach sesji, a nie globalnie, co oprócz określona metoda, można również wykonać w następujący sposób:

SET SESSION nazwa_zmiennej = wartość_zmiennej; SET @@session.nazwa_zmiennej = wartość_zmiennej; SET @@nazwa_zmiennej = wartość_zmiennej;

W powyższych poleceniach zmienna jest wyraźnie oznaczona jako zmienna sesji.

A ponieważ załadowałem plik csv do tabeli MySQL przez konsolę serwera, bez bezpośredniego połączenia z serwerem MySQL, sesja nie została utworzona, w ramach której miałaby działać moja sesyjna wartość zmiennej.

Skończyło się na ustawieniu globalnej wartości FOREIGN_KEY_CHECKS i import się powiódł.

Możesz to zrobić na jeden z następujących sposobów:

SET GLOBAL nazwa_zmiennej = wartość_zmiennej; SET @@global.nazwa_zmiennej = wartość_zmiennej;

Po zmianie wartości, aby sprawdzić, czy zmiany odniosły skutek, nie jest zbyteczne przeglądanie wartości zmiennej. Aby wyświetlić jednocześnie sesję i wartości globalne, użyj następującego polecenia:

SELECT @@GLOBAL.foreign_key_checks, @@SESSION.foreign_key_checks;

To kończy dzisiejszy artykuł na temat importowania bazy danych MySQL. Podziel się wrażeniami i własnym doświadczeniem w komentarzach. Myślę, że wielu będzie zainteresowanych twoim doświadczeniem.

Do zobaczenia wkrótce! 🙂.

PS: jeśli potrzebujesz strony internetowej lub chcesz dokonać zmian w już istniejącej, ale nie ma na to czasu i chęci, mogę zaoferować swoje usługi.

Ponad 5 lat doświadczenia profesjonalne tworzenie stron internetowych. Pracuj z PHP, opencart,

Podobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
tak
Nie
Dziekuję za odpowiedź!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję Ci. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl+Enter a my to naprawimy!