Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Știri
  • Acces Mysql refuzat - Cum să recuperez fișierul dump din mysqldump? Faceți backup și restaurați baza de date MySQL (MariaDB) cu mysqldump.

Acces Mysql refuzat - Cum să recuperez fișierul dump din mysqldump? Faceți backup și restaurați baza de date MySQL (MariaDB) cu mysqldump.

Salutări, prieteni! 🙂

Astăzi am decis să continui conversația despre lucrul cu MySQL în consolă și să fiu atent la procedura de export a bazei de date Date MySQL.

În acest articol voi vorbi despre cum să aruncați o bază de date MySQL, precum și despre cum să încărcați date din MySQL în fisier Excelși formatul csv.

Vom lua în considerare diverse opțiuni eșantionarea informațiilor din: crearea unui dump a uneia sau mai multor baze de date, exportarea datelor din tabele individuale și rezultate arbitrare SELECTAȚI cereri.

Vom vorbi, de asemenea, despre cum să scoateți date dintr-o bază 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 pe acest subiect pe Internet. în plus material de calitate, pe care nu sunt dornic să-l copiez și lipim.

Și, în al doilea rând, eu însumi am revizuit 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, unde am vorbit despre .

Deci, dacă nu sunteți un dezvoltator profesionist sau administrator de sistem, care poate găsi utile informații despre lucrul cu consola și ați venit doar pentru instrucțiuni despre cum să exportați baza de date în phpMyAdmin, apoi vă puteți limita la a citi informațiile de la linkul de mai sus.

Vreau să mă înțelegi corect: nu vreau să te jignesc în niciun fel, dar vreau doar să-ți petreci timpul cu beneficiu maxim pentru job și au primit ceea ce căutau.

Aici se încheie partea introductivă și trecem la o trecere în revistă a comenzilor consolei pentru crearea unui dump de bază de date MySQL, pe care am decis să le sortez după cantitatea de date salvate: pornind de la exportul întregii baze de date, terminând cu tabelele individuale și rezultatele interogări arbitrare.

Crearea unui dump de bază de date MySQL prin consolă

Aș dori să fac o mică precizare chiar de la început.

Dump-ul bazei de date 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. Dump-ul 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 știe, o copie de rezervă a bazei de date MySQL este, în esență, o descărcare a acesteia făcută în anumită perioadă timp, care vă permite să restabiliți structura și datele bazei de date dacă este necesar.

Export de date este pur și simplu extragerea de informații din tabele în forma text Pentru munca in continuare cu editori 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, care trebuie folosit în exterior Linie de comanda MySQL în consola serverului sau alt shell.

Deci, pentru cea mai simplă și cea mai comună opțiune - exportarea datelor dintr-o anumită bază de date către Consola MySQL Pentru a o 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, așa că indiferent de extensia pe care o alegeți pentru fișierul dvs., conținutul acestuia va fi același în orice caz. Ș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 fișierul să poată fi creat.

Dacă dintr-o dată trebuie să faceți un dump a tuturor bazelor 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, va trebui să apelați mysqldump cu următorii parametri:

Mysqldump -u username -p --databases database_name1, database_name2, ... > path_and_dumpfile_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ă faci copii de siguranță ale anumitor tabele MySQL și să primești datele lor în formă lizibilă, vom vorbi mai departe.

Eliminarea unui tabel MySQL și exportarea datelor

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

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

Când apelați mysqldump, puteți specifica tabelele necesare ca valoare a parametrului --Mese, când este utilizat parametrul --baze de date vor fi ignorate:

Mysqldump -u username -p --databases database_name1, database_name2 --tables table_name1, table_name2, ... > calea_și_dumpfile_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 utilizată doar cea mai recentă bază de date din listă. În principiu, acest comportament este destul de logic, deoarece Este posibil ca tabelele specificate să nu apară în toate bazele de date.

Bine, am primit un dump de tabele de baze 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ă lizibilă, 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 instrumente și pentru asta.

Opțiunea de a apela la utilitate ne va ajuta să ne îndeplinim planurile 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 date stocate în toate câmpurile tabelului, ci și în unele specifice. Pentru a face acest lucru, trebuie doar să înlocuiți simbolul wildcards (*) cu cele necesare, separate prin virgule.

Drept urmare, producția noastră va fi cea obișnuită fisier text, care va conține numele câmpurilor sub forma unui antet și informații despre acestea pentru toate înregistrările. Se poate deschide in mod normal editor de text, indiferent de rezoluția pe care o dați atunci când îl creați.

Dacă doriți să exportați date dintr-o bază de date MySQL în xls sau format csv astfel încât fișierul rezultat să fie afișat corect în editorii de tabel, vom vorbi despre cum să faceți acest lucru puțin mai târziu :)

Crearea de copii de siguranță și scoaterea datelor dintr-o bază de date MySQL folosind interogări

Am vorbit despre cum să aruncați o bază de date MySQL - unul sau mai multe, precum și tabele individuale. Dar uneori, în practică, există cazuri când trebuie să exportați un set de date care nu se limitează 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 backup pentru o anumită parte a tabelului pentru a o restaura rapid.

Pentru backup vom avea nevoie de același utilitar mysqldump, care va trebui numit astfel:

Mysqldump -u user_name -p database_name table_name --where "lookup" > path_and_dump_file_name

Ca urmare, vom primi un fișier cu comenzi SQL pentru a crea un 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 va trebui să modificăm comanda folosită în cazul precedent atunci când recuperăm toate datele din tabel, doar cu câteva clarificări:

Mysql -u nume_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 de utilizare a directivei UNDE, puteți folosi alte constructe SQL: A TE ALATURA, UNIUNE etc.

Puteți colecta orice statistică doriți :)

Aceeași acțiune poate fi efectuată și atunci când lucrați pe linia de comandă MySQL folosind următoarea comandă:

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

Această comandă este concepută special pentru a crea fișiere cu rezultate de eșantionare. 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ă cel de mai sus este cazul tău, atunci lista plina Puteți găsi parametrii și opțiunile pentru apelarea acestei comenzi aici - https://dev.mysql.com/doc/refman/5.7/en/select-into.html

La sfârşitul lui scurtă excursie pentru mysqldump aș dori să ofer o opțiune pentru apelarea unei comenzi cu o listă de parametri pentru a crea un dump optimizat al bazei de date MySQL și a tabelelor, restabilirea bazei de date și a tabelelor individuale din care va dura mai puțin timp decât cu un apel obișnuit:

Mysqldump -u username -h host_or_IP_MySQL_server -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ă parametri speciali.

Sunt de acord că acesta este un lucru mic. Dar acest lucru este doar în cazul în care volum dat date. Dacă utilizați această tehnică atunci când creați un dump mai mare de 1 GB, diferența va fi mai semnificativă.

Dacă întâmpinați o astfel de situație, nu uitați să arhivați mai întâi dump-ul bazei de date MySQL. Cel mai bun este tar.gz. 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, pentru că... sunt foarte asemănătoare, sunt folosite aproximativ în același mod (pentru a structura informațiile sub formă de tabele) și se vor apela aceleași comenzi pentru export.

După cum știți, singura diferență semnificativă dintre aceste formate este aceea extensia xlsși xlsx au fișiere create în program Microsoft Office Excel, care funcționează doar pe 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 este disponibil oriunde, cu excepția Microsoft Office Excel, nu se va deschide. Același OpenOffice confirmă contrariul.

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

Permiteți-mi să încep cu faptul că numai rezultatele pot fi exportate în xls sau csv interogări SQL, cu care am învățat să lucrăm mai devreme, pentru că va fi imposibil să scoateți întreaga bază de date într-un singur fișier î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ă dacă există un volum mare 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 din interiorul fișierului în tabele și câmpuri.

Nu, este, desigur, posibil să faceți acest lucru, dar este puțin probabil să se facă cu o singură comandă și, în general, este puțin probabil ca cineva să facă acest lucru în consolă. Cred că în aceste scopuri vei 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-una sau mai multe fișier xls ov în consolă, apoi scrieți despre asta în comentarii. Cred că citirea despre asta va fi utilă pentru mulți.

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

Să începem în ordine.

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

Pe Linux sisteme:

Mysql -u nume de utilizator -d nume_bază de date -p -e „SELECT * FROM database_table;” | 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 asta în practică și nu am idee ce va ieși în cele din urmă, pentru că... Momentan lucrez pe 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:

Exportați date din Tabelele MySQLîn csv cu comanda de mai sus în în acest caz,, din păcate, nu va fi posibil, pentru că Windows, spre deosebire de Linux, nu are încorporat comanda consolei pentru lucrul cu fire, care este sed în Linux.

Desigur, îl puteți instala, dar este prea multă bătaie de cap. Alternativ, puteți utiliza CygWin- emulator console Linux pentru sisteme Windows.

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

Dar extragerea informațiilor într-un fișier xls este la fel de ușor ca 5 copeici :) Este foarte ușor să-l lansați în felul următor pe care l-am incercat personal:

Mysql -u nume de utilizator -d nume_bază de date -p -e „SELECT * FROM database_table;” > cale_și_nume_fișier.xls

Deschis acest fișierîn Microsoft Office Excel fără nicio problemă. Singurul lucru este că la deschiderea acestuia, pe ecran a fost afișat un mesaj care avertizează 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 dacă efectuați acțiuni specifice în Microsoft Office Excel, vor apărea probleme în viitor; nu am săpat atât de adânc. Când vizualizați datele în mod normal, macar, nu am văzut nimic neobișnuit.

Dacă întâmpinați probleme în timp ce utilizați fișierul xls exportat din MySQL, fie în acest program, fie în altele, vă rugăm să-mi spuneți în comentarii.

Folosind metoda descrisă mai sus, puteți exporta conținutul unei baze de date MySQL într-un fișier csv, în principiu. Dar apoi datele din diferite câmpuri ale tabelului vor fi scrise în masă, fără delimitatori, care s-ar putea să nu fie afișate bine în diverse programe pentru lucrul cu tabele, în care de obicei lucrează cu fișiere csv.

OpenOffice, apropo, nu-i pasă :) A delimitat automat informațiile obținute în 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 celulă fără delimitatori. Cred ca Intr-un mod similar Vin mai multe editori de tabele.

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 caractere speciale, perceput de editori.

Și apoi am abordat treptat a doua metodă Export MySQL date în csv și xls, ceea ce implică utilizarea liniei 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 în calea specificată la apel, care se va deschide corect în majoritatea editoarelor moderne de foi de calcul. Pentru orice eventualitate, vă reamintesc că să fugi această comandă este necesar doar după conectarea la baza de date MySQL.

Această comandă este, de asemenea, excelentă pentru exportul datelor MySQL într-un fișier xls pentru afișare corectăîn Microsoft Office Excel. Numai în acest caz nu avem nevoie de separatori, pentru că vor interfera cu împărțirea 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 timp ce rulați comanda, este posibil să întâlniți următoarea eroare în consolă care împiedică finalizarea exportului:

EROAREA 1290 (HY000): The Server MySQL rulează cu--secure-file-priv, deci 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 intampinat aceasta problema datorita faptului ca pentru a lucra in consola folosesc kitul de distributie MySQL inclus in kitul WAMP OpenServer care, la randul sau, lanseaza serverul MySQL in acest fel.

Există două moduri de a rezolva problema:

  • Modificați parametrii de pornire a serverului MySQL
  • Schimbați calea către dosar final Export MySQL

Prima metodă mi s-a părut prea complicată, pentru că... Ar trebui să mă aprofundez în configurația OpenServer, care nu a fost scrisă de mine cu toate circumstanțele care au urmat 🙂 Prin urmare, am decis să iau a doua cale. Daca intalnesti problema asemanatoare- repetă 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 un articol 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ă a fost în general setată la NUL, deoarece Eu, așa cum am spus deja, folosesc utilitare 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 complet închise.

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, în cazul meu, nu a fost posibilă utilizarea metodelor obișnuite de modificare a valorilor variabilelor globale MySQL:

SET nume_variabilă = valoare;

Drept urmare, 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.

Ca rezultat, pentru a modifica 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 spool de schimb de fișiere, va trebui să faceți același lucru.

În cazul meu, această variabilă exista deja în config, doar sub formă comentată:

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

Dacă nu îl aveți, scrieți-l de la zero în secțiune (cel putin pentru mine era situat 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 într-un 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 editat, 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 "secure_file_priv_value\file_name.csv";

După aceasta, 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 eroarea va fi --secure-file-priv va continua să apară.

Acesta este articolul despre cum să aruncați o bază de date MySQL și tabelele acesteia, precum și despre datele de ieșire din tabelele MySQL către diverse formate, ajunge la final. Scrieți-vă recenziile în comentarii și împărtășiți tuturor opțiunile de script pe care le utilizați cel mai des în practică.

Dacă ți-a plăcut articolul, poți mulțumi autorului republicând articolul în social media sau financiar folosind formularul de mai jos, astfel încât să puteți plăti pentru găzduirea de bază.

Succes tuturor și ne revedem! 🙂

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

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

./mysql -u -p H < db_dump-file

2018-12-04T00:00Z

2018-12-11T00:00Z

Când creăm un fișier dump cu mysqldump, acesta conține un script SQL mare pentru a recrea conținutul bazei de date. Așa că îl restaurăm rulând linia de comandă a clientului MySQL:

Mysql -uroot -p

(unde root este numele de utilizator admin pentru MySQL) și după conectarea la baza de date avem nevoie de comenzi pentru a crea baza de date și a citi fișierul:

Creați baza de date new_db; folosește new_db; \. dumpfile.sql

Detaliile se vor schimba în funcție de opțiunile utilizate la crearea fișierului de descărcare.

2018-12-18T00:00Z

Trebuie doar să rulezi asta:

mysql -p -u< db_backup.dump

Dacă dump-ul conține mai multe baze de date, ar trebui să omiteți numele bazei de date:

mysql -p -u< db_backup.dump

Pentru a rula aceste comenzi, deschideți un prompt de comandă (pe Windows) și CD-ul în directorul în care este mysql.exe fisier executabil mysql.exe (s-ar putea să trebuiască să vă gândiți puțin, va depinde de modul în care ați instalat mysql, adică independent sau ca parte a unui pachet precum WAMP). Când vă aflați în acest director, ar trebui să introduceți pur și simplu comanda.

25-12-2018T00:00Z

Ar trebui să fie la fel de simplu ca rularea acestui:

Mysql -u -p< db_backup.dump

Dacă dump-ul are o singură bază de date, poate fi necesar să adăugați o linie în partea de sus a fișierului:

UTILIZARE ;

Dacă este un dump de multe baze de date, instrucțiunile de utilizare sunt deja acolo.

Pentru a rula aceste comenzi, deschideți un prompt de comandă (pe Windows) și cd-ul în directorul în care mysql.exe conține executabilul mysql.exe (poate fi nevoit să vă gândiți puțin la asta, va depinde de modul în care ați instalat mysql, adică de sine stătătoare sau ca parte a unui pachet precum WAMP). Odată ce vă aflați în acel director, puteți pur și simplu să tastați comanda așa cum am făcut-o mai sus.

2019-01-01T00:00Z

Comandă cu o singură linie pentru a restaura SQL-ul generat din mysqldump

Mysql -u -p E "sursa

2019-01-08T00:00Z

Folosind un fișier dump de 200 MB creat pe Linux pentru a restabili pe Windows cu mysql 5.5, am avut mai mult succes Cu

Fișier sursă.sql

abordarea liniei de comandă mysql decât utilizarea

mysql< file.sql

abordarea liniei de comandă care provoacă o eroare din 2006 „serverul a plecat” (pe Windows)

În mod ciudat, serviciul creat în timpul instalării (mysql) se referă la un fișier my.ini care nu era acolo. Am copiat fișierul exemplu „mare” în my.ini, pe care îl modificasem deja cu creșterea recomandată.

Valorile mele

Max_allowed_packet = 64M interactive_timeout = 250 wait_timeout = 250

2019-01-15T00:00Z

La fel de exemplu concret raspuns anterior:

Trebuia să refac copia de rezervă, astfel încât să o pot importa/transfer în SQL Server. Am instalat doar MySql, dar nu l-am înregistrat ca serviciu sau l-am adăugat la calea mea, deoarece nu trebuie să-l rulez.

obisnuiam Windows Explorer pentru a pune fișierul meu dump în C:\code\dump.sql. Apoi deschideți MySql din elementul de meniu Start. Am creat DB, apoi a rulat comanda sursă cu calea completă astfel:

Mysql> creați baza de date temp mysql> utilizați temp mysql> sursa c:\code\dump.sql

Dumpingul și restaurarea unei baze de date MySQL este destul de simplu ș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 efectua exemplele de mai jos 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 alt proiect.

Crearea unui Dump de bază 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 backup pentru o bază de date în fișierul dump_file.sql mysqldump -uroot -p your_base > dump_file.sql # Activat gunoi de ferestre Cel mai bine este să creați o comandă puțin diferită, care să prevină # suprascrierea accidentală 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ă aveți nevoie de backup numai tabele individuale și nu întreaga bază de date # (specificați numele tabelelor separate printr-un spațiu după numele bazei de date) mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql # Dacă trebuie să creați o copie de rezervă numai a bazei de date structură fără datele în sine mysqldump -uroot -p -- no-data baza_voastra > dump_file.sql # Faceți copii de rezervă pentru toate bazele de date în fișierul data_actuală.gz mysqldump -uroot -p --all_databases | gzip -c > „data „+%Y-%m-%d””.gz # Backup, unde se creează un INSERT separat pentru fiecare intrare # și cu indicație explicită codificarea bazei de date UTF-8 mysqldump -uroot -p --default-character-set=utf8 your_base --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, cel mai bine este să creați un dump 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ă aveți nevoie de backup numai pentru tabele individuale, și nu pentru întreaga bază de date

# (indicați numele tabelelor separate printr-un spațiu după numele bazei de date)

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

# Dacă trebuie să faceți backup numai pentru structura 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 baza de date care codifică 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 unei copii de siguranță a bazei de date, pe care le vom examina mai detaliat:

  • -u– parametrul specifică login-ul care va fi folosit 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 chiar aici, ca în parametrul de conectare, fără un 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, poate fi văzut de un atacator.
  • baza_voastra– în loc de această linie din exemplu, trebuie să specificați nume real Baza de date pentru care creați o copie de rezervă.
  • > – un operator care arată direcția de acțiune, i.e. de parcă ar indica că veți scrie din baza de date într-un fișier.
  • dump_file.sql– acesta este numele fișierului .slq în care trebuie să salvați baza de date. Este indicat cu un spațiu după operatorul „>”. Puteți specifica orice alt nume. De exemplu, astfel încât în ​​nume sistemul să se introducă automat ora curentă, specificați doar o linie ca:

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

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


    după această linie din exemplu, extensia fișierului este indicată „ .gz‘. Ca rezultat, un fișier precum „ 2014-11-15.gz‘.

    Atenţie! Dacă specificați doar numele fișierului, acesta va fi salvat în același director în raport cu care executați această comandă. Acestea. dacă vedeți așa ceva la promptul de comandă # , Unde root@dvs acesta este numele de conectare și server, fișierul va fi creat în director /Acasă. Pentru a modifica salvarea fișierului într-o cale diferită, specificați calea completă pentru salvarea fișierului în loc de nume, de exemplu: /var/www/backup/dump_file.sql.

  • În al doilea exemplu, în loc de operatorul „ > Se folosește „operator”. | ‘, ceea ce indică necesitatea de a efectua 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 –set-de-caractere-implicit=utf8Și –extended-insert=FALSE. Prima vă permite să specificați în mod explicit codificarea care este 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, de exemplu cp1251. Al doilea parametru vă permite să specificați că trebuie creată o comandă INSERT separată pentru fiecare înregistrare la export. Î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 de descărcare MySQL

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

Probabil ați fost nevoit să importați depozitele bazei de date de mai multe ori. Și în ciuda trivialității acestei sarcini, apar adesea întrebări și uneori probleme asociate cu aceasta. Mai jos este tot codul de care aveți nevoie pentru a aplica rapid un dump al bazei de date din linia de comandă.

SETĂ NUMELE utf8; DROP BAZĂ DE DATE `mydb`; CREAȚI BAZĂ DE DATE `mydb` SETUL DE CARACTERE IMPLICIT utf8; UTILIZAȚI `mydb`; SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET autocommit=0; SET foreign_key_checks=0; SET unique_checks=0; SOURCE /path/to/db_dump.sql; COMIT; SET autocommit=1; SET străine_key_checks=1; SET unique_checks=1;

Aceste comenzi vă vor permite să importați rapid un dump de bază de date și să evitați problemele. Mai mult, unele dintre aceste probleme nu sunt rezolvate nici măcar de clienții mysql obișnuiți, cum ar fi phpMyAdmin și alții.

Să încercăm să ne dăm seama acest codîn ordine.

SETĂ NUMELE utf8; spune că schimbul de date va avea loc în codificare UTF-8 și acolo se află dosarul original descărcarea bazei de date și asta va avea baza de date finală.

DROP BAZĂ DE DATE `mydb`;Și CREAȚI BAZĂ DE DATE `mydb` SETUL DE CARACTERE IMPLICIT utf8; a executa distrugere baza de date și crearea sa ulterioară cu codificarea implicită UTF-8. Este clar că acest lucru va șterge toate tabelele și datele din ele, dar acest lucru ne va da încredere că baza de date rezultată va corespunde pe deplin cu datele din fișierul de descărcare.

UTILIZAȚI `mydb`; indică faptul că această bază de date ar trebui utilizată pentru toate comenzile din fișierul dump (verificați fișierul dump pentru prezența acestei directive, indicând o altă bază de date pentru a evita confuzia).

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; dezactivează creșterea contorului de auto-increment atunci când scrieți valoarea 0 în câmpul de auto-increment. Implicit, când scrieți într-un astfel de câmp Valori NULL sau 0 este automat incrementat. Și, deși având o valoare de 0 într-un câmp auto-incremental, nu este cea mai buna practica, uneori se mai întâmplă să existe astfel de linii în dump (am întâlnit ceva asemănător într-un dump de la Magento). De asemenea, este de remarcat faptul că mysqldump include această directivă în mod implicit în depozitele sale de ceva timp.

SET autocommit=0;înainte de a încărca gunoiul și COMIT; după aceasta, accelerează execuția INSERT-urilor pentru tabelele InnoDB, deoarece atunci când modul auto-commit este activat, jurnalele sunt salvate pe disc cu fiecare INSERT. Poate ajuta la rularea gropilor mari.

SET foreign_key_checks=0; cea mai evidentă opțiune, fără de care majoritatea depozitelor nu ar putea fi aplicate deloc. Dezactivează verificările cheilor străine, ceea ce permite ca datele să fie scrise în orice ordine, inclusiv cu legături circulare prin chei externe. Această opțiune accelerează și importul de descărcare.

SET unique_checks=0; dezactivează verificările de unicitate pentru cheile secundare, ceea ce din nou poate accelera procesul de import.

Și, în sfârșit, Echipa de bază, de dragul căreia toate acestea au fost planificate - SOURCE /path/to/db_dump.sql; importă direct halda baze de date mysql din fișierul specificat. Calea către fișier poate fi absolută sau relativă la directorul din care ați accesat consola mysql.

Și după ce importul este finalizat, restabilim valoarea steagurilor, deși acest lucru nu este necesar, deoarece comanda A STABILITîn mysql, în mod implicit, modifică valorile variabilelor numai în contextul sesiunii curente.

Efectuarea unui dump de bază de date (backup) este foarte importantă. Așa că am făcut câteva comentarii cu exemple pentru asta utilitate excelenta ca mysqldump.

mysqldump - un utilitar care vă permite să descărcați conținutul unei baze de date sau al unui set de baze de date pentru a crea copie de rezervă sau trimiterea de 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 singur.

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 specifică continuarea chiar dacă este primită o eroare SQL, de exemplu. ignora erorile. De exemplu, dacă un rând identic există deja în tabel.

Pentru a evita solicitarea unei parole, trebuie să o scrieți imediat după -p, adică fără spații. Dacă parola Pwd, atunci exemplul ar arăta astfel:

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

Dacă utilizați adesea această comandă, atunci este mai bine să creați un utilizator separat cu drepturile necesare pentru a reduce vizibilitatea parolei root

Să luăm în considerare mai multe setări fine mysqldump:

--baze de date permite mysqldump să includă comenzile CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME și USE DBNAME în scriptul de recuperare. 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 singură bază de date și specifică în mod explicit unde ar trebui să fie plasate datele restaurate. Dacă se creează o copie de rezervă cu scopul de a face o copie completă a datelor, de exemplu, pe un alt server MySQL, atunci trebuie să utilizați această cheie;

--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- un comutator care va forța mysqldump să adauge o comandă drop table la scriptul rezultat înainte de a crea tabele. Acest lucru vă va permite să evitați unele erori la restaurarea unei baze de date dintr-o copie de rezervă. Desigur, trebuie să țineți cont de faptul că tabelele situate în 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. Folosind această cheie, puteți face rapid o copie a structurii tabelului/bazei 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 în sine care se află în 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 Unix obișnuită cu comanda „>” sau puteți folosi această cheie. Cui îi place ce;

Altul foarte sfaturi utile despre 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 împrumuta mai mult de o anumită sumă memorie fizică(RAM, RAM). mysqldump pune în memorie toate datele primite de la serverul MySQL, apoi le scrie pe disc. În consecință, dacă furnizorul vă permite să împrumutați, de exemplu, 30 MB de memorie, iar baza de date, pe care o copiați folosind mysqldump, ocupă 50 MB, desigur, aici va apărea o eroare - mysqldump nu va putea funcționa corect și se va prăbuși, despre care 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 cheia --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 la ce dată a fost făcută copierea 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ă faceți depozite 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 eliminarea arhivelor vechi, încercați să utilizați cron și comanda find, care se găsește de obicei în Unix. Alergând periodic

găsi~/director-cu-arhive -nume "*.gz" -mtime +7 -exec rm -f () \;

Astfel, veți șterge arhivele care sunt „mai vechi” de șapte zile.

Cele mai bune articole pe această temă