Uvoz mysql baza podataka. Kako uvesti veliku MySQL bazu podataka zaobilazeći phpMyAdmin ograničenja

24.03.2023

Dobar dan prijatelji, danas ćemo naučiti kako se to radi. Čemu služi, možete postaviti pitanje. Kao prvo izvoz baze podataka morate raditi periodično kako u hitnim situacijama ne biste izgubili važne informacije za vas. Izvoz će biti mala datoteka koja će pohraniti sve informacije o bazi podataka. Za izvoz baze podataka potrebno je da odete na PHPMyAdmin i kliknete na bazu podataka koja vas zanima. Nakon toga, vidjet ćete sve tabele u njemu i, bez ulaska u njih, kliknite na dugme menija koje se zove izvoz. Pred vama će se pojaviti sljedeća stranica:


Savjetujem vam da odaberete brzi način izvoza, a također navedete format SQL. Nakon toga možete pritisnuti ok. Vidjet ćete prozor u kojem se traži da sačuvate datoteku.


Datoteku čuvate na mjestu koje vam je potrebno, najvažnije je zapamtiti gdje ste ga sačuvali, jer nam je to jako važno.
Što se tiče uobičajenog načina izvoza. Možete ga koristiti i ako vam zatreba, postoji mnogo dodatnih postavki koje možete postaviti prilikom izvoza. Na primjer, odaberite potrebne tablice iz baze podataka, navedite kodiranje i još mnogo toga. Ako vas zanima ova postavka, možete je vidjeti. Ali nećemo ulaziti u ovu postavku.
Nakon što sačuvate datoteku na svom računaru, zamolit ću vas da izbrišete bazu podataka. Kako to učiniti, neću vam objašnjavati, jer smo to već prošli. Ne plašite se brisanja, mi ćemo sve sa vama vratiti na svoje mesto.
Vrijeme je da se zaposlite uvoz baze podataka. Idite na meni uvoza.


Odabiremo pregled vašeg računara i naznačavamo putanju do naše datoteke. I pritisnite ok. Kao što vidite, imate grešku. Ne budite uznemireni, stvar je u tome da nismo uvezli samu bazu podataka, već samo sve njene tabele. Stoga prvo kreirajte bazu podataka, uđite u nju i kliknite na dugme uvoz, nakon što ste uradili sve gore navedeno. Klikom na dugme OK, uspjet ćete, a ako ste sve uradili kako treba, greške ne bi trebalo da se pojave.


Kao što vidite, naša tabela se ponovo pojavila na svom mestu i svi podaci u njoj su sačuvani. Sada shvatate kakva je divna prilika izvoz i uvoz baze podataka u PHPMyAdmin. Uostalom, ako u jednom danu izgubite sve svoje razvoje dugi niz godina, zahvaljujući ovoj datoteci možete sve vratiti. S tim se uskoro opraštam od tebe.

Pozdrav, prijatelji! 🙂

Danas sam odlučio da nastavim razgovor o radu sa MySQL-om u konzoli i obratim pažnju na proceduru izvoza baze podataka. MySQL podaci.

U članku ću govoriti o tome kako napraviti deponiju MySQL baze podataka, kao i izvoz podataka iz MySQL u Excel datoteku i csv format.

Razmotrićemo različite opcije za izdvajanje informacija iz: kreiranja dumpa jedne i više baza podataka, izvoza podataka iz zasebnih tabela i rezultata proizvoljnih SELECT zahtjevi.

Takođe hajde da pričamo o tome kako prikazati podatke iz MySQL baze podataka u konzoli servera i komandna linija MySQL.

U ovom članku neću govoriti o tome kako izvesti podatke koristeći phpMyAdmin i druge vizualne alate.

Prvo, zato što na mreži već postoji dovoljno materijala na ovu temu. Štoviše, visokokvalitetan materijal, koji ne spaljujem sa željom da kopiram-paste.

I, drugo, ja sam u jednom od mojih članaka, o kojem sam govorio, ukratko razmatrao proces izlaza informacija iz MySQL baze podataka u SQL datoteku.

Dakle, ako niste profesionalni programer ili sistem administrator koji bi mogao pronaći korisne informacije o radu sa konzolom, a došli ste samo po uputstva o izvozu baze podataka u phpMyAdmin, onda se možete ograničiti na čitanje informacija sa gornjeg linka.

Želim da me ispravno shvatite: ne želim da vas ni na koji način uvrijedim, već samo želim da svoje vrijeme provedete sa maksimalnom koristi za stvar i dobijete ono što ste tražili.

Ovim je završen uvodni dio i prelazimo na pregled naredbi konzole za kreiranje dumpa MySQL baze podataka, koju sam odlučio sortirati po količini pohranjenih podataka: od izvoza cijele baze podataka u pojedinačne tabele i rezultata proizvoljnih upita .

Kreiranje dumpa MySQL baze podataka preko konzole

Želio bih da napravim malo pojašnjenje na samom početku.

Baza deponija je datoteka sa skupom SQL naredbi koja vam, kada se pokrene, omogućava da kreirate baze podataka i tabele, kao i da ih popunite informacijama. Dump je potreban za one koji žele preuzeti MySQL bazu podataka kako bi je kopirali na drugi server ili unutar postojećeg.

Takođe, ako neko nije upoznat, backup MySQL baze podataka je, u stvari, njen dump napravljen u određenom vremenskom periodu, što vam omogućava da vratite strukturu baze podataka i podatke ako je potrebno.

Izvoz podataka- to je samo izdvajanje informacija iz tabela u tekstualnom obliku za dalji rad sa tekstualnim ili grafičkim uređivačima.

Stoga će naredbe za ove radnje biti malo drugačije.

Da bi kreirao dump baze podataka, MySQL ima ugrađeni uslužni program koji se zove mysqldump, koji će se koristiti izvan MySQL komandne linije u konzoli servera ili drugoj ljusci.

Dakle, za najjednostavniju i najčešću opciju – izvoz podataka iz određene baze podataka u MySQL konzolu da biste ih prenijeli na drugi server ili internu kopiju, trebate pokrenuti sljedeću naredbu:

mysqldump -u korisničko ime -p ime_baze_datoteke > staza_i_ime_datoteke_dump

Ovaj uslužni program može kreirati dumpove MySQL baze podataka samo u obliku datoteka sa SQL komandama, tako da bez obzira na ekstenziju koju odaberete za svoju datoteku, u svakom slučaju, njen sadržaj će biti isti. I ne zaboravite provjeriti dozvole pisanja direktorija u kojem će se nalaziti prije izvoza informacija iz MySQL-a, kako bi kreiranje datoteke bilo moguće.

Ako iznenada trebate napraviti dump sa svim bazama podataka na serveru, koristite sljedeću opciju naredbe:

mysqldump -u korisničko ime -p --sve-baze podataka > ime_datoteke_pute i_dump_datoteke

