Manual de referință MySQL. MySQLdump: descărcați, lucrați cu mysqldump, exemple

Salutări, prieteni! 🙂

Astăzi am decis să vorbesc în continuare despre lucrul cu MySQL în consolă și să fiu atent la procedura de export a unei baze de date MySQL.

În acest articol, voi vorbi despre cum să descărcați baza de date MySQL, precum și despre cum să încărcați date din MySQL într-un fișier Excel și format csv.

Vom lua în considerare diferite opțiuni pentru extragerea de informații din: crearea unui dump de una și mai multe baze de date, exportarea datelor din tabele separate și rezultatele arbitrare. SELECTAȚI cereri.

Și, de asemenea, să vorbim despre cum să afișați datele din baza de date MySQL în consola serverului și linia de comandă MySQL.

În acest articol, nu voi vorbi despre cum să exportați date folosind phpMyAdmin și alte instrumente vizuale.

În primul rând, pentru că există deja suficient material în rețea pe această temă. Mai mult, material de înaltă calitate, pe care nu îl ard cu dorința de a copia și lipi.

Și, în al doilea rând, eu însumi am luat în considerare pe scurt procesul de ieșire a informațiilor dintr-o bază de date MySQL într-un fișier SQL într-unul dintre articolele mele, despre care am vorbit.

Deci, dacă nu sunteți un dezvoltator profesionist sau un administrator de sistem care ar putea găsi informații utile despre lucrul cu consola și ați venit doar pentru instrucțiuni despre exportul bazei de date în phpMyAdmin, atunci vă puteți limita la a citi informațiile din linkul de mai sus.

Vreau să mă înțelegi corect: nu vreau să te jignesc în niciun fel, ci vreau doar să-ți petreci timpul cu maximum de beneficiu pentru cauză și să obții ceea ce căutai.

Aceasta încheie partea introductivă și trecem la o prezentare generală a comenzilor consolei pentru crearea unui dump al bazei de date MySQL, pe care am decis să o sortez după cantitatea de date stocate: de la exportul întregii baze de date la tabele individuale și rezultatele interogărilor arbitrare. .

Crearea unui dump a unei baze de date MySQL prin consolă

Vreau să fac o mică precizare chiar de la început.

Baza de depozitare este un fișier cu un set de comenzi SQL care, atunci când este lansat, vă permite să creați baze de date și tabele, precum și să le completați cu informații. Un dump este necesar pentru cei care doresc să descarce o bază de date MySQL pentru a o copia pe un alt server sau într-unul existent.

De asemenea, dacă cineva nu cunoaște, o copie de rezervă a bazei de date MySQL este, de fapt, dump-ul ei realizat într-o anumită perioadă de timp, ceea ce vă permite să restaurați structura și datele bazei de date dacă este necesar.

Export de date- este doar extragerea de informații din tabele sub formă de text pentru a lucra în continuare cu editorii de text sau grafice.

Prin urmare, comenzile pentru aceste acțiuni vor fi ușor diferite.

Pentru a crea un dump de bază de date, MySQL are un utilitar încorporat numit mysqldump, pentru a fi utilizat în afara liniei de comandă MySQL în consola serverului sau în alt shell.

Deci, pentru cea mai simplă și cea mai comună opțiune - exportarea datelor dintr-o anumită bază de date în consola MySQL pentru a le transfera pe un alt server sau pe o copie internă, trebuie să rulați următoarea comandă:

mysqldump -u username -p database_name > path_and_dump_file_name

Acest utilitar poate crea depozite de baze de date MySQL numai sub formă de fișiere cu comenzi SQL, astfel încât orice extensie alegeți pentru fișierul dvs., în orice caz, conținutul acestuia va fi același. Și nu uitați să verificați permisiunile de scriere ale directorului în care va fi localizat înainte de a exporta informații din MySQL, astfel încât să fie posibilă crearea fișierului.

Dacă dintr-o dată trebuie să faceți un dump cu toate bazele de date de pe server, atunci utilizați următoarea opțiune de comandă:

mysqldump -u nume de utilizator -p --all-databases > path_and_dump_file_name

Pentru a descărca doar câteva baze de date specifice, trebuie să apelați mysqldump cu următoarele opțiuni:

mysqldump -u username -p --databases database_name1, database_name2, ... > calea_și_dump_file_name

Ca urmare, în fiecare caz veți primi un dump al bazei de date MySQL care conține comenzi pentru crearea structurii tabelelor conținute (câmpuri, tipurile acestora, indexuri, chei etc.), precum și operațiuni de completare a acestora cu date.

Această opțiune este potrivită doar pentru restaurarea și copierea bazelor de date întregi.

Cum să faceți copii de siguranță ale anumitor tabele MySQL și să obțineți datele acestora într-o formă care poate fi citită va fi discutat în continuare.

Eliminarea unui tabel MySQL și exportarea datelor

Pentru a crea un dump a anumitor tabele de baze de date MySQL, avem nevoie de același utilitar mysqldump, apelat cu următorii parametri:

mysqldump -u nume de utilizator -p nume_bază de date nume_tabel1, nume_tabel2, ... > cale_și_nume_fișier_dump

Chiar și atunci când apelați mysqldump, puteți specifica tabelele necesare ca valoare a parametrului --Mese, când se folosește parametrul --baze de date vor fi ignorate:

mysqldump -u username -p --databases database_name1, database_name2 --tables table_name1, table_name2, ... > calea_și_dump_file_name

Exemplul de mai sus va afișa următoarea eroare:

Mysqldump: Am primit eroare: 1049: Baza de date necunoscută „nume_base de date1”, la selectarea bazei de date

După cum puteți vedea, va fi folosită doar cea mai recentă bază de date din lista celor specificate. În principiu, acest comportament este destul de logic, deoarece. este posibil ca toate bazele de date să nu conțină tabelele specificate.

Bine, avem un dump din tabelele bazei de date MySQL. Poate fi folosit pentru a le restaura sau a le copia împreună cu structura.

Dar ce se întâmplă dacă trebuie doar să obțineți informațiile stocate în ele și, de preferință, într-o formă care poate fi citită, astfel încât să le puteți trimite managerului și să le vizualizați într-un editor obișnuit de text sau de foi de calcul? MySQL are și instrumentele pentru asta.

