Crmgo Blog

mysqldump, pravimo backup

mysqldump, pravimo backup

Dobijanje izliva podataka i strukture tabele Ova alatka omogućava dobijanje izliva (trenutnog snimka) sadržaja baze podataka ili skupa baza radi kreiranja rezervne kopije ili prebacivanja podataka na drugi SQL server baze podataka (ne nužno MySQL server). Izliv će sadržavati skup SQL komandi…

mysqldump, pravimo backup

Dobijanje izliva podataka i strukture tabele

Ovaj alat omogućava dobijanje izliva (``trenutnog snimka'') sadržaja baze podataka ili skupa baza radi kreiranja rezervne kopije ili prenos podataka na drugi SQL server za baze podataka (ne mora biti MySQL server). Izliv će sadržati skup SQL komandi za kreiranje i/ili popunjavanje tabela.

Ako se rezervna kopija kreira na serveru, umesto opisanog alata treba koristiti mysqlhotcopy. Pogledajte odeljak See Odeljak 4.8.6, «mysqlhotcopy, Kopiranje baza podataka i tabela MySQL».

shell> mysqldump [OPTIONS] database [tables]
или  mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
или  mysqldump [OPTIONS] --all-databases [OPTIONS]

Ako se ne navedu imena tabela ili se koriste parametri --databases ili --all-databases, dobiće se izliv cele baze podataka (odnosno - svih baza podataka).

Spisak opcija koje podržava vaša specifična verzija alata mysqldump možete dobiti izvršavanjem komande mysqldump --help.

Imajte na umu da alat mysqldump, korišćen bez opcija --quick ili --opt, pre nego što napravi izliv rezultata upita, učitava ceo rezultat u memoriju. To može stvoriti probleme pri dobijanju izliva velike baze podataka.

Imajte na umu da ne treba koristiti parametre --opt ili -e ako planirate da koristite novu kopiju programa mysqldump za dobijanje izliva, a zatim ga reprodukuju na veoma starom MySQL serveru.

Alat mysqldump podržava sledeće opcije:

  • --add-locksДодајте наредбе LOCK TABLES пре извршавања и UNLOCK TABLE након извршавања сваког издвајања табеле (за убрзање приступа MySQL-у).
  • --add-drop-tableДодајте наредбу DROP TABLE пре сваке наредбе CREATE TABLE.
  • -A, --all-databasesИздвојите све базе података. Слично опцији --databases са навођењем свих база података.
  • -a, --allУкључите све опције креирања објеката специфичне за MySQL.
  • --allow-keywordsДозволите креирање имена колона која се поклапају са кључним речима. Избегавање сукоба се обезбеђује додавањем имена табеле као префикса сваком имену колоне.
  • -c, --complete-insertКористите пуне наредбе INSERT (са именима колона).
  • -C, --compressКористите компресију свих података између клијента и сервера, ако оба подржавају компресију.
  • -B, --databasesИзвршите издвајање више база података. Имајте на уму разлику у коришћењу: у овом случају табеле се не наводе. Сва имена аргумената се третирају као имена база података. Израз USE db_name; се укључује у излаз пре сваке нове базе података.
  • --delayedКористите наредбу INSERT DELAYED при уметању редова.
  • -e, --extended-insertКористите наредбу INSERT са новом вишеструком синтаксом (повећава компакtnост и брзину извршавања изразa за уметање).
  • -#, --debug[=option_string]Прати ток програма (за дебаговање).
  • --helpИсписати помоћну информацију и изаћи из програма.
  • --fields-terminated-by=... , --fields-enclosed-by=... , --fields-optionally-enclosed-by=... , --fields-escaped-by=... , --lines-terminated-by=...Ове опције се користе заједно са параметром -T и имају исто значење као одговарајући изрази за LOAD DATA INFILE. Види одељак Одељак 6.4.9, „Синтакса изразa LOAD DATA INFILE“.
  • -F, --flush-logsЗапишите на диск податке системског журнала из бафера MySQL сервера пре почетка издвајања.
  • -f, --force,Наставите чак и при добијању SQL грешке при извршавању издвајања табеле.
  • -h, --host=..Извршите издвајање података MySQL сервера на наведеном хосту. Подразумевана вредност хоста је localhost.
  • -l, --lock-tables.Закључајте све табеле пре почетка издвајања. Табеле се закључавају изразом READ LOCAL, како би се омогућило паралелно уписивање за MyISAM-табеле. Треба напоменути да при извршавању издвајања скупа база података опција --lock-tables закључава табеле сваке базе појединачно. Дакле, коришћење овог параметра не гарантује да ће табеле бити логички конзистентне унутар тих база података. У различитим базама података, током издвајања табеле могу бити у потпуно различитим стањима.
  • -K, --disable-keysДодаје израз /*!40000 ALTER TABLE tb_name DISABLE KEYS */; и /*!40000 ALTER TABLE tb_name ENABLE KEYS */; у резултирајући излаз. Ово ће убрзати учитавање података на MySQL сервер 4.0, јер се индекси креирају након уношења свих података.
  • -n, --no-create-dbУ резултирајућем излазу израз CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; ће бити одсутан. Ова линија ће бити додата у сваком случају при коришћењу опција --databases или --all-databases.
  • -t, --no-create-infoНе записујте информације о креирању табеле (наредба CREATE TABLE).
  • -d, --no-dataНе записујте информације из редова табеле. Ово је веома корисно за добијање издвајања структуре табеле!
  • --optИсто као и --quick --add-drop-table --add-locks --extended-insert --lock-tables. Требало би да пружи најбрже издвајање за читање на MySQL серверу.
  • -pyour_pass, --password[=your_pass]Лозинка која се користи при повезивању са сервером. Ако аргумент =your_pass није унет, mysqldump ће понудити унос лозинке.
  • -P port_num, --port=port_numБрој TCP/IP порта који се користи за повезивање са хостом.
  • --protocol=(TCP | SOCKET | PIPE | MEMORY)За навођење протокола везе који треба користити. Ново у MySQL 4.1.0.
  • -q, --quickИсписати издвајање директно на стандардни излаз stdout без буферизације упита. За то се користи функција mysql_use_result().
  • -Q, --quote-namesЗаградите имена табела и колона без карактера '`'.
  • -r, --result-file=...Директан излаз наведене датотеке. Ову опцију треба користити у MS DOS-у, јер спречава конверзију карактера нове линије '\n' у секвенцу '\n\r' (нова линија + повратак каретe).
  • --single-transactionОва опција издаје SQL наредбу BEGIN пре извршавања издвајања података са сервера. Најчешће се користи са InnoDB-табелама и нивоом изолације транзакција READ_COMMITTED, јер је у овом режиму могуће добити издвајање са конзистентним стањем базе података након извршавања наредбе BEGIN без закључавања било којих апликација. Користећи ову опцију, треба имати на уму да при извршавању издвајања само транзакционе табеле ће бити у конзистентном стању, тј. неке MyISAM- или HEAP-табеле при коришћењу ове опције могу ипак променити своје стање. Опција --single-transaction додата је у верзији 4.0.2. Она је међусобно искључујућа у односу на опцију --lock-tables, јер наредба LOCK TABLES већ прихвата отворену транзакцију.
  • -S /path/to/socket, --socket=/path/to/socketДатотека сокета за повезивање са localhost (подразумевана вредност хоста).
  • --tablesПревазилази параметар --databases (-B).
  • -T, --tab=path-to-some-directoryЗа сваку задату табелу креира датотеку a table_name.sql, која садржи SQL CREATE наредбу за креирање табеле, и датотеку table_name.txt са подацима табеле. Датотека .txt има формат у складу са параметрима --fields-xxx и --lines--xxx. Напомена: Овај параметар ради само под условом да је алатка mysqldump покренута на истом рачунару као и демон mysqld, и да корисник/група који су покренули овај процес mysqld (обично је то корисник mysql и група mysql), имају право креирања/уписивања датотеке на наведеној адреси.
  • -u user_name, --user=user_nameИме корисника MySQL сервера које се користи при повезивању са сервером. Подразумевана вредност је име Unix корисника.
  • -O var=option, --set-variable var=optionПоставите вредности променљивих. Доступне променљиве за коришћење су наведене испод. У MySQL 4.0 једноставно користите --var=option.
  • -v, --verboseПроширени режим излаза. Испис детаљнијих информација о раду програма.
  • -V, --versionИсписати информацију о верзији и изаћи из програма.
  • -w, --where='where-condition'Извршите издвајање само изабраних записа. Имајте на уму да су наводници обавезни.
    "--where=user='jimf'" "-wuserid>1" "-wuserid<1"

 

  • -X, --xmlPredstavlja dampu baze podataka u XML formatu.
  • -x, --first-slaveBlokira sve tabele u svim bazama podataka.
  • -O net_buffer_length=#, where # < 16MPrilikom kreiranja višelinijskih upitnih operacija (kao i u slučajevima primene parametara --extended-insert ili --opt) alat mysqldump će kreirati linije dužine do vrednosti navedene u net_buffer_length. Povećanjem vrednosti ove promenljive potrebno je takođe proveriti da li je na MySQL serveru za promenljivu max_allowed_packet navedena veća vrednost od veličine net_buffer_length.
  • Najčešće se alat mysqldump koristi za dobijanje rezervne kopije svih baza podataka. Vidi Odeljak 4.4.1, „Rezervno kopiranje baza podataka“.

    mysqldump --opt database > backup-file.sql

    Moguće je, suprotno tome, pročitati ovaj fajl na MySQL serveru pomoću komande:

    mysql database < backup-file.sql

    ili

    mysql -e "source /patch-to-backup/backup-file.sql" database

     

    Ovaj alat se prilično često koristi i za prenos informacija iz baze podataka na drugi MySQL server:

    mysqldump --opt database | mysql --host=remote-host -C database

    Moguće je dobiti dampu više baza podataka pomoću jedne komande:

    mysqldump --databases database1 [database2 ...] > my_databases.sql

    Ako je potrebna dampa svih baza podataka, može se koristiti:

    mysqldump --all-databases > all_databases.sql

    Razmotrimo primer najjednostavnije upotrebe, napravimo dampu baze podataka „database“ pomoću preusmeravanja toka u fajl „database.sql“:

    mysqldump -uroot -h82.82.82.82 -p database > database.sql

    gde:

    • -u ili -–user=... — ime korisnika
    • -h ili --host=... — udaljeni host (za lokalni host može se izostaviti ovaj parametar)
    • -p ili --password — zatraži lozinku
    • database — ime baze podataka
    • database.sql — fajl za dampu

    Da bi se napravila dampa više baza podataka, potrebno je koristiti parametar --databases (ili skraćeno -B), primer:

    mysqldump -uroot -h82.82.82.82 -p -B database1 database2 database3 > databases.sql

    A da bi se napravila dampa svih baza podataka, potrebno je koristiti parametar --all-databases (ili skraćeno -A), primer:

    mysqldump -uroot -h82.82.82.82 -p -A > all-databases.sql

    Razvijanje (restoracija) dample

    Preusmeravamo tok u suprotnom smeru i razvijamo bazu podataka:

    mysql -uroot -h82.82.82.82 -p database < database.sql

    Ili preko mysql konzole:

    mysql> use database; mysql> source database.sql

    A ako imamo gz arhivu, na primer, onda:

    zcat database.sql.gz | mysql -uroot -h82.82.82.82 -p database

    Primer korišćenja nekih parametara

    Na primer, potrebni su nam podaci sa „proizvodne verzije baze“ za „verziju developera“, odnosno potrebna nam je „peskovnica“. Biramo ne više od 100 zapisa:

    mysqldump -uroot -h82.82.82.82 -p --where="true limit 100" database > database.sql

    Ili nam je potrebna samo struktura, bez podataka:

    mysqldump -uroot -h82.82.82.82 -p --no-data database > database.sql

    Primeri su inspirisani objavom Aleksandra Makarova — http://rmcreative.ru/blog/post/ljogkiy-damp-mysql

    Pravimo dump samo triggera, procedura i događaja:

    mysqldump --no-create-info --no-data --triggers --routines --events -uroot -p database | gzip > ~/database.sql.gz

    Podsetnik za parametre

    Navediću neke parametre koji mogu biti potrebni pri radu sa alatom mysqldump.

    --add-drop-database
    Dodaje instrukciju DROP DATABASE pre svake instrukcije CREATE DATABASE.
    --add-drop-table
    Dodaje instrukciju DROP TABLE pre svake instrukcije CREATE TABLE.
    --add-locks
    Dodaje instrukciju LOCK TABLES pre izvršavanja i UNLOCK TABLE nakon izvršavanja svakog izbacivanja tabele (radi ubrzanja pristupa MySQL-u).
    --all-databases, -A
    Čuva sve tabele iz svih baza podataka koje su pod upravom trenutnog servera.
    --allow-keywords
    Dozvoljava kreiranje imena kolona koja se poklapaju sa ključnim rečima. Izbegavanje konflikata se obezbeđuje dodavanjem imena tabele kao prefiksa imenu svake kolone.
    --comments, -i
    Ova opcija omogućava dodavanje dodatnih informacija u izbacivanje, kao što su verzija mysqldump, verzija MySQL-a, ime hosta na kojem se nalazi MySQL server.
    --compact
    Ova opcija zahteva od mysqldump da kreira izbacivanje koristeći što kompaktniji format. Opcija je suprotna opciji --comments.
    --compatible=name
    Opcija generiše izlaz koji je kompatibilan sa drugim DBMS-ovima ili starijim verzijama MySQL-a. Umesto ključne reči name možete koristiti: «ansi», «mysql323», «mysql40», «postgresql», «oracle», «mssql», «db2», «maxdb», «no_key_options», «no_table_options», «no_field_options». Možete koristiti više vrednosti, razdvojite ih zarezima.
    --complete-insert, -c
    Koristi se puna forma instrukcije INSERT (sa imenima kolona).
    --create-options
    Dodaje dodatne informacije u instrukcije CREATE TABLE. To može biti tip tabele, početna vrednost AUTO_INCREMENT i druge opcije.
    --databases, -B
    Opcija omogućava navođenje imena više baza podataka za koje je potrebno kreirati izbacivanje.
    --delayed
    Koristiti komandu INSERT DELAYED pri umetanju redova.
    --delete-master-logs
    Na glavnom serveru replikacije automatski se brišu binarni logovi (logbin) nakon što je izbacivanje uspešno kreirano pomoću mysqldump-a. Ova opcija automatski uključuje opciju «--master-data».
    --disable-keys, -K
    Za svaku tabelu, okružuje instrukciju INSERT izrazima /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; i /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; u izlaznom rezultatu izbacivanja. Ovo će ubrzati učitavanje podataka na server za tabele tipa MyISAM, jer se indeksi kreiraju nakon unosa svih podataka.
    --extended-insert, -e
    Koristiti komandu INSERT sa novim višelinijskim sintaksom (povećava kompaktnost i performanse instrukcija za unos).
    --flush-logs, -F
    Zapisati na disk podatke sistemskog dnevnika iz keš memorije MySQL servera pre početka izvršavanja izbacivanja.
    --force, -f
    Nastaviti čak i ako je došlo do greške tokom kreiranja izbacivanja.
    --hex-blob
    Opcija omogućava prikazivanje binarnih podataka u poljima tipa BINARY, VARBINARY, BLOB i BIT u heksadekadskom formatu. Tako će se sekvenca «abc» zameniti sa 0×616263.
    --ignore-table=db_name.tbl_name
    Omogućava zanemarivanje tabele tbl_name baze podataka db_name prilikom kreiranja izbacivanja. Ako je potrebno isključiti više tabela iz izbacivanja, potrebno je koristiti više opcija «--ignore-table», navodeći po jednu tabelu u svakoj od opcija.
    --insert-ignore
    Dodaje ključnu reč IGNORE u instrukciju INSERT.
    --lock-all-tables, -x
    Navedena očka dovodi do zaključavanja svih tabela u svim bazama podataka tokom kreiranja potpunog izbacivanja svih baza podataka.
    --lock-tables, -l
    Navedena opcija dovodi do zaključavanja tabela baze podataka za koju se kreira izbacivanje.
    --no-autocommit
    Uključuje sve instrukcije INSERT koje se odnose na jednu tabelu u jednu transakciju, što dovodi do povećanja brzine učitavanja podataka.
    --no-create-db, -n
    Suzdržava kreiranje instrukcija CREATE DATABASE u izbacivanju, koje se automatski dodaju pri korišćenju opcija --databases i --all-databases.
    --no-data, -d
    Suzdržava kreiranje instrukcija INSERT u izbacivanju, što može biti korisno prilikom kreiranja izbacivanja strukture baze podataka bez samih podataka.
    --opt
    Opcija je namenjena optimizaciji brzine rezervisanja podataka i predstavlja skraćenicu koja uključuje sledeće opcije: --quick --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --set-charset. Počevši od MySQL 4.1, opcija --opt se koristi podrazumevano, tj. sve gore navedene opcije su uključene podrazumevano, čak i ako nisu navedene. Da bi se isključilo takvo ponašanje, potrebno je koristiti opciju --skip-opt
    --order-by-primary
    Navedena opcija dovodi do toga da se svaka tabela sortira po primarnom ključu ili prvom jedinstvenom indeksu.
    --port, -P
    Broj TCP porta koji se koristi za povezivanje sa hostom.
    --protocol={TCP|SOCKET|PIPE|MEMORY}
    Opcija omogućava zadavanje protokola povezivanja sa serverom.
    --quick, -q
    Omogućava početak kreiranja izbacivanja, bez čekanja potpunog učitavanja podataka sa servera, čime se štedi memorija.
    --quote-names, -Q
    Stavlja imena baza podataka, tabela i kolona u navodnike `. Počevši od MySQL 4.1, ova opcija je uključena podrazumevano.
    --replace
    Dodaje ključnu reč REPLACE u instrukciju INSERT. Ova opcija se prvi put pojavila u MySQL 5.1.3.
    --result-file=/path/to/file, -r /path/to/file
    Opcija usmerava izbacivanje u fajl file. Ova opcija je posebno pogodna u Windows okruženju, bez korišćenja komandne linije, kada se rezultat može preusmeriti u fajl pomoću sekvenci > i >>.
    --routines, -R
    Ova opcija kreira izbacivanje skladištenih procedura i funkcija. Dostupno od MySQL 5.1.2.
    --single-transaction
    Opcija kreira izbacivanje u vidu jedne transakcije.
    --skip-comments
    Ova opcija omogućava suzbijanje izlaza dodatnih informacija u izbacivanje.
    --socket=/path/to/socket, -S /path/to/socket
    Fajl soketa za povezivanje sa localhost.
    --tab=/path/, -T /path/
    Korišćenjem ove opcije u direktorijumu path za svaku tabelu se kreiraju dva odvojena fajla: tbl_name.sql, koji sadrži instrukciju CREATE TABLE, i tbl_name.txt, koji sadrži podatke tabela, razdvojene znakom tabulatora. Format podataka se može eksplicitno predefinisati pomoću opcija --fields-xxx i --lines-xxx.
    --tables
    Poništava dejstvo opcije --databases (-B). Svi argumenti koji slede nakon ove opcije tretiraju se kao imena tabela.
    --triggers
    Kreira se izbacivanje okidača (triggers). Ova opcija je uključena podrazumevano. Za njeno isključivanje treba koristiti opciju --skip-triggers.
    --events, -E
    Kreira se izbacivanje događaja. Pogledajte MySQL Event Scheduler ili ugrađeni menadžer događaja u MySQL-u.
    --tz-utc
    Prilikom korišćenja ove opcije u izbacivanje će biti dodata instrukcija tipa SET TIME_ZONE='+00:00', što će omogućiti razmenu izbacivanja u različitim vremenskim zonama.
    --verbose, -v
    Prošireni režim izlaza. Izlaz detaljnijih informacija o radu programa.
    --version, -V
    Ispisati informacije o verziji programa.
    --where='where-condition', -w 'where-condition'
    Izvršiti izbacivanje samo odabranih zapisa. Imajte na umu da su navodnici obavezni.
    --xml, -X
    Predstavlja izbacivanje baze podataka u vidu XML-a.
    --first-slave, -x
    Zaključava sve tabele u svim bazama podataka.
    --debug=..., -#
    Pratiti tok programa (za debugovanje).
    --help
    Ispisati pomoćnu informaciju i izaći iz programa.

    Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.