Da biste izbacili samo nekoliko određenih baza podataka, morate pozvati mysqldump sa sljedećim opcijama:

mysqldump -u korisničko ime -p --baze podataka ime_baze1, ime_baze2, ... > staza i ime_datoteke_dump

Kao rezultat toga, u svakom slučaju ćete dobiti MySQL dump baze podataka koji sadrži naredbe za kreiranje strukture sadržanih tabela (polja, njihovi tipovi, indeksi, ključevi, itd.), kao i operacije za njihovo popunjavanje podacima.

Ova opcija je prikladna samo za vraćanje i kopiranje cijelih baza podataka.

O tome kako napraviti sigurnosne kopije određenih MySQL tabela i dobiti njihove podatke u čitljivom obliku biće više riječi.

Izbacivanje MySQL tabele i izvoz podataka

Da bismo kreirali dump određenih MySQL tabela baze podataka, potreban nam je isti uslužni program mysqldump, pozvan sa sljedećim parametrima:

mysqldump -u korisničko ime -p ime_baze_tablice_ime_1, ime_tabele2, ... > staza_i_ime_datoteke_dump

Čak i kada pozivate mysqldump, možete specificirati potrebne tablice kao vrijednost parametra --stolovi, kada se koristi parametar --baze podatakaće biti zanemareno:

mysqldump -u korisničko ime -p --baze podataka ime_baze1, ime_baze2 --tabele ime_tabele1, ime_tabele2, ... > staza_i_ime_datoteke

Gornji primjer će prikazati sljedeću grešku:

Mysqldump: Dobio sam grešku: 1049: Nepoznata baza podataka "ime_baze1" prilikom odabira baze podataka

Kao što vidite, koristit će se samo najnovija baza podataka sa liste navedenih. U principu, ovakvo ponašanje je sasvim logično, jer. sve baze podataka možda ne sadrže navedene tablice.

U redu, imamo deponiju tabela MySQL baze podataka. Može se koristiti za njihovo vraćanje ili kopiranje zajedno sa strukturom.

Ali šta ako samo trebate dobiti informacije pohranjene u njima i, po mogućnosti, u čitljivom obliku, tako da ih možete poslati menadžeru i pregledati u običnom uređivaču teksta ili proračunskih tablica? MySQL takođe ima alate za to.

Mogućnost pozivanja komunalnog preduzeća pomoći će nam da ostvarimo svoje ciljeve. mysql sa konzole sa određenim parametrima:

Mysql -u korisničko ime -p ime_baze -e "IZABIR * IZ ime_tablice"

Ova naredba će nam omogućiti da izvršimo upit prema potrebnoj bazi podataka i iznesemo rezultat na konzolu bez odlaska u MySQL komandnu liniju.

Pa, kako ne bi izlazili podatke na konzolu, već da biste ih zapisali u datoteku, trebate dopuniti naredbu na sljedeći način:

Mysql -u korisničko ime -p -e "SELECT * FROM tablename" > path_and_filename

Zahvaljujući ovim konstrukcijama, ne možemo dobiti samo podatke pohranjene u svim poljima tabele, već iu pojedinim. Da biste to učinili, umjesto zamjenskih znakova (*) dovoljno je registrirati tražene znakove odvojene zarezom.

Kao rezultat, na izlazu ćemo dobiti običnu tekstualnu datoteku, koja će sadržavati nazive polja u obliku zaglavlja i informacije o njima za sve zapise. Može se otvoriti normalno uređivač teksta, bez obzira koju rezoluciju date prilikom kreiranja.

Ako želite da izvezete podatke iz MySQL baze podataka u xls ili csv formatu kako bi se rezultirajući fajl ispravno prikazao u uređivačima proračunskih tablica, o tome će biti riječi malo kasnije 🙂

Kreiranje rezervnih kopija i izdvajanje podataka iz MySQL baze podataka pomoću upita

Razgovarali smo o tome kako da izbacite MySQL bazu podataka - jednu i nekoliko, kao i njihove pojedinačne tabele. Ali ponekad u praksi postoje slučajevi kada je potrebno da izvezete skup podataka koji nije ograničen na jednu tabelu. Ili trebate odabrati samo neke podatke iz tabele.

S tim se posebno često suočavaju programeri korporativnih projekata kada menadžeri od njih traže da dostave sve vrste statističkih podataka. Ili kada trebate napraviti sigurnosnu kopiju određenog dijela tabele za njegov brzi oporavak.

Za pravljenje rezervnih kopija, potreban nam je isti uslužni program mysqldump, koji bi se trebao zvati ovako:

Mysqldump -u korisničko ime -p dbname ime_tablice --gdje "potraži" > path_and_dump_file_name

Kao rezultat, dobit ćemo datoteku sa SQL naredbama za kreiranje tablice s cijelom strukturom, koja će nakon kreiranja biti popunjena informacijama odabranim pomoću upita za pretraživanje.

Ako samo trebamo dobiti podatke pohranjene u jednoj ili više tablica, onda moramo modificirati naredbu korištenu u prethodnom slučaju kako bismo odabrali sve podatke u tablici, uz samo nekoliko pojašnjenja:

Mysql -u korisničko ime -p -e "SELECT * FROM table_name WHERE lookup" > path_and_file_name

Kao što razumijete, pored raznih pojašnjenja navedenih u zahtjevu pomoću direktive GDJE, možete koristiti druge SQL konstrukcije: PRIDRUŽITE SE, UNION itd.

Bilo koja statistika se može prikupiti 🙂

Ista radnja se također može izvesti iz MySQL komandne linije sa sljedećom naredbom:

SELECT * FROM database_table WHERE traženje INTO OUTFILE "path_and_file_name";

Ova komanda je samo dizajnirana za kreiranje datoteka s rezultatima odabira. Štaviše, rezultati se ne mogu samo eksportovati u datoteke, već i zapisati u varijable, a izlazni podaci se mogu formatirati na različite načine.

Ako je gore navedeno vaš slučaj, onda možete pronaći potpunu listu parametara i opcija za pozivanje ove komande ovdje - https://dev.mysql.com/doc/refman/5.7/en/select-into.html

Na kraju mog kratkog obilaska mysqldump, želim dati opciju pozivanja naredbe sa listom parametara za kreiranje optimizovanog dump-a MySQL baze podataka i tabela, vraćanje baze podataka i pojedinačnih tabela iz kojih će biti potrebno manje vremena od sa normalnim pozivom:

mysqldump -u korisničko ime -h MySQL_server_host_or_IP -p --nema autocommit --opt ime_baze > staza_i_ime_datoteke_dump;

Radi eksperimenta, koristio sam ovu opciju kako bih izbacio bazu podataka MySQL veličina na 143 MB. Naknadno vraćanje je trajalo 59 sekundi u odnosu na 1 minut i 3 sekunde kada je baza podataka vraćena iz dumpa napravljenog pozivom mysqldump bez posebnih opcija.

Slažem se da je ovo sitnica. Ali to je samo u slučaju dati volumen podaci. Ako koristite ovu tehniku kada kreirate dump veći od 1GB, razlika će biti značajnija.

Ako naiđete na takvu situaciju, ne zaboravite prvo spakovati MySQL dump baze podataka u arhivu. tar.gz je najbolji. Tada će oporavak trajati još manje vremena.

Izvezite podatke iz MySQL u Excel i csv datoteke

Nisam uzalud spojio informacije o izlazu informacija iz MySQL-a u ova dva formata u jednom bloku, jer vrlo su slične, koriste se na približno isti način (za strukturiranje informacija u obliku tabela) i iste komande će biti pozvane za izvoz.

Kao što znate, jedina značajna razlika između ovih formata je u tome što ekstenzije xls i xlsx imaju datoteke kreirane u Microsoft programu. Office Excel, koji radi samo pod Windowsom, dok su csv datoteke svestranije i operacije s njima moguće su u mnogim uređivačima.

To ne znači da se xls neće otvoriti nigdje osim Microsoft Office Excel-a. Isti OpenOffice potvrđuje suprotno.

Ali za ovu mogućnost, ova podrška mora biti prisutna u softverskom proizvodu. csv datoteke su čitljive čak iu običnom uređivaču teksta kao što je Notepad, samo što ovaj obrazac neće biti u potpunosti čitljiv.

Za početak, samo rezultati se mogu izvesti u xls ili csv SQL upiti, sa kojim smo ranije naučili da radimo, jer cijelu bazu podataka u jednu datoteku neće biti moguće prikazati u jednoj operaciji.

Prvo, ovo nije optimalno, jer takva datoteka se vjerovatno neće otvoriti s velikom količinom informacija pohranjenih u bazi podataka. I, drugo, nije jasno kako razbiti informacije u tabele i polja unutar datoteke.

Ne, to je, naravno, moguće učiniti, ali je malo vjerovatno da će to učiniti jedna naredba, a općenito je malo vjerovatno da će to iko raditi u konzoli. Mislim da će vam za ove svrhe trebati poseban softver, ili barem skripta.

Ako odjednom znate kako možete izvesti informacije iz cijele MySQL baze podataka u jednu ili više xls datoteka u konzoli odjednom, onda pišite o tome u komentarima. Mislim da će čitanje o tome biti korisno mnogima.

Dakle, ako govorimo o tome kako izvesti podatke iz MySQL u xls i csv, onda to možete učiniti direktno u konzoli servera putem uslužnog programa mysql ili u radu s kojim sam vas upoznao u svom prethodnom članku.

Počnimo redom.

Možete izvesti podatke iz MySQL baze podataka u csv i xls formate direktno u konzoli servera koristeći sljedeće naredbe.

On linux sistemi:

Mysql -u korisničko ime -d dbname -p -e "SELECT * FROM dbtable;" | sed "s/"/\"/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > path_and_file_name. csv

U principu, ako je apsolutno neophodno, ovu naredbu možete koristiti za izvoz MySQL podataka u Excel datoteku. Ali, da budem iskren, nisam se bavio podacima u praksi, a šta će na kraju ispasti - nemam pojma, jer. Sada radim pod Windowsom. Ako koristite ovu naredbu pod Linuxom, molimo napišite u komentarima rezultate svog rada. Mislim da će informacije biti interesantne svima.

On Windows:

Izvoz podataka iz MySQL tabela u csv gornjom naredbom, nažalost, u ovom slučaju neće uspjeti, jer Windows, za razliku od Linuxa, nema ugrađen naredba konzole za rad sa streamovima, koji je sed na Linuxu.

Instalirati ga, naravno, možete, ali previše problema. Alternativno, također možete koristiti CygWin je emulator Linux konzole za Windows sisteme.

Pa, ako ga već imate instaliran. Inače će nam izvoz podataka iz MySQL baze podataka na odabrani način donijeti previše problema.

Ali izdvajanje informacija u xls datoteku je jednostavno kao 5 kopejki 🙂 Vrlo je lako pokrenuti je na sljedeći način, što sam lično isprobao:

Mysql -u korisničko ime -d dbname -p -e "SELECT * FROM dbtable;" > path_and_file_name.xls

otvorena dati fajl u Microsoft Office Excel-u bez ikakvih problema. Jedino što se prilikom otvaranja pojavila poruka sa upozorenjem da se stvarni format datoteke koja se otvara razlikuje od navedene ekstenzije.

Ali prilikom potvrde radnje, dokument se otvorio bez poteškoća - sve su informacije podijeljene u ćelije u obliku u kojem su pohranjene u samoj tablici.

Ne znam, možda će se pri izvođenju bilo kakvih konkretnih radnji u Microsoft Office Excel-u pojaviti problemi u budućnosti, nisam tako duboko kopao. Barem u uobičajenom pogledu na podatke nisam naišao na ništa neobično.

Ako naiđete na bilo kakve probleme u procesu korištenja xls datoteke izvezene iz MySQL-a, bilo u ovom programu ili u drugim, molimo vas da me obavijestite u komentarima.

Na gore opisani način, u principu možete izvesti sadržaj MySQL baze podataka u csv datoteku. Ali tada će podaci iz različitih polja tabele biti upisani masovno, bez separatora, što može biti loše prikazano u razni programi za rad sa tabelama, u kojima obično rade sa csv datotekama.

OpenOffice, inače, nije briga 🙂 Automatski je razgraničio informacije dobijene načinom na koji smo eksportovali sadržaj MySQL baze podataka u xls. Ne znam kako to radi - ali preporučujem da ga koristite 🙂

Pa, isti Microsoft Office Excel je prikazao sve informacije koje odgovaraju jednom zapisu u tabeli, upisujući ih u jednu ćeliju bez ikakvih separatora. Mislim da će i drugi uređivači tabela učiniti isto.

Stoga, kada izvozite MySQL bazu podataka u csv datoteke, to morate učiniti tako što ćete informacije odvojiti posebnim znakovima koje urednici prihvaćaju.

I ovdje sam glatko pristupio drugom načinu izvoza MySQL podataka u csv i xls, a to je korištenje MySQL komandne linije.

Dakle, da bismo na ovaj način izvezli MySQL podatke u csv datoteku, potrebna nam je sljedeća naredba:

SELECT * FROM database_table INTO OUTFILE "path_and_file_name.csv" POLJA ZAVRŠENA SA "," ZATVORENA SA """ REDOVIMA ZAVRŠENA SA "\n";

Kao rezultat njegovog izvršenja, dobićete csv datoteku na putanji koju ste naveli prilikom poziva, koja će se ispravno otvoriti u većini modernih uređivača tabela. Za svaki slučaj, podsjećam te da trčiš data komanda potrebno samo nakon povezivanja na MySQL bazu podataka.

Ova komanda je takođe odlična za izvoz MySQL podataka u xls datoteku za ispravan prikaz u Microsoft Office Excel-u. Samo u ovom slučaju ne trebaju nam separatori, jer oni će ometati razlaganje informacija u ćelije:

SELECT * FROM database_table INTO OUTFILE "path_and_file_name.xls";

Međutim, u praksi nije sve tako jednostavno kao što sam opisao. Tokom izvršavanja naredbe, možete naići na sljedeću grešku u konzoli koja sprječava dovršetak izvoza:

GREŠKA 1290 (HY000): MySQL server radi sa opcijom --secure-file-priv tako da ne može izvršiti ovu naredbu

To je uzrokovano time što je vaš MySQL server pokrenut sa opcijom --secure-file-priv. Lično sam naišao na ovaj problem zbog činjenice da za rad u konzoli koristim MySQL distributivni komplet uključen u WAMP OpenServer komplet, koji zauzvrat pokreće MySQL server na ovaj način.

Ovdje postoje dva načina za rješavanje problema:

  • Promijenite opcije pokretanja MySQL servera
  • Promjena putanje do odredišne ​​MySQL datoteke za izvoz

Prva metoda mi se učinila previše komplikovanom, jer. Morao bih da se zadubim u OpenServer konfiguraciju, koju nisam ja napisao sa svim pratećim okolnostima 🙂 Stoga sam odlučio da krenem drugim putem. Ako naiđete na sličan problem, ponovite za mnom.

Prvo morate otići na MySQL komandnu liniju i pokrenuti jednu od sljedećih naredbi:

PRIKAŽI VARIJABLE KAO "secure_file_priv"; SELECT @@GLOBAL.secure_file_priv;

Rezultat izvršenja oba bit će vrijednost MySQL globalne varijable secure_file_priv, koji sadrži putanju do direktorijuma preko kojeg se mogu izvršiti operacije izvoza i uvoza MySQL podataka (ubuduće link na članak o uvozu podataka).

One. kada koristite komande LOAD DATA I SELECT ... INTO OUTFILE izvezene i uvezene datoteke mogu se nalaziti samo unutar ovog direktorija.

U mom slučaju, ova varijabla je uopće imala postavljenu vrijednost NULL, jer Ja, kao što sam već rekao, koristim MySQL uslužne programe iz distribucije uključene u OpenServer za rad u konzoli. Zadana vrijednost naznačio je da su operacije izvoza i uvoza MySQL podataka koje koriste navedene komande potpuno zatvorene.

Kako se kasnije ispostavilo, ovo je uobičajena situacija u slučaju korištenja upakiranih WAMP i MAMP servera.

Nažalost, u mom slučaju nije bilo moguće koristiti uobičajene metode promjene vrijednosti MySQL globalnih varijabli:

SET ime_varijable = vrijednost;

Kao rezultat, vidio sam samo sljedeću grešku na konzoli:

GREŠKA 1238 (HY000) u redu 1: Varijabla "secure_file_priv" je varijabla samo za čitanje.

Konačno, za promjenu vrijednosti varijable secure_file_priv i otvorim operacije izvoza i uvoza, morao sam ući u MySQL konfiguracijsku datoteku mysql.ini, koja se nalazi u korijenskom direktoriju MySQL distribucije, ili joj se može pristupiti na drugi način ako je MySQL uključen u vaš WAMP/LAMP/ Izrada MAMP servera.

Usput, ako želite promijeniti putanju do direktorija bafera za razmjenu datoteka, morat ćete učiniti isto.

U mom slučaju, ova varijabla je već postojala u konfiguraciji, samo u komentarisanom obliku:

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

Ako ga nemate, napišite ga od nule u odjeljku (barem se tamo nalazi).

Dekomentirao sam ga i odlučio da ga koristim u obliku u kojem je napisan. One. prilikom izvoza podataka iz MySQL-a i povratnog uvoza, moji fajlovi će sada biti pohranjeni u direktoriju c:\openserver\userdata\temp\.

Nakon promjene konfiguracije (bilo koja, usput), ne zaboravite ponovo pokrenuti svoj server ili zasebnu uslugu, čije ste postavke ispravili, ako je moguće, kako bi promjene stupile na snagu!

Da biste bili sigurni, nakon ponovnog pokretanja MySQL servera, još jednom prikažite varijablu secure_file_priv i kopirajte njegovu vrijednost u međuspremnik.

I sada trebamo pozvati naredbu, kao na početku, samo prije imena datoteke u koju će biti spremljene informacije iz MySQL baze podataka, upisati putanju pohranjenu u varijabli koju mijenjamo u sljedećem obliku:

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

Nakon toga je u mom slučaju proradio izvoz podataka iz MySQL-a.

Važna tačka! Ako radite sa MySQL-om pod Windowsom, onda ne zaboravite promijeniti "\" u "/" kada navedete putanju do datoteke, inače će se pojaviti greška sa --secure-file-priv ionako će se nastaviti pojavljivati.

Ovaj članak o tome kako izbaciti MySQL bazu podataka i njene tabele, kao i kako izvesti podatke iz MySQL tabela u različite formate, dolazi do kraja. Napišite svoje povratne informacije u komentarima i podijelite ih sa svim opcijama skripte koje najčešće koristite u praksi.

Ako vam se dopao članak, možete se zahvaliti autoru ponovnim objavljivanjem članka društvenim medijima ili finansijski koristeći formu ispod, tako da možete platiti osnovni hosting.

Sretno svima i vidimo se uskoro! 🙂

P.S.: ako vam je potrebna web stranica ili trebate napraviti izmjene na postojećoj, a za to nema vremena i želje, mogu vam ponuditi svoje usluge.

Preko 5 godina iskustva profesionalni razvoj web stranica. Rad sa PHP

Često me pitaju kako se velika MySQL baza podataka može uvesti na server. Poznato je da po defaultu phpMyAdmin ima ograničenja na veličinu uvezene baze podataka.

Ako vaš dump ne premašuje mnogo dozvoljenu granicu, možete ga podijeliti na nekoliko dijelova i uvesti u nekoliko prolaza. Ovo je opravdano ako je, na primjer, ograničenje 2Mb, a vaša baza podataka 5-10Mb. Jasno je da je "rezanje" baze podataka od 100MB na 50 dijelova prilično dugotrajan i skup proces u smislu vremenskih resursa.

Postoji nekoliko opcija za rješavanje ovog problema.

Uređivanje konfiguracije web servera

Nema posebnih problema s ovim na VDS / VPS, samo trebate ispraviti konfiguraciju. Naime, u php.ini povećajte dozvoljene maksimalne vrijednosti za fajlove uploadovane na server, maksimalnu veličinu za fajlove prenete POST metodom:

Post_max_size = 2000M upload_max_filesize = 2000M

Osim toga, ako je vaša baza podataka vrlo velika, trebali biste povećati maksimalno dozvoljeno vrijeme izvršavanja skripte.

max_execution_time = 32000 max_input_time = 32000

I za svaki slučaj, možete povećati veličinu dozvoljene količine RAM-a:

memory_limit = 512M

Nakon unošenja izmjena, obavezno ponovo pokrenite web server.

Jasno je da ova metoda nije prikladna za virtuelni hosting, jer to ne podrazumijeva mogućnost uređivanja konfiguracija.

Sypex Dumper

Možete koristiti softver treće strane. I prva aplikacija na koju vrijedi obratiti pažnju je Sypex Dumper.

Pošto sam ga prvi put koristio prije mnogo godina i pošto sam cijenio sve njegove mogućnosti i prednosti, sa sigurnošću ga mogu označiti kao “Must Have”. Sypex Dumper je PHP serverska aplikacija koja ne zahtijeva instalaciju. Dovoljno je da ga kopirate, na primjer, u korijen vaše stranice u sxd direktoriju i pozovete ga u pretraživaču: http://Your_Site/sxd/. Vrijedi napomenuti da prvo morate postaviti dump svoje baze podataka u direktorij rezervne kopije. Nakon što se skripta inicijalizira, vidjet ćete autorizacijski panel za povezivanje s bazom podataka. Unesite svoju prijavu i lozinku. Host i port su opcioni samo ako su specifični.

Nakon autorizacije, možete ići direktno na uvoz baze podataka. Na terenu "baza podataka" biće odabrana baza podataka na koju ste povezani i u polju "File" vidjet ćete dump koji ste ranije učitali u Backup direktorij.

U većini slučajeva, nijedan dodatna podešavanja više nisu potrebni i možete bezbedno započeti uvoz klikom na dugme "Pokreni". Uvoz, ovisno o veličini baze podataka i brzini vaše internetske veze, može potrajati neko vrijeme. Tokom uvoza možete vidjeti koje se tabele trenutno uvoze u bazu podataka. Po završetku skripte, vidjet ćete dnevnik izvršenja. To izgleda otprilike ovako:

To je, zapravo, sve - baza podataka je uvezena!

Konzola

Uvoz preko konzole neće se razmatrati. Mislim da ljudi koji koriste konzolu bez mene znaju kako da uvezu bilo koju bazu podataka. I bolje je za obične korisnike bez posebne obuke da se tu ne miješaju. Pošto izvršavanje nekih naredbi može dovesti do ozbiljnih posljedica, sve do potpunog pada servera.

Konačno

Ne usuđujem se reći da je Sydex Dumper jedino i ispravno rješenje. Postoje i drugi elegantniji načini koji zahtijevaju od korisnika određeno znanje i odgovarajući pristup postavkama servera.

Ali u okruženju zajedničkog hostinga, Sydex Dumper će sigurno biti vaš nezamjenjiv pomoćnik.

Pretplatite se na moj telegram i budite prvi koji će primati nove materijale, uključujući i one koji nisu na stranici.

Baze podataka (ili skraćeno DB) na većini lokacija imaju veličinu (težinu) jednaku nekoliko desetina Mb (megabajta). Početna veličina baze podataka na početku različitih projekata zavisi od strukture samog sajta (CMS), ali onda se njihova težina povećava sa svakim novim unosom.

Zapisi mogu biti informacije o registraciji korisnika, komentari, lične poruke, proizvodi, vijesti i drugi podaci pohranjeni u bazi podataka stranice.

Imao sam priliku da radim sa nekoliko sajtova, čija je veličina baza podataka prelazila 500 MB (megabajta), a na nekima čak i 2 GB (gigabajta). Budući da je baze podataka ove veličine teško prenijeti standardnim metodama (zbog hostinga i ograničenja pretraživača), podijelit ću s vama nekoliko radnih metoda koje će vam pomoći u rješavanju takvih zadataka (migracija velikih baza podataka).

Izvoz (preuzimanje) velikih MySQL baza podataka putem Sypex Dumper-a

Dakle, krenimo s vama u razmatranje rješavanja postavljenih zadataka lakšom opcijom, odnosno gotovim rješenjem.

"Sypex Dumper" je softverski proizvod napisan na PHP-u koji vam omogućava rad sa bazama podataka bez korištenja phpMyAdmin-a. Prednosti "Sypex Dumper" uključuju:

  1. Višejezično (podržava više jezika).
  2. Postoji besplatna verzija skripte (ovo je sasvim dovoljno za naše zadatke).
  3. Velika brzina izvršavanja zadatka.
  4. Rad sa velikim bazama podataka.
  5. Pogodan i jasan interfejs.
  6. I mnogo drugih zanimljivih "čipova".

Koristit ćemo ih za preuzimanje (transfer) velikih baza podataka.

Da biste izvezli (dobili, preuzeli) bazu podataka Vašeg sajta za dalju upotrebu, potrebno je da uradite sledeće.

1. besplatno sa naše web stranice.

2. sxd na način koji Vama odgovara.

3. Zatim idite na (Gdje your_site.com Da uđem».

4. Na stranici koja se otvori (sa uspješnom autorizacijom) kliknite 1 put na odjeljak " Izvoz» u gornjem meniju. Ukoliko je korisniku dostupno više baza podataka, sa padajuće liste izaberite onu koju ćemo izvesti (preuzeti). Preostale postavke možete ostaviti nepromijenjene i kliknuti na " Trči».


Želim napomenuti da ne možete izvesti cijelu bazu podataka, već samo neke njene tabele ako je potrebno.

5. Nakon što je proces spremanja baze podataka završen (to možete razumjeti po traku napretka), možete preuzeti potrebnu bazu podataka klikom na odgovarajuće dugme.


Osim toga, sve izvezene baze podataka bit će pohranjene na vašoj web lokaciji usput. /sxd/backup/. Ako pohranjivanje baze podataka ne uspije, provjerite da li je folder backup dozvole za pisanje su 777.

Ovo završava izvoz (preuzimanje) baze podataka.

Uvoz (učitavanje) velikih MySQL baza podataka putem Sypex Dumpera

Iznad smo s vama razgovarali o načinu dobivanja potrebne baze podataka, sada je trebate prenijeti (uvesti) u drugi projekat, a za to radimo sljedeće.

1. besplatno sa naše web stranice.

2. Raspakujte arhivu i otpremite fasciklu na sajt sxd na način koji Vama odgovara.

3. U folder /sxd/backup/ učitati prethodno dobijenu (preuzetu) bazu podataka.

4. Dalje idi na http://your_site.ru/sxd/index.php(Gdje your_site.com– domena Vaše stranice), nakon čega će se ispred Vas otvoriti obrazac za unos podataka. U njemu navedete podatke korisnika koji ima prava upravljanja bazom podataka koja vam je potrebna i kliknete " Da uđem».

5. Na stranici koja se otvori (sa uspješnom autorizacijom) kliknite 1 put na odjeljak " Uvoz» u gornjem meniju. Ako je korisniku dostupno više baza podataka, sa padajuće liste odaberite onu u koju ćemo uvesti (učitati) podatke. Preostale postavke možete ostaviti nepromijenjene i kliknuti na " Trči».


Želim napomenuti da možete uvesti ne cijelu bazu podataka, već samo neke od njenih tablica ako je potrebno.

6. Nakon završetka procesa uvoza (učitavanja) baze podataka (to možete razumjeti po traku napretka), zadatak se može smatrati završenim.


Izvoz (preuzimanje) velikih MySQL baza podataka preko SSH terminala

SSH je mrežni protokol koji vam omogućava daljinski (putem specijalni timovi) upravljati sistemom ili serverom. U Windows-u postoji mnogo programa za rad s ovim protokolom, od kojih je najpopularniji PuTTY.

Na nekim hostingima, kao što je, na primjer, postoji ugrađeni Terminal desno u kontrolnoj tabli. Nećemo ići daleko i razmotriti zadatak opisan u naslovu koristeći njegov primjer. Vrijedi napomenuti da se operacije opisane u nastavku također mogu obaviti u zasebnom SSH klijentu.

1. Pokrećemo terminal. Na njemu izgleda ovako:


2. Ako se na server povezujete preko programa treće strane, prijavite se na njega unošenjem odgovarajućih podataka (možete ih dobiti na kontrolnoj tabli hostinga ili od vašeg hosting provajdera).

sekunda- Ovo:

mysqldump -u KORISNIČKO IME -p BAZA PODATAKA > backup.sql

direktno sam izvoz, gdje:

USERNAME– prijava korisnika koji ima pristup bazi podataka.

BAZA PODATAKA– naziv baze podataka koju želimo da izvezemo.

backup.sql– naziv datoteke u koju će se baza podataka sačuvati i putanja u odnosu na . S ovim dizajnom, baza podataka će biti spremljena u root hosting.

4. u trećem korakuEnter" na tastaturi. Bilješka

Nakon što server ponovo bude spreman da prihvati komande putem SSH-a, to će značiti da je izvoz baze podataka završen i da je možete preuzeti preko FTP-a ili putem hosting fajl menadžera.

Proces izvoza (i uvoza) na SSH se ne emituje, a ako je vaša baza podataka prilično velika, budite strpljivi jer odgovor sa servera možete dobiti nakon više od 20 minuta.

Uvoz (upload) velikih MySQL baza podataka preko SSH terminala

Što je SSH, već smo saznali gore, a sada ćemo početi razmatrati kako uvesti prethodno preuzetu bazu podataka u drugi projekt.

1. u korenu vašeg hosting, preuzmite prethodno preuzetu bazu podataka na način koji vam odgovara.

2. Povežite se na svoj hosting/server putem SSH-a.

tako da definitivno idemo na hosting root, i sekunda- Ovo:

Tako dobijamo kompletnu listu datoteka i direktorijuma u trenutnom direktorijumu. Tražimo da uključimo našu prethodno učitanu bazu podataka.

4. Ako je sve u redu i baza je na svom mjestu, unesite posljednju naredbu:

mysql -u KORISNIČKO IME -p BAZA PODATAKA< backup.sql

USERNAME– prijava korisnika koji ima pristup bazi podataka.

BAZA PODATAKA– naziv baze podataka u koju ćemo uvesti podatke.

backup.sql- naziv datoteke koja će se učitati i putanja u odnosu na . Sa ovim dizajnom, baza podataka će biti uvezena iz korijena hostinga.

5. Nakon unosa naredbe, od vas će biti zatraženo da unesete lozinku od korisnika kojeg ste naveli u četvrtom koraku. Unesite svoju lozinku i kliknite " Enter" na tastaturi. Bilješka da se unos lozinke u SSH terminalu ne prikazuje, odnosno unesete lozinku ili je zalijepite - na njenom mjestu uvijek će biti prazan prostor.

Nakon toga, kada server ponovo bude spreman da prihvati komande putem SSH-a, to će značiti da je uvoz baze podataka završen i da možete nastaviti rad na projektu.

Dobar dan, kolege 🙂

Danas ću nastaviti da vas upoznajem sa radom sa MySQL u MySQL konzoli i MySQL komandnoj liniji.

Već sam pisao članke o tome kako izvršiti osnovne radnje sa MySQL podacima kroz konzolu i napraviti rezervnu kopiju MySQL baze podataka, kao i eksportovati informacije pohranjene u njoj.

Logičan nastavak ove priče bit će restauracija baze podataka i informacija pohranjenih u njoj korištenjem MySQL operacija uvoza baze podataka. I, što je najvažnije, nastavićemo da to radimo sa alatom svih hard developera - kroz konzolu.

Ako su vam potrebne upute za uvoz baze podataka putem phpMyAdmin-a, možete ih pronaći u članku o. U sadašnjem članku ne želim to ponovo opisivati, pogotovo jer će današnji materijal biti posvećen isključivo uvozu MySQL baze podataka preko konzole.

Ali, pre nego što počnemo da razmatramo načine i alate, nekoliko reči o tome šta je uvoz MySQL baze podataka, kakav je to i koji je najbolji način za to?

Uvoz MySQL baze podataka: šta i zašto?

Uvoz MySQL baze podataka je operacija koja popunjava bazu podataka informacijama. U ovom slučaju, izvor podataka je dump datoteka - snimak druge baze podataka, automatski kreiran tokom operacije izvoza, ili posebno pripremljena SQL skripta.

Uvoz, kao i izvoz MySQL baze podataka, postoje dvije vrste informacija pohranjenih u bazi podataka:

  1. struktura baze podataka, njene tabele i podaci pohranjeni u njima (kolokvijalno se nazivaju deponijom baze podataka);
  2. samo podaci pohranjeni u tabeli ili prikupljeni pomoću SELECT zahtjevi.

Ovaj članak će pokriti obje opcije.

Da biste vratili bazu podataka iz MySQL dump-a sa njenom strukturom i svim pohranjenim informacijama, kao što je već spomenuto, potrebna vam je datoteka dump-a baze podataka, koja je tekstualna datoteka s bilo kojom ekstenzijom (može se prvo spakovati u arhivu kako bi se smanjila veličina), sadrži SQL komande za kreiranje same baze podataka i tabela, kao i njihovo popunjavanje informacijama.

Stoga, da biste vratili MySQL bazu podataka iz dumpa, morate izvršiti naredbe sadržane u datoteci.

Za normalan oporavak podataka takve složenosti nisu potrebne. Dovoljno je imati na raspolaganju test datoteku, u kojoj će informacije biti strukturirane na isti način kao u tabeli baze podataka: broj kolona sa informacijama odgovara broju atributa unosa tabele.

Za ove svrhe, uobičajeno txt fajl, podaci u kojima će biti podijeljeni ili datoteke kreirane u posebnim uređivačima proračunskih tablica (Microsoft Office Excel, OpenOffice, itd.) koji imaju različite ekstenzije: xls, csv, odt itd.

Ovi formati su čak i poželjniji, jer. kada se kreiraju, uređivači automatski dodaju graničnike podataka i nema potrebe da ih unosite zasebno, kao u slučaju obične tekstualne datoteke.

Dodavanje podataka u MySQL: Alati

Što se tiče alata za uvoz MySQL baze podataka, mogu reći da ih danas postoje tri.

Navest ću ih, počevši od najnižeg nivoa, do najvišeg nivoa (u smislu korištenja svih vrsta školjki i dodataka):

  1. Serverska konzola i MySQL komandna linija;
  2. Skripte napisane na programskim jezicima koje vam omogućavaju da upišete podatke u MySQL pomoću jezičkih alata;
  3. Gotovi programi koji pružaju vizuelni interfejs za rad sa bazom podataka (isti phpMyAdmin, MySQL WorkBench, MySQL Manager itd.).

Mislim da poredak instrumenata neće izazvati nikakva pitanja, jer. Alati programskog jezika po pravilu rade na osnovu komandi MySQL konzole, a programi se baziraju na skriptama ili rade direktno sa MySQL komandnom linijom.

Na ovaj ili onaj način, konzola je na čelu svega, a ostali alati su, u stvari, njeni emulatori.

Stoga, korištenje konzole prilikom uvoza podataka u MySQL omogućava vam da zaobiđete razne vrste ograničenja postavljenih postavkama programskih jezika na web serveru i samim programima (koji se, inače, ne mogu uvijek mijenjati).

Zbog toga popunjavanje MySQL baze podataka preko konzole može biti ne samo brže, već i u principu omogućiti ovu operaciju, jer skripte i programi imaju tendenciju da prekinu uvoz kada se dostigne maksimalno vrijeme izvršavanja skripte ili da se uopće ne počnu zbog veličine preuzete datoteke.

Mislim da svi koji su ikada pokušali da uploaduju dump u veliku MySQL bazu podataka koristeći phpMyAdmin razumiju o čemu govorim.

Često su ova ograničenja uzrok grešaka pri uvozu MySQL baze podataka, što nikada nećete vidjeti kada koristite konzolu.

Naravno, oni nisu konstantni i mogu se mijenjati, ali to je dodatna glavobolja, koja se, inače, može pokazati nerješivom za obične korisnike.

Nadam se da sam vas motivisao da uvezete MySQL bazu podataka preko konzole (štaviše, i njenu strukturu i zasebne podatke).

I na ovoj pozitivnoj noti, prelazimo na dugo očekivanu praksu i razmatramo metode i naredbe za prijenos podataka u bazu podataka na konzoli.

Kako vratiti MySQL bazu podataka iz dumpa koristeći konzolu?

Dakle, da biste postavili MySQL dump sa konzole, postoje dva načina:

  1. korištenje naredbe na MySQL komandnoj liniji;
  2. u samoj konzoli servera.

Počnimo redom.

Dakle, da bismo uvezli dump MySQL baze podataka u postojeće spremište preko , prvo ga trebamo pokrenuti i odabrati željenu bazu podataka u koju ćemo učitati naš dump.

Implementacija ovih radnji je detaljno opisana u članku na linku iznad, pa ako vam je potreban njihov opis, preuzmite ga odatle, jer. Ne želim da ih dupliram u drugom krugu.

Nakon što ste uradili gore navedeno, unesite sljedeću naredbu u MySQL Shell:

Izvor path_and_dump_filename;

Sve što nam preostaje je da proučimo poruke u konzoli o napretku operacija sadržanih u dumpu.

Bez prelaska na željenu bazu podataka, nakon povezivanja na MySQL server u konzoli, dump se može uvesti sljedećom naredbom:

Mysql -u korisničko ime -p ime_baze podataka< путь_и_имя_файла_дампа

To je sve. Glavna stvar je čekati da se uvoz završi ako je datoteka vrlo velika. Završetak dumpa može se ocijeniti prema tome kada će serverska konzola ponovo biti dostupna.

Strogo govoreći, ovo je nedostatak ove metode u odnosu na prethodnu, tk. u prvom je moguće posmatrati operacije izvršene na bazi podataka prilikom uvoza, dok u drugom nije.

Ako je dump datoteka spakovana u arhivu, tada ćete je prilikom preuzimanja morati usput raspakirati.

Na Linuxu se to može uraditi ovako:

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

Na Windows-u standardni uslužni program za raspakivanje arhive u konzoli nije, pa će je trebati dodatno instalirati.

Kao što vidite, uvoz MySQL dumpa preko konzole je vrlo jednostavna operacija koja se može izvesti jednom komandom. Dakle, ne morate biti programer da biste izvršili ovu proceduru.

Ako iznenada ne znate kako pokrenuti konzolu servera, tada možete pronaći ove informacije u članku na MySQL komandnoj liniji, vezu na koju sam već imao ranije.

Inače, pomoću opisanih metoda moguće je uvesti i MySQL tablicu, a ne cijelu bazu podataka. U ovom slučaju, dump koji učitavate mora sadržavati operacije njegovog kreiranja i popunjavanja podacima.

Učitavanje podataka u MySQL bazu podataka iz datoteke u konzoli

Razgovarali smo o vraćanju MySQL baze podataka iz dumpa u konzoli. Sada je vrijeme da shvatite kako možete uvesti podatke iz datoteka na isti način, uključujući iz xls i csv u MySQL bazu podataka.

Za ovaj zadatak opet imamo ista dva alata kao u prethodnom slučaju: MySQL komandnu liniju i serversku konzolu.

Počnimo ponovo recenziju po redu.

Dakle, da bismo uvezli datoteku u MySQL komandnu liniju, ponovo je pokrećemo i idemo u bazu podataka u koju će podaci biti učitani.

UČITAJTE INFILE PODATAKA "path_and_dump_file_name" U TABELU `tablica_database` KOLONE ZAVRŠENE SA "," ZATVORENE SA "\"" REDOVI ZAVRŠENI SA "\n";

Ne zaboravite da ako je MySQL server pokrenut sa opcijom --secure-file-priv(što se često dešava kada se koriste MySQL distribucije uključene u WAMP / MAMP build), tada se naziv datoteke mora navesti uzimajući u obzir sistemsku varijablu secure_file_priv.

Da bismo uvezli MySQL bazu podataka u konzolu servera bez ulaska u MySQL Shell, potreban nam je uslužni program mysqlimport, koji je dio MySQL distribucije, i sljedeći poziv za njega:

mysqlimport -u korisničko ime -p ime_baze ime_i_puta_do_uvozne_datoteke

Ovaj uslužni program je analog SQL naredbe UČITAJTE INFILE PODATAKA, samo komandna linija. Ali, pitamo se, zašto onda među parametrima njegovog poziva nije navedena tabela u koju će se učitavati podaci iz datoteke?

Činjenica je da mysqlimport jednostavno fizički nema dati parametar. Umjesto toga, ime tabele u koju će podaci biti učitani mora biti prisutno u nazivu uvezene datoteke.

One. ako želite da uvezete iz excel tabele u mysql tabelu korisnika, tada bi vaš fajl trebao biti imenovan users.xls.

Ekstenzija uvezene datoteke, kao što je već spomenuto, može biti bilo koja.

Sa mysqlimportom je također moguće učitati više xls ili csv datoteka u MySQL odjednom. Da bi podaci stigli na svoje odredište, nazivi datoteka i tabela baze podataka, kao u prethodnom primjeru, također moraju odgovarati.

Ako iznenada kolone u uvezenoj datoteci nisu u istom redosledu kao i kolone tabele baze podataka, onda da biste razjasnili njihov redosled, potrebno je da koristite opciju --columns u sledećem obliku:

Mysqlimport -u korisničko ime -p ime_baze --kolone stupac1, stupac2, ... import_file_name and_path

Naravno, u svojim primjerima nisam uzeo u obzir punu listu parametara mysqlimport, jer neki od njih su vrlo specifični i rijetko se koriste u praksi.

Ako želite da se upoznate s njima, onda je njihova potpuna lista dostupna ovdje - https://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html

Karakteristike učitavanja podataka u MySQL bazu podataka iz deponije

Ako želite da proces uvoza velike MySQL baze podataka bude brži, potrebno je da kreirate dump baze podataka koristeći posebne opcije naredbe mysqldump, o čemu sam pisao u svom prethodnom članku o izvozu MySQL baze podataka, link na koji je ranije postavljeno u tekstu.

Nažalost, same naredbe za uvoz MySQL baze podataka nemaju takve opcije.

Jedina stvar je da povećate brzinu prilikom učitavanja velike baze podataka, možete koristiti sljedeću funkciju.

1. Otvorite dump datoteku (po mogućnosti u fajl menadžeri, jer obični urednici mogu jednostavno umrijeti od velikih datoteka).

2. Na početku datoteke pišemo sljedeće redove:

SET external_key_checks = 0; SET UNIQUE_CHECKS = 0; POSTAVI AUTOCOMMIT = 0;

Bilješka! Možda su već tamo ili su komentirani (mnogi programi koji prave dumpove mogu ih automatski dodati)

3. Na kraju datoteke napišite obrnute radnje:

SET external_key_checks = 1; SET UNIQUE_CHECKS = 1; POSTAVI AUTOCOMMIT = 1;

Usput, ove naredbe pomoći će ne samo ubrzati proces uvoza, već će ga i omogućiti.

Činjenica je da ako ste ikada pogledali u dump datoteku za uvoz MySQL baze podataka, možda ste primijetili da operacija postavljanja strukture učitanih tablica izgleda ovako:

ISPUSTI TABELU AKO POSTOJI `klijenti`; CREATE TABLE `klijenti` (...);

One. vrši se pretraga u bazi podataka za tabelu sa istim imenom kao uvezena, a ako se pronađe, briše se i ponovo kreira.

A ako je odjednom postojeća tablica povezana stranim ključevima s drugima, onda će cijelo opterećenje propasti.

Stoga je onemogućavanje provjere postojanja stranih ključeva i drugih također odlična garancija uspješnog završetka procesa uvoza MySQL baze podataka.

Karakteristike uvoza csv u MySQL bazu podataka i druge datoteke

Prilikom učitavanja podataka u MySQL bazu podataka iz tekstualnih datoteka, možda će biti potrebno onemogućiti strane ključeve.

Štaviše, za razliku od prethodne situacije, u ovom slučaju neće raditi zapisivanje direktiva u datoteku, jer SQL naredbe u njemu neće biti prihvaćene i izvršene.

U prethodnom članku o izvozu MySQL baze podataka, već sam spomenuo kako to učiniti koristeći sljedeću operaciju na MySQL komandnoj liniji:

SET FOREIGN_KEY_CHECKS=0;

Međutim, nisam spomenuo tu varijablu MySQL sistema FOREIGN_KEY_CHECKS ima dva značenja: globalno i sesija (za trenutnu sesiju).

Globalna vrijednost MySQL varijabli je na snazi ​​za svaku radnju poduzetu na MySQL serveru, sve do i uključujući ponovno pokretanje servera. Tada će se vrijednosti varijabli resetirati i bit će im dodijeljene zadane vrijednosti.

Vrijednost sesije MySQL sistemske varijable postavlja se samo za vrijeme trajanja sesije korisnika sa MySQL serverom. Sesija ili sesija počinje kada se klijent poveže sa serverom, pri čemu mu se dodeljuje jedinstvenost id veze, i završava kada se prekine veza sa serverom, što se može dogoditi u bilo kojem trenutku (na primjer, timeout).

Zašto sam odlučio da zapamtim ovo?

Zato što sam prilikom izvršavanja naredbi za učitavanje datoteke u MySQL bazu podataka preko serverske konzole, bez ulaska u MySQL Shell, otkrio da onemogućavanje provjere stranog ključa na prethodno opisan način ne radi.

Konzola je i dalje prikazivala poruku o grešci uzrokovanu prisustvom stranih ključeva u tabeli.

A nastao je iz razloga što je gornja komanda isključila provjeru postojanja stranih ključeva unutar sesije, a ne globalno, koja se pored navedene metode može izvršiti i na sljedeći način:

SET SESSION ime_varijable = vrijednost_varijable; SET @@session.ime_varijable = varijabla_vrijednost; SET @@ime_varijable = vrijednost_varijable;

U gornjim naredbama, varijabla je eksplicitno označena kao varijabla sesije.

I pošto sam učitao csv fajl u MySQL tabelu preko konzole servera, bez direktne veze sa MySQL serverom, sesija nije kreirana u okviru koje bi radila moja vrednost sesije varijable.

Na kraju sam postavio globalnu vrijednost FOREIGN_KEY_CHECKS i uvoz je uspio.

To možete učiniti na jedan od sljedećih načina:

POSTAVI GLOBALNO ime_varijable = vrijednost_varijable; SET @@global.ime_varijable = varijabla_vrijednost;

Nakon promjene vrijednosti, da biste provjerili jesu li promjene stupile na snagu, nije suvišno pregledati vrijednosti varijable. Da biste istovremeno prikazali sesiju i globalne vrijednosti, koristite sljedeću naredbu:

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

Ovim je završen današnji članak o uvozu MySQL baze podataka. Podijelite svoje utiske i vlastito iskustvo u komentarima. Mislim da će mnoge zanimati vaše iskustvo.

Vidimo se uskoro! 🙂

P.S.: ako vam je potrebna web stranica ili trebate napraviti izmjene na postojećoj, a za to nema vremena i želje, mogu vam ponuditi svoje usluge.

Preko 5 godina iskustva profesionalni razvoj web stranica. Rad sa PHP, opencart,