Opțiunea de a apela utilitatea ne va ajuta să ne atingem obiectivele. mysql din consola cu anumiți parametri:

Mysql -u nume de utilizator -p nume_bază de date -e „SELECT * FROM nume_tabel”

Această comandă ne va permite să executăm o interogare în baza de date necesară și să trimitem rezultatul în consolă fără a merge la linia de comandă MySQL.

Ei bine, pentru a nu scoate date în consolă, ci pentru a le scrie într-un fișier, trebuie să completați comanda după cum urmează:

Mysql -u nume de utilizator -p -e „SELECT * FROM tablename” > cale_și_nume_fișier

Datorită acestor construcții, putem obține nu numai datele stocate în toate câmpurile tabelului, ci și în unele specifice. Pentru a face acest lucru, în locul caracterului wildcards (*), este suficient să le înregistrați pe cele solicitate separate prin virgulă.

Ca rezultat, vom obține un fișier text obișnuit la ieșire, care va conține numele câmpurilor sub forma unui antet și informații despre acestea pentru toate înregistrările. Poate fi deschis într-un editor de text obișnuit, indiferent de rezoluția pe care o oferiți atunci când îl creați.

Dacă doriți să exportați date din baza de date MySQL în format xls sau csv, astfel încât fișierul rezultat să fie afișat corect în editorii de foi de calcul, atunci cum să faceți acest lucru va fi discutat puțin mai târziu 🙂

Crearea de copii de siguranță și extragerea datelor din baza de date MySQL folosind interogări

Am vorbit despre cum să aruncăm o bază de date MySQL - unul și mai multe, precum și tabelele lor individuale. Dar uneori, în practică, există cazuri când trebuie să exportați un set de date care nu este limitat la un singur tabel. Sau trebuie să selectați doar câteva date din tabel.

Dezvoltatorii de proiecte corporative se confruntă adesea cu acest lucru atunci când managerii le cer să furnizeze tot felul de date statistice. Sau atunci când trebuie să faceți o copie de rezervă a unei anumite părți a tabelului pentru restaurarea sa rapidă.

Pentru backup, avem nevoie de același utilitar mysqldump, care ar trebui numit astfel:

Mysqldump -u username -p dbname table_name --unde „căutare” > cale_și_dump_file_name

Ca rezultat, vom obține un fișier cu comenzi SQL pentru crearea unui tabel cu întreaga sa structură, care, după creare, va fi umplut cu informații selectate folosind o interogare de căutare.

Dacă trebuie doar să obținem datele stocate într-unul sau mai multe tabele, atunci trebuie să modificăm comanda folosită în cazul anterior pentru a selecta toate datele dintr-un tabel, cu doar câteva clarificări:

Mysql -u nume de utilizator -p -e „SELECT * FROM table_name WHERE lookup” > cale_și_nume_fișier

După cum înțelegeți, pe lângă diferitele clarificări specificate în cererea folosind directiva UNDE, puteți folosi alte constructe SQL: A TE ALATURA, UNIUNE etc.

Orice statistică poate fi colectată 🙂

Aceeași acțiune poate fi efectuată și din linia de comandă MySQL cu următoarea comandă:

SELECT * FROM database_table WHERE cautare INTO OUTFILE "path_and_file_name";

Această comandă este concepută doar pentru a crea fișiere cu rezultatele selecției. Mai mult, rezultatele nu pot fi exportate doar în fișiere, ci și scrise în variabile, iar datele de ieșire pot fi formatate în diferite moduri.

Dacă situația de mai sus este cazul dvs., atunci puteți găsi lista completă de parametri și opțiuni pentru apelarea acestei comenzi aici - https://dev.mysql.com/doc/refman/5.7/en/select-into.html

La sfârșitul scurtului meu tur al mysqldump, vreau să ofer o opțiune de a apela o comandă cu o listă de parametri pentru a crea un dump optimizat al bazei de date și a tabelelor MySQL, restabilind baza de date și tabelele individuale din care va dura mai puțin timp decât cu un apel normal:

Mysqldump -u nume de utilizator -h MySQL_server_host_or_IP -p --no-autocommit --opt database_name > path_and_dump_file_name;

De dragul experimentului, am folosit această opțiune pentru a descărca o bază de date MySQL de 143 MB. Restaurarea ulterioară a durat 59 de secunde față de 1 minut și 3 secunde când baza de date a fost restaurată dintr-un dump făcut prin apelarea mysqldump fără opțiuni speciale.

Sunt de acord că acesta este un fleac. Dar aceasta este numai în cazul unei anumite cantități de date. Dacă utilizați această tehnică atunci când creați un dump mai mare de 1 GB, atunci diferența va fi mai semnificativă.

Dacă întâmpinați o astfel de situație, atunci nu uitați să introduceți mai întâi descărcarea bazei de date MySQL într-o arhivă. tar.gz este cel mai bun. Atunci recuperarea va dura și mai puțin timp.

Exportați date din MySQL în fișiere Excel și csv

Nu degeaba am combinat informații despre ieșirea informațiilor din MySQL în aceste două formate într-un singur bloc, deoarece sunt foarte asemănătoare, se folosesc aproximativ în același mod (pentru structurarea informațiilor sub formă de tabele) și se vor apela la export aceleași comenzi.

După cum știți, singura diferență semnificativă dintre aceste formate este că extensiile xls și xlsx au fișiere create în Microsoft Office Excel, care funcționează numai sub Windows, în timp ce fișierele csv sunt mai universale și operațiunile cu acestea sunt posibile în multe editoare.

Acest lucru nu înseamnă că xls nu se va deschide nicăieri, cu excepția Microsoft Office Excel. Același OpenOffice confirmă contrariul.

Dar pentru această posibilitate, acest suport trebuie să fie prezent în produsul software. Fișierele csv pot fi citite chiar și într-un editor de text obișnuit, cum ar fi Notepad, doar că acest formular nu va fi pe deplin lizibil.

Pentru început, puteți exporta doar rezultatele interogărilor SQL în xls sau csv, cu care am învățat să lucrăm mai devreme, deoarece. întreaga bază de date într-un singur fișier nu va putea fi afișată într-o singură operațiune.

În primul rând, acest lucru nu este optim, deoarece este puțin probabil ca un astfel de fișier să se deschidă cu cantități mari de informații stocate în baza de date. Și, în al doilea rând, nu este clar cum să împărțiți informațiile în tabele și câmpuri din interiorul fișierului.

Nu, este, desigur, posibil să faceți acest lucru, dar este puțin probabil ca o comandă să facă acest lucru și, în general, este puțin probabil ca cineva să facă asta în consolă. Cred că în aceste scopuri veți avea nevoie de software special, sau măcar de un script.

Dacă știți brusc cum puteți exporta informații din întreaga bază de date MySQL într-unul sau mai multe fișiere xls din consolă simultan, atunci scrieți despre asta în comentarii. Cred că citirea despre el va fi utilă multora.

Deci, dacă vorbim despre cum să exportăm date din MySQL în xls și csv, atunci o poți face direct în consola serverului prin utilitar mysql sau în, lucrarea cu care v-am prezentat în articolul meu anterior.

Să începem în ordine.

Puteți exporta date din baza de date MySQL în formatele csv și xls direct în consola serverului folosind următoarele comenzi.

Pe linux sisteme:

Mysql -u username -d dbname -p -e "SELECT * FROM dbtable;" | sed "s/"/\"/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > calea_și_numele_fișierului. csv

În principiu, dacă este absolut necesar, puteți utiliza această comandă pentru a exporta datele MySQL într-un fișier Excel. Dar, să fiu sincer, nu m-am ocupat de date în practică și de ceea ce va ieși în cele din urmă - nici idee, pentru că. Lucrez acum sub Windows. Dacă utilizați această comandă sub Linux, vă rugăm să scrieți în comentarii despre rezultatele muncii dvs. Cred că informațiile vor fi de interes pentru toată lumea.

Pe Windows:

Exportarea datelor din tabelele MySQL în csv cu comanda de mai sus, din păcate, nu va reuși în acest caz, deoarece Windows, spre deosebire de Linux, nu are o comandă în consolă încorporată pentru lucrul cu fluxuri, care este sedată în Linux.

Instalați-l, desigur, puteți, dar prea multe probleme. Alternativ, puteți utiliza și CygWin este un emulator de consolă Linux pentru sistemele Windows.

Ei bine, dacă îl aveți deja instalat. În caz contrar, exportarea datelor din baza de date MySQL în modul ales ne va aduce prea multe probleme.

Dar extragerea informațiilor într-un fișier xls este la fel de ușoară ca 5 copeici 🙂 Este foarte ușor să o rulezi în următorul mod, pe care l-am încercat personal:

Mysql -u username -d dbname -p -e "SELECT * FROM dbtable;" > cale_și_nume_fișier.xls

Acest fișier s-a deschis în Microsoft Office Excel fără nicio problemă. Singurul lucru este că la deschidere a fost afișat un mesaj de avertizare că formatul real al fișierului care se deschide diferă de extensia specificată.

Dar la confirmarea acțiunii, documentul s-a deschis fără dificultate - toate informațiile au fost împărțite în celule în forma în care au fost stocate în tabelul însuși.

Nu știu, poate că atunci când efectuez acțiuni specifice în Microsoft Office Excel, vor apărea probleme în viitor, nu am săpat atât de adânc. În viziunea obișnuită a datelor, cel puțin, nu am dat peste nimic neobișnuit.

Dacă întâmpinați probleme în procesul de utilizare a fișierului xls exportat din MySQL, fie în acest program, fie în altele, vă rog să-mi spuneți în comentarii.

În modul descris mai sus, puteți exporta conținutul bazei de date MySQL într-un fișier csv, în principiu. Dar apoi datele din diferite câmpuri ale tabelului vor fi scrise în bloc, fără separatori, care pot fi afișate prost în diverse programe de lucru cu tabele, în care de obicei lucrează cu fișiere csv.

OpenOffice, apropo, nu-i pasă 🙂 A delimitat automat informațiile obținute prin modul în care am exportat conținutul bazei de date MySQL în xls. Nu știu cum o face - dar recomand să-l folosească 🙂

Ei bine, același Microsoft Office Excel a afișat toate informațiile corespunzătoare unei înregistrări din tabel, scriind-o într-o singură celulă fără niciun separator. Cred că și alți editori de foi de calcul vor face același lucru.

Prin urmare, atunci când exportați o bază de date MySQL în fișiere csv, trebuie să faceți acest lucru prin separarea informațiilor cu caractere speciale care sunt acceptate de editori.

Și aici am abordat fără probleme a doua modalitate de a exporta date MySQL în csv și xls, și anume să folosești linia de comandă MySQL.

Deci, pentru a exporta datele MySQL într-un fișier csv în acest fel, avem nevoie de următoarea comandă:

SELECTAȚI * FROM database_table ÎN OUTFILE „path_and_file_name.csv” CÂMPURI TERMINATE CU "," ÎNCHIS DE LINII „”” TERMINATE CU „\n”;

Ca urmare a execuției sale, veți primi un fișier csv de-a lungul căii pe care ați specificat-o când îl apelați, care se va deschide corect în majoritatea editoarelor moderne de foi de calcul. Pentru orice eventualitate, vă reamintesc că trebuie să rulați această comandă numai după conectarea la baza de date MySQL.

Această comandă este, de asemenea, excelentă pentru exportul datelor MySQL în fișierul xls pentru afișarea corectă în Microsoft Office Excel. Doar în acest caz, nu avem nevoie de separatori, pentru că acestea vor interfera cu defalcarea informațiilor în celule:

SELECTAȚI * FROM database_table INTO OUTFILE "path_and_file_name.xls";

Cu toate acestea, în practică, nu totul este atât de simplu pe cât am descris. În timpul executării comenzii, este posibil să întâmpinați următoarea eroare în consolă care împiedică finalizarea exportului:

EROARE 1290 (HY000): Serverul MySQL rulează cu opțiunea --secure-file-priv, așa că nu poate executa această instrucțiune

Este cauzat de faptul că serverul dvs. MySQL a fost pornit cu opțiunea --secure-file-priv. Personal, am întâlnit această problemă din cauza faptului că pentru lucrul în consolă folosesc kitul de distribuție MySQL inclus în kitul WAMP OpenServer, care, la rândul său, pornește serverul MySQL în acest fel.

Există două moduri de a rezolva problema aici:

  • Schimbați opțiunile de pornire a serverului MySQL
  • Schimbați calea către fișierul de export MySQL de destinație

Prima metodă mi s-a părut prea complicată, pentru că. Ar trebui să cercetez configurația OpenServer, care nu a fost scrisă de mine cu toate circumstanțele care au urmat 🙂 Prin urmare, am decis să merg pe a doua cale. Dacă întâmpinați o problemă similară, repetați după mine.

Mai întâi trebuie să accesați linia de comandă MySQL și să rulați una dintre următoarele comenzi:

AFIȘAȚI VARIABILELE CA „secure_file_priv”; SELECTAȚI @@GLOBAL.secure_file_priv;

Rezultatul executării ambelor va fi valoarea variabilei globale MySQL secure_file_priv, care conține calea către directorul prin care pot fi efectuate operațiunile de export și import de date MySQL (în viitor, un link către articolul despre importul de date).

Acestea. atunci când utilizați comenzi INCARCA DATEși SELECTAȚI … ÎN OUTFILE fișierele exportate și importate pot fi localizate numai în acest director.

În cazul meu, această variabilă avea o valoare setată NUL, deoarece Eu, așa cum am spus deja, folosesc utilitatile MySQL din distribuția inclusă în OpenServer pentru a lucra în consolă. Această valoare a indicat că operațiunile de export și import de date MySQL folosind comenzile specificate au fost închise cu totul.

După cum s-a dovedit mai târziu, aceasta este o situație comună când se utilizează servere WAMP și MAMP în cutie.

Din păcate, nu a fost posibil să folosesc metodele obișnuite de modificare a valorilor variabilelor globale MySQL în cazul meu:

SET nume_variabilă = valoare;

Ca rezultat, am văzut doar următoarea eroare în consolă:

EROARE 1238 (HY000) la linia 1: variabila „secure_file_priv” este o variabilă numai pentru citire.

În cele din urmă, pentru a schimba valoarea unei variabile secure_file_privși deschid operațiunile de export și import, trebuia să intru în fișierul de configurare MySQL mysql.ini, care se află în directorul rădăcină al distribuției MySQL, sau poate fi accesat în alt mod dacă MySQL este inclus cu WAMP/LAMP/ Construire server MAMP.

Apropo, dacă doriți să schimbați calea către directorul buffer-ului de schimb de fișiere, va trebui să faceți același lucru.

În cazul meu, această variabilă exista deja în configurație, doar într-o formă comentată:

secure-file-priv = „%dprogdir%\\userdata\\temp”

Dacă nu îl aveți, atunci scrieți-l de la zero în secțiune (cel putin, il am localizat acolo).

L-am decomentat și am decis să îl folosesc în forma în care a fost scris. Acestea. când exportați date din MySQL și le import înapoi, fișierele mele vor fi acum stocate în director c:\openserver\userdata\temp\.

După ce ați schimbat configurația (oricare, apropo), nu uitați să reporniți serverul sau un serviciu separat, ale cărui setări le-ați corectat, dacă este posibil, pentru ca modificările să intre în vigoare!

Pentru a fi sigur, după repornirea serverului MySQL, afișați din nou variabila secure_file_privși copiați valoarea acesteia în clipboard.

Și acum trebuie să apelăm comanda, ca la început, numai înainte de numele fișierului în care vor fi salvate informațiile din baza de date MySQL, scrieți calea stocată în variabila pe care o modificăm în următoarea formă:

SELECTAȚI * FROM database_table INTO OUTFILE „value_secure_file_priv\file_name.csv”;

După aceea, exportul datelor din MySQL a funcționat în cazul meu.

Punct important! Dacă lucrați cu MySQL sub Windows, atunci nu uitați să schimbați „\” în „/” atunci când specificați calea către fișier, altfel o eroare cu --secure-file-priv va continua să apară oricum.

Acest articol despre cum să descărcați baza de date MySQL și tabelele acesteia, precum și despre cum să scoateți date din tabelele MySQL în diferite formate, se termină. Scrieți feedback-ul în comentarii și împărtășiți cu toate opțiunile de script pe care le utilizați cel mai des în practică.

Dacă ți-a plăcut articolul, poți să-i mulțumești autorului republicând articolul pe rețelele de socializare sau financiar folosind formularul de mai jos, astfel încât să poți plăti pentru găzduire.

Succes tuturor și ne vedem curând! 🙂

P.S.: dacă aveți nevoie de un site web sau trebuie să faceți modificări unuia existent, dar nu există timp și dorință pentru asta, îmi pot oferi serviciile.

Peste 5 ani de experiență dezvoltarea site-ului profesional. Lucreaza cu PHP

Acest utilitar vă permite să obțineți un dump (``snapshot") a conținutului unei baze de date sau a unei colecții de baze de date pentru a crea o copie de rezervă sau a transfera date către un alt server de baze de date SQL (nu neapărat un server MySQL). Dump-ul va conține un set de comenzi SQL pentru a crea și/sau popula tabele.

Dacă backup-ul este creat pe server, atunci în loc de utilitarul descris, ar trebui să utilizați mysqlhotcopy . Vezi secțiunea 4.8.6 mysqlhotcopy, Copierea bazelor de date și a tabelelor MySQL.

Shell> baza de date mysqldump sau mysqldump --databases DB1 sau mysqldump --all-databases

Dacă nu specificați nume de tabele sau nu utilizați opțiunile --databases sau --all-databases, atunci se va obține un dump al bazei de date ca întreg (respectiv, toate bazele de date).

O listă de opțiuni acceptate de versiunea dumneavoastră particulară a utilitarului mysqldump poate fi obținută prin rularea comenzii mysqldump --help.

Rețineți că utilitarul mysqldump, folosit fără opțiunile --quick sau --opt, va încărca întregul rezultat în memorie înainte de a descărca rezultatul preluării informațiilor. Acest lucru poate crea probleme la descărcarea unei baze de date mari.

Rețineți că nu ar trebui să utilizați opțiunile --opt sau -e dacă veți folosi o nouă copie a mysqldump pentru a obține dump-ul și apoi o redați pe un server MySQL foarte vechi.

Utilitarul mysqldump acceptă următoarele opțiuni:

Adăugați blocări Adăugați LOCK TABLES înainte de execuție și UNLOCK TABLE după fiecare dump de tabel (pentru a accelera accesul MySQL). --add-drop-table Adăugați o comandă DROP TABLE înainte de fiecare comandă CREATE TABLE. -A, --all-databases Eliminați toate bazele de date. Similar cu opțiunea --databases, specificând toate bazele de date. -a, --all Activează toate opțiunile de creare a obiectelor specifice MySQL. --allow-keywords Permite crearea de nume de coloane care se potrivesc cu cuvintele cheie. Absența conflictelor este asigurată prin adăugarea numelui tabelului ca prefix la fiecare nume de coloană. -c, --complete-insert Folosiți comenzi complete INSERT (cu nume de coloane). -C, --compress Comprima toate informațiile dintre client și server dacă ambele acceptă compresia. -B, --databases Dumpează mai multe baze de date. Rețineți diferența de utilizare: în acest caz nu sunt specificate tabele. Toate numele argumentelor sunt tratate ca nume de baze de date. USE instrucțiunea db_name; incluse în rezultat înainte de fiecare nouă bază de date. --delayed Utilizați comanda INSERT DELAYED când inserați rânduri. -e, --extended-insert Folosiți comanda INSERT cu o nouă sintaxă pe mai multe linii (îmbunătățește compactitatea și performanța instrucțiunilor de intrare). -#, --debug[=option_string] Urmăriți progresul programului (pentru depanare). --help Afișează informații de ajutor și ieși din program. --fields-terminated-by=... --fields-enclosed-by=... --fields-optionally-enclosed-by=... --fields-escaped-by=... --lines- terminated-by=... Aceste opțiuni sunt utilizate împreună cu opțiunea -T și au aceeași semnificație ca instrucțiunile corespunzătoare pentru LOAD DATA INFILE . Vezi secțiunea Vezi secțiunea 6.4.9 Sintaxa instrucțiunii LOAD DATA INFILE. -F, --flush-logs Scoateți datele din jurnalul de sistem din buffer-ul serverului MySQL pe disc înainte de a începe descărcarea. -f, --force, Continuați chiar dacă primiți o eroare SQL în timp ce descărcați un tabel. -h, --host=.. Descarcă datele serverului MySQL pe gazda specificată. Valoarea implicită a gazdei este localhost. -l, --lock-tables. Blocați toate mesele înainte de a începe descărcarea. Tabelele sunt blocate cu o instrucțiune READ LOCAL pentru a permite scrieri paralele pentru tabelele MyISAM. Rețineți că atunci când descărcați o colecție de baze de date, opțiunea --lock-tables blochează tabelele din fiecare bază de date individual. Astfel, utilizarea acestei opțiuni nu garantează că tabelele vor fi consistente din punct de vedere logic în aceste baze de date. În diferite baze de date, atunci când se realizează un dump, tabelele pot fi în stări complet diferite. -K, --disable-keys Adăugați expresia /*!40000 ALTER TABLE nume_tb DISABLE KEYS */; și /*!40000 ALTER TABLE nume_tb ENABLE KEYS */; în rezultatul de ieșire. Acest lucru va accelera încărcarea datelor în serverul MySQL 4.0, deoarece indecșii sunt creați după ce toate datele au fost introduse. -n, --no-create-db CREATE DATABASE /*!32312 DACĂ NU EXISTĂ*/ db_name; va lipsi. Această linie va fi adăugată în orice caz când se utilizează opțiunile --databases sau --all-databases. -t, --no-create-info Nu înregistrați informații despre crearea tabelului (comanda CREATE TABLE). -d, --no-data Nu scrieți informații din rândurile tabelului. Acest lucru este foarte util pentru a descărca structura unui tabel! --opt La fel ca --quick --add-drop-table --add-locks --extended-insert --lock-tables . Ar trebui să ofere cel mai rapid dump de citire pe serverul MySQL. -pyour_pass, --password[=your_pass] Parola de utilizat atunci când vă conectați la server. Dacă argumentul =your_pass nu este furnizat, mysqldump vă va solicita o parolă. -P port_num, --port=port_num Numărul portului TCP/IP folosit pentru a vă conecta la gazdă (utilizat atunci când vă conectați la gazde altele decât localhost , care utilizează socket-uri Unix). -q, --quick Dump direct în stdout fără a tampona cererea. Funcția mysql_use_result() este utilizată pentru aceasta. -Q, --quote-names Citate nume de tabel și de coloană fără caractere ``". -r, --result-file=... Afișează direct fișierul specificat. Această opțiune ar trebui utilizată în MS DOS deoarece împiedică conversia fișierului caracterul newline „\n” la secvența „\n\r” (newline + carriage return) --single-transaction Această opțiune emite o comandă BEGIN SQL înainte de a descărca datele de pe server. Cel mai frecvent utilizat cu tabelele InnoDB și nivelul de izolare a tranzacțiilor READ_COMMITTED , deoarece acest mod vă permite să obțineți un dump cu o stare consecventă a bazei de date după executarea comenzii BEGIN fără a bloca nicio aplicație. Când utilizați această opțiune, trebuie să vă amintiți că numai tabelele tranzacționale vor fi într-o stare consecventă la dumping , adică unele tabele MyISAM sau HEAP își pot schimba în continuare starea atunci când se utilizează această opțiune. Opțiunea --single-transaction a fost adăugată în versiunea 4.0.2. Se exclud reciproc cu privire la opțiunea --lock-tables, deoarece comanda LOCK TABLES anulează execuția tranzacției anterioare. -S /path/to/socket, --socket=/path/to/socket Fișier socket pentru a se conecta la localhost (gazdă implicită). --tables Supliniază opțiunea --databases (-B). -T, --tab=path-to-some-directory Pentru fiecare tabel dat, creează un fișier „table_name.sql” care conține comenzile SQL CREATE pentru a crea tabelul și un fișier „table_name.txt” cu datele tabelului . Fișierul „.txt” este formatat conform opțiunilor --fields-xxx și --lines--xxx. Notă: Această opțiune funcționează numai dacă utilitarul mysqldump rulează pe aceeași mașină cu demonul mysqld și utilizatorul/grupul care a început acest fir mysqld (de obicei utilizatorul mysql și grupul mysql) trebuie să aibă permisiunea de creare/scriere a fișierului la adresa specificată. -u user_name, --user=user_name numele de utilizator al serverului MySQL folosit la conectarea la server. Valoarea implicită este numele de utilizator Unix. -O var=opțiune, --set-variable var=opțiune Setează valorile variabilelor. Variabilele disponibile pentru utilizare sunt enumerate mai jos. -v, --verbose Mod de ieșire extins. Afișează informații mai detaliate despre program. -V, --version Afișează informații despre versiune și ieși din program. -w, --where="unde-condiție" Eliminați numai înregistrările selectate. Rețineți că ghilimele sunt obligatorii. "--where=user="jimf"" "-wuserid>1" "-wuserid -X, --xml Eliminați baza de date ca XML. -x, --first-slave Blocați toate tabelele din toate bazele de date. -O net_buffer_length =#, unde # Cea mai obișnuită utilizare a mysqldump este de a face o copie de rezervă a tuturor bazelor de date Vezi secțiunea 4.4.1 Copiere de rezervă a bazelor de date mysqldump --opt database > backup-file.sql

baza de date mysql

Mysql -e baza de date „sursă /patch-to-backup/backup-file.sql”.

Acest utilitar este adesea folosit pentru a transfera informații dintr-o bază de date pe un alt server MySQL:

mysqldump --opt baza de date | mysql --host=remote-host -C baza de date

Este foarte posibil să aruncați mai multe baze de date cu o singură comandă:

mysqldump --databases database1 > my_databases.sql

Dacă aveți nevoie de un dump a tuturor bazelor de date, puteți utiliza:

mysqldump --all-databases > all_databases.sql

Dumpingul și restaurarea unei baze de date MySQL este destul de ușor și convenabil de făcut de la distanță prin SSH sau direct prin consola serverului. De la distanță, acest lucru se poate face folosind programele Putty/Kitty. De asemenea, puteți rula următoarele exemple pe Windows rulând linia de comandă „ cmd‘. Mai jos sunt exemple despre cum să creați depozite de baze de date MySQL și apoi să le restaurați dacă este necesar, de exemplu pentru site-ul dvs. web, magazinul online sau orice alt proiect.

Eliminarea unei baze de date MySQL

Pentru a executa aceste comenzi, conectați-vă de la distanță la serverul dvs. prin SSH folosind unul dintre programele enumerate mai sus. După conectarea și autorizarea la server/găzduire, puteți introduce comenzile de mai jos.

# Faceți o copie de rezervă a unei baze de date în fișierul dump_file.sql mysqldump -uroot -p your_base > dump_file.sql # Pe Windows, cel mai bine este să creați un dump cu o comandă puțin diferită, care împiedică # suprascrierea accidentală a liniilor de dump din cauza conversiei caracterelor newline „\r\n” la „\n” mysqldump -uroot -p your_base -r dump_file_utf8.sql # Dacă trebuie să faceți backup numai pentru tabele individuale, nu pentru întreaga bază de date # (specificați numele tabelelor cu un spațiu după numele bazei de date) mysqldump -uroot -p baza_voastra TABLE1 TABLE2 TABLE3 > dump_file.sql # Dacă trebuie să faceți o copie de rezervă numai a structurii bazei de date fără datele în sine mysqldump -uroot -p --no-data baza_voastra > dump_file.sql # Faceți o copie de rezervă a tuturor bazelor de date în current_data.gz mysqldump -uroot -p --all_databases | gzip -c > „data „+%Y-%m-%d””.gz # Backup, unde este creată un INSERT separat pentru fiecare înregistrare # și specificând în mod explicit baza de date UTF-8 care codifică mysqldump -uroot -p --default - set de caractere=utf8 baza_voastra --extended-insert=FALSE | gzip -c > „data „+%Y-%m-%d””.gz

# Faceți backup pentru o bază de date în dump_file.sql

mysqldump - uroot - p baza_voastra > dump_file . sql

# Pe Windows, descărcarea se face cel mai bine cu o comandă ușor diferită care împiedică

# suprascriere aleatorie a liniilor de descărcare din cauza conversiei caracterelor newline „\r\n” în „\n”

mysqldump - uroot - p your_base - r dump_file_utf8 . sql

# Dacă trebuie să faceți backup numai pentru tabele individuale, nu pentru întreaga bază de date

# (specificați numele tabelelor cu un spațiu după numele bazei de date)

mysqldump - uroot - p baza_voastra TABLE1 TABLE2 TABLE3 > dump_file . sql

# Dacă trebuie să creați o copie de rezervă numai a structurii bazei de date fără datele în sine

mysqldump - uroot - p -- fără date baza dvs. > fișier_dump . sql

# Faceți backup pentru toate bazele de date în fișierul current_date.gz

mysqldump - uroot - p -- all_databases | gzip - c > „data „+%Y-%m-%d”” . gz

# Backup, unde este creat un INSERT separat pentru fiecare intrare

# și specificând în mod explicit codificarea bazei de date UTF-8

mysqldump - uroot - p -- default - character - set = utf8 your_base -- extins - insert = FALSE | gzip - c > „data „+%Y-%m-%d”” . gz

În exemplul de mai sus, utilitarul este folosit pentru a crea o copie de rezervă. mysqldump, care este inclus cu mysql. Următorii sunt parametrii pentru crearea unui backup al bazei de date, pe care îi vom analiza mai detaliat:

  • -u– parametrul specifică autentificarea care va fi utilizată pentru conectarea la baza de date. În exemplu, folosim login-ul root, care trebuie specificat în acest parametru fără spațiu! Drept urmare, arată ca -uroot
  • -p– parametrul indică faptul că trebuie să introduceți o parolă pentru autentificarea specificată. L-am lăsat necompletat, drept urmare parola va trebui introdusă după apăsarea „Enter” la executarea comenzii. Cu toate acestea, puteți specifica parola imediat aici, ca în parametrul de conectare, fără spațiu după -p, totuși această metodă nu este sigură, deoarece consola vă salvează comenzile într-un fișier jurnal și dacă nu îl ștergeți în mod regulat, atunci poate fi văzut de un atacator.
  • baza_voastra- în loc de această linie din exemplu, trebuie să specificați numele real al bazei de date pentru care creați o copie de rezervă.
  • > – un operator care arată direcția de acțiune, i.e. parcă ar indica faptul că urmează să scrieți din baza de date în fișier.
  • dump_file.sql este numele fișierului dvs. .slq în care doriți să salvați baza de date. Este specificat cu un spațiu după operatorul „>”. Puteți seta orice alt nume. De exemplu, pentru ca sistemul să insereze automat ora curentă în nume, este suficient să specificați o linie precum:

    „data „+%Y-%m-%d””

    „data „+%Y-%m-%d””


    după această linie din exemplu, extensia de fișier „ .gz‘. Ca urmare, un fișier de forma „ 2014-11-15.gz‘.

    Atenţie! Dacă specificați doar numele fișierului, atunci acesta va fi salvat în același director în care executați această comandă. Acestea. daca vezi ceva de genul # , Unde [email protected] este numele de conectare și server, apoi fișierul va fi creat în director /Acasă. Pentru a modifica salvarea fișierului într-o cale diferită, specificați calea completă pentru a salva fișierul în loc de nume, de exemplu: /var/www/backup/dump_file.sql.

  • În al doilea exemplu, în loc de „ > „operatorul este folosit” | „, care indică necesitatea de a executa o comandă suplimentară gzip cu parametrul „ -c„ care vă permite să împachetați imediat depozitul într-o arhivă și numai apoi să îl salvați într-un fișier precum „ 2014-11-15.gz" după cum a raportat operatorul " > ‘.
  • Parametru --nu există date vă permite să descărcați numai structura bazei de date fără datele în sine. Destul de util în unele cazuri când datele nu sunt necesare.
  • Opțiuni --default-character-set=utf8și --extended-insert=FALSE. Primul vă permite să specificați în mod explicit codificarea utilizată de această bază de date, evitând astfel salvarea bazei de date într-o codificare greșită. În loc de utf8, puteți specifica orice altă codificare, cum ar fi cp1251 . Al doilea parametru vă permite să specificați că trebuie creată o comandă INSERT separată pentru fiecare înregistrare în timpul exportului. În unele cazuri, acest lucru poate fi necesar la restaurarea parțială a datelor dintr-un dump.
  • Restaurarea unei baze de date dintr-un fișier dump MySQL

    Acum să aruncăm o privire la procesul invers de restaurare a unei baze de date dintr-un fișier dump. Această acțiune este efectuată folosind programul mysql. Să ne uităm imediat la un exemplu.

Acest articol poate fi util dacă aveți un site web care utilizează un sistem de management al conținutului (Joomla, WordPress, OpenCart etc.) și decideți să îl mutați pe alt server. Acest lucru necesită nu numai transferul fișierelor site-ului, ci și transferul . Înainte de a începe să transferați un site web, trebuie să alegeți unul bun și să îl comandați pentru a avea acces la un nou cont de găzduire. Noi, de exemplu, oferim standalone, Joomla și PrestaShop. Dacă doriți să vă transferați site-ul la un nume nou și aveți nevoie, faceți-vă timp. Planul nostru de găzduire partajată S4 vă va oferi și un domeniu gratuit. Dacă site-ul dvs. nu are suficientă găzduire virtuală, puteți comanda oricând VPS sau .

Pentru a transfera o bază de date, trebuie mai întâi să creați un dump, adică să plasați conținutul într-un fișier sql separat. Acest lucru se face în meniu. phpMyAdmin pe găzduirea de unde transferați site-ul. Accesați phpMyAdmin, selectați baza de date pe care doriți să o transferați din stânga și faceți clic pe „ Export» în meniul de sus.

Se va deschide o casetă de dialog, în care asigurați-vă că selectați tipul de bază de date SQL, apoi faceți clic pe butonul O.K. Așteptați ca fișierul bazei de date să se descarce pe computer.

Acum acest fișier trebuie să fie corect plasat pe găzduirea noastră. Pentru a face acest lucru, trebuie mai întâi să creați o bază de date MySQL în contul cPanel, să adăugați un utilizator și să îi atribuiți privilegii. Mai jos este ordinea modului de creare a unei baze de date în MySQL.

Accesați cPanel și găsiți secțiunea " Bază de date", Selectați "".

Se va deschide o nouă fereastră. La pasul 1, introduceți un nume de bază de date. Vă rugăm să rețineți că numele bazei de date va fi întotdeauna prefixat, prima jumătate a numelui va conține numele contului cPanel.

După ce ați introdus numele, faceți clic pe „ Urmatorul pas».

La pasul 2, trebuie să creați un utilizator MySQL pentru baza de date și să setați o parolă pentru acesta. După ce ați introdus toate datele, faceți clic pe " Creaza utilizator».

Când setați privilegiile utilizatorului creat, selectați opțiunea " TOATE DREPTURILE” și treceți la pasul următor.

Dacă totul a fost făcut corect în pașii anteriori, expertul bazei de date vă va anunța cu privire la finalizarea cu succes a creării unei baze de date pe găzduire.

Acum puteți găsi baza de date creată în lista de baze de date MySQL disponibile din meniul panoului de control cu ​​același nume.

Acum, pentru a restaura baza de date MySQL, importăm în baza de date creată conținutul fișierului salvat din vechea găzduire cu extensia .sql. Pentru a face acest lucru, pe pagina principală a cPanel, selectați elementul de meniu „ phpMyAdmin” în aceeași secțiune ” Bază de date". În fereastra care se deschide, în meniul din stânga, selectați baza de date nou creată și faceți clic pe fila " Import» în meniul de sus.

Faceți clic pe butonul selectați un fișier”, în caseta de dialog, selectați fișierul sql salvat anterior și încărcați-l în găzduire. Asigurați-vă că tipul de codificare este utf-8. După ce faceți clic pe OK, așteptați un mesaj că importul bazei de date a avut succes.

Pe aceasta, toți pașii necesari pentru a transfera baza de date într-o alta sunt finalizați.

Efectuarea unui dump (backup) a bazei de date este foarte importantă. Așa că am făcut câteva comentarii cu exemple despre o utilitate atât de mare precum mysqldump.

mysqldump - utilitarul vă permite să obțineți un dump a conținutului unei baze de date sau a unui set de baze de date pentru a crea o copie de rezervă sau a transfera date către un alt server de baze de date SQL (nu neapărat un server MySQL). Dump-ul va conține un set de comenzi SQL pentru a crea și/sau popula tabele.

mysqldump-u root -p -f name_database >

Cu această comandă, facem o copie de rezervă a bazei de date sub numele name_database pentru a conduce C în fișierul mydb_backup_name_database.txt

Nu trebuie să creați fișierul, MySQL îl va crea pentru dvs.

mysql-u root -p -f name_database< C:\mydb_backup_name_database.txt

cu această comandă importăm datele de rezervă din fișierul C:\mydb_backup_name_database.txt

Notă: -f, --force este o opțiune care vă spune să continuați chiar dacă primiți o eroare SQL, de ex. ignora erorile. De exemplu, dacă tabelul are deja un rând identic în toate.

Pentru a nu vi se cere o parolă, trebuie să o scrieți imediat după -p, adică fără spații. Dacă parola pwd, atunci exemplul arată astfel:

mysqldump-u rădăcină -p pwd-f name_database > C:\mydb_backup_name_database.txt

Dacă folosiți adesea această comandă, atunci este mai bine să faceți un utilizator separat cu drepturile necesare pentru a reduce parola de root

Luați în considerare setările mysqldump mai subtile:

--baze de date permite mysqldump să includă comenzile CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME și USE DBNAME în scriptul de restaurare. Acest lucru vă va permite să creați baze de date funcționale de la zero. Adică, fără a utiliza --databases, se presupune că utilizatorul restaurează o bază de date și specifică în mod explicit unde ar trebui să fie plasate datele restaurate. Dacă backup-ul este creat pentru a face o copie completă a datelor, de exemplu, pe un alt server MySQL, atunci această cheie trebuie utilizată;

--toate-bazele de date vă permite să faceți copii ale tuturor bazelor de date care există pe un anumit server MySQL. Dacă trebuie să faceți copii doar ale unor baze de date, trebuie doar să le specificați separate printr-un spațiu atunci când apelați mysqldump din linia de comandă (vezi mai sus);

Cheie --Ajutor. Programul mysqldump are multe versiuni. Puteți vedea ce caracteristici sunt acceptate în mod specific de versiunea dvs. folosind această cheie;

--add-drop-table- o cheie care va determina mysqldump să adauge comanda drop table la scriptul final înainte de a crea tabelele. Acest lucru va evita unele erori la restaurarea bazei de date dintr-o copie de rezervă. Desigur, trebuie să țineți cont de faptul că tabelele din copia de lucru (dacă tabele cu același nume există în backup) vor fi șterse din baza de date principală și recreate din backup înainte de a fi restaurate din backup;

--nu există date. Cu această cheie, puteți face rapid o copie a structurii tabelului / bazelor de date fără datele în sine. De exemplu, ați creat un tabel complex și ați dori să-i salvați structura pentru viitor, dar nu aveți nevoie de datele din acest tabel într-o copie de rezervă;

--result-file=...- acest comutator poate fi folosit pentru a redirecționa ieșirea către un fișier. Puteți utiliza redirecționarea obișnuită Unix cu comanda „>” sau puteți folosi această cheie. Cui îi place ce;

Un alt sfat foarte util pentru utilizarea mysqldump într-un mediu de găzduire. De regulă, atunci când utilizați găzduirea, sunt impuse anumite restricții utilizatorului. De exemplu, nu puteți folosi mai mult de o anumită cantitate de memorie fizică (RAM, RAM). mysqldump pune în memorie toate datele primite de la serverul MySQL în mod implicit, apoi le scrie pe disc. În consecință, dacă furnizorul vă permite să luați, de exemplu, 30 MB de memorie, iar baza de date pentru care faceți o copie a utilizării mysqldump ocupă 50 MB, desigur, aici va apărea o eroare - mysqldump nu va putea funcționa corect și se va termina anormal, ceea ce vă va informa. Pentru a „forța” mysqldump să scrie datele direct pe disc în loc să le stocheze, chiar și temporar, în memorie, utilizați comutatorul --rapid. Acest lucru va rezolva problema.

Iată încă câteva exemple utile:

mysqldump -u root -p pwd-f --default-character-set=cp1251 dbname| gzip -c > numefișier.txt .gz

Puteți despacheta o astfel de arhivă cu comanda:

gunzip filename.txt .gz

Pentru a ști pentru ce dată a fost făcută copia de rezervă, puteți scrie următoarea comandă:

mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `data „+%Y-%m-%d”`.gz

și dacă trebuie să dump cu diferite codificări, atunci este convenabil să utilizați variabile:

a stabilit DBCARACTER=utf8

a stabilit dbname= încălcare

mysqldump -u root -p pwd-f --default-character-set=$ DBCARACTER $dbname| bzip2 -c > sql. $DBNAME.`data „+%Y-%m-%d”`.bz2

Dacă doriți să automatizați ștergerea arhivelor vechi, încercați să utilizați cron și comanda find care se găsește în mod obișnuit pe Unix. Alergând periodic

găsi~/archives-dir -name "*.gz" -mtime +7 -exec rm -f () \;

În acest fel veți șterge arhivele care sunt „mai vechi” de șapte zile.

  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva