Kao jedna od vodećih besplatno dostupnih baza podataka, MySQL je popularan izbor za mnoge web aplikacije. Budući da je izložena internetu, vaša je aplikacija izložena zlonamjernim napadima. Ako je vaš poslužitelj ugrožen, u najboljem slučaju trebate ponovno instalirati aplikaciju; u najgorem slučaju možete izgubiti podatke. Osim toga, možete doći u situaciju da trebate migrirati bazu podataka s jednog poslužitelja na drugi.
Za što se koristi mysqldump?
Alat mysqldump pokriva vas i za kompromitaciju poslužitelja i za situacije migracije. Njegova osnovna funkcija je uzeti MySQL bazu podataka i izbaciti je kao tekstualnu datoteku. Ali ne bilo koja tekstualna datoteka; datoteka je skup SQL naredbi. Ovi iskazi, kada se izvrše, rekonstruiraju bazu podataka u točno stanje u kojem je bila kada je dump izvršen.
Koristite mysqldump za stvaranje izvoza baze podataka kao sigurnosnu kopiju ili kada premještate bazu podataka na novi host. U svakom slučaju, tekstualna datoteka će se uvesti natrag u MySQL poslužitelj baze podataka. Izvršit će sve SQL naredbe u datoteci, čime se baza podataka ponovno gradi u izvorno stanje. Ovaj dio ne koristi naredbu mysqldump, ali ne bi bilo moguće bez ovog uslužnog programa.
MySQL dokumenti navode druge metode za izradu sigurnosnih kopija, ali ove imaju nedostatke:
- Hot kopiranje baze podataka iz MySQL Enterprisea izvrstan je način za postizanje ovih sigurnosnih kopija - ako vam ne smeta Enterprise cijena.
- Kopiranje direktorija podataka baze podataka može biti nezgodno kada se premještate s jednog operativnog sustava jer će odredišta biti različita.
- Izvozom u razgraničenu tekstualnu datoteku dobit ćete sadržaj, ali ćete morati ponovno stvoriti strukturu.
- Često možete sigurnosno kopirati baze podataka iz GUI programa kao što je MySQL Workbench. Ali ovo je ručni proces; nije nešto što možete skriptirati ili uključiti u skupni posao.
Instalirajte alat mysqldump
Za Windows, provjerite naše upute za instaliranje MySQL-a na Windows 7 (proces instalacije je isti za Windows 10). Na macOS-u pogledajte naše upute za instaliranje MySQL-a na macOS 10.7 (ponovno, stariji, ali još uvijek primjenjiv). Korisnici Linux sustava temeljenih na Ubuntuu mogu koristiti sljedeću naredbu za instaliranje MySQL klijenta i uslužnih programa:
sudo apt install mysql-client
Izdvoj MySQL Dump
Nakon instalacije, upotrijebite mysqldump za dobivanje pune sigurnosne kopije baze podataka.
mysqldump -h [ime vašeg DB hosta ili IP] -u [ime DB korisnika] -p [ime baze podataka] > db_backup.sql
Evo opisa zastavica korištenih u ovoj naredbi:
- - h: Ova oznaka je host baze podataka. To može biti puno ime hosta (na primjer, myhost.domain.com) ili IP adresa. Ostavite ovo prazno ako naredbu izvodite na istom hostu kao i MySQL poslužitelj.
- - u: Vaše korisničko ime.
- - p: Ako ste ispravno osigurali MySQL instalaciju, trebat će vam lozinka za povezivanje. Ova zastavica bez argumenta traži od vas lozinku kada izvršite naredbu. Ponekad je korisno navesti lozinku izravno kao argument za ovu oznaku, na primjer, u skripti sigurnosne kopije. Ali na upit, ne biste trebali, jer ako bi netko dobio pristup vašem računalu, mogao bi dobiti ovu lozinku u povijesti naredbi.
- > db_backup.sql: Ovaj dio govori mysqldump-u da svoj izlaz usmjeri na datoteku. Obično naredba ispisuje sve na konzolu, što znači da ćete vidjeti nekoliko SQL naredbi na ekranu. Simbol > usmjerava izlaz u imenovanu tekstualnu datoteku. Ako ova datoteka ne postoji, kreira se automatski.
Kada bude gotovo, imat ćete. SQL datoteku. Ovo je tekstualna datoteka koja sadrži SQL naredbe. Možete ga otvoriti u bilo kojem uređivaču teksta kako biste pregledali sadržaj. Evo izvoza iz WordPress baze podataka koji pokazuje kako su ove datoteke sastavljene.
Datoteka je podijeljena u dijelove. Prvi odjeljak postavlja tablicu za WordPress komentare. Drugi odjeljak ponovno stvara sadržaj u tim tablicama (u ovom primjeru zapisi komentara). Kada ponovno uvezete MySQL dump, naredba radi kroz datoteku, izvršava naredbe i ponovno gradi bazu podataka kakva je bila.
Uvoz MySQL Dump datoteke
Prije nego što uvezete datoteku ispisa, trebat će vam već stvorena baza podataka i njeno važeće korisničko ime i lozinka. Također biste trebali imati sva dopuštenja za bazu podataka. Ne trebate dopuštenje GRANT, ali lakše ih je sve dati.
Saznajte više o dozvolama baze podataka prije nego što promijenite sigurnosne uloge unutar svoje baze podataka.
Da biste ponovno uvezli svoje podatke, prijavite se na MySQL poslužitelj pomoću naredbe mysql. Upišite use [naziv baze podataka] na upit i zamijenite naziv baze podataka. Unesite source [ime datoteke] i zamijenite naziv datoteke ispisa koju ste prethodno uzeli.
Kada ste gotovi, pojavit će se popis poruka koje obavještavaju da se SQL naredbe izvršavaju. Pripazite na pogreške, ali ako imate ispravna dopuštenja, trebali biste biti u redu.
Kada proces završi, imat ćete duplikat originalne baze podataka. Da biste provjerili sličnost između baza podataka, izvedite još jedan dump i zatim usporedite dva izlaza. Upotrijebite uređivač teksta ili namjenski alat za razliku kako biste usporedili dvije datoteke.
Postoje dvije razlike između ovih datoteka, što je prikazano crvenim linijama na vrhu i dnu desne trake za pomicanje. Prvi je redak koji sadrži naziv baze podataka, a on je drugačiji jer su datoteke drugačije nazvane. Drugi je vremenski žig za datoteku ispisa. Ovo je drugačije jer je druga baza podataka ponovno stvorena nakon prve. U suprotnom, datoteke su potpuno iste, što znači da su i baze podataka koje su ih generirale.
FAQ
Kako popraviti pogrešku mysqldump: Pristup odbijen pri korištenju zaključanih tablica?
Zamolite svog administratora baze podataka da vam dodijeli privilegiju LOCK. Ako ovo ne riješi problem, pokušajte pokrenuti istu naredbu mysqldump dodajući oznaku - -single-transaction, kao što je [ $ mysqldump --single-transaction] [-u korisnik] [-p DBNAME] > backup.sql
Možete li koristiti klauzulu "where" s mysqldump?
Koristite klauzulu WHERE kada stvarate sigurnosnu kopiju koja uključuje samo retke koji ispunjavaju zadani uvjet. Na primjer, za ispis podataka samo iz redaka s id stupcem većim od 100, unesite "mysqldump my_db_name my_table_name --where="id > 100" > my_backup.sql".