Pagbawi ng Mysqldump. Ibinabagsak namin ang database ng MySQL at nag-export ng data sa console. Pag-compress ng MySQL Dump Files

Napakahalaga ng paggawa ng database dump (backup). Kaya gumawa ako ng ilang mga komento na may mga halimbawa para dito mahusay na utility parang mysqldump.

mysqldump - isang utility na nagpapahintulot sa iyo na itapon ang mga nilalaman ng isang database o isang set ng mga database na gagawin backup na kopya o pagpapadala ng data sa isa pang SQL database server (hindi kinakailangang isang MySQL server). Maglalaman ang dump ng set ng mga SQL command para gumawa at/o mag-populate ng mga talahanayan.

mysqldump-u ugat -p -f name_database >

Sa team na ito ginagawa namin backup ng database data sa ilalim ng pangalan name_database upang himukin ang C sa file na mydb_backup_name_database.txt

Hindi mo kailangang likhain ang file;

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

Sa utos na ito, nag-i-import kami ng backup na data mula sa file na C:\mydb_backup_name_database.txt

Tandaan: -f, --force ay isang opsyon na tumutukoy upang magpatuloy kahit na may natanggap na SQL error, ibig sabihin. huwag pansinin ang mga pagkakamali. Halimbawa, kung mayroon nang magkatulad na row sa talahanayan.

Upang maiwasan ang pag-prompt para sa isang password, kailangan mong isulat ito kaagad pagkatapos -p, iyon ay, nang walang mga puwang. Kung ang password Pwd, kung gayon ang halimbawa ay magiging ganito:

mysqldump-u ugat -p Pwd-f name_database > C:\mydb_backup_name_database.txt

Kung madalas mong gamitin utos na ito, kung gayon ito ay mas mahusay na gawin indibidwal na gumagamit Sa kinakailangang mga karapatan, upang gawing hindi gaanong nakikita ang root password

Isaalang-alang natin ang higit pa magagandang setting mysqldump:

--mga database nagbibigay-daan sa mysqldump na isama ang GUMAWA NG DATABASE /*!33333 KUNG HINDI MAY*/ DBNAME at GAMITIN ang mga utos ng DBNAME sa script ng pagbawi. Papayagan ka nitong lumikha ng mga gumaganang database mula sa simula. Iyon ay, nang hindi gumagamit ng --databases, ipinapalagay na ang user ay nagpapanumbalik ng isang database at tahasang tinutukoy kung saan dapat ilagay ang naibalik na data. Kung ang isang backup ay nilikha na may layunin na gumawa ng isang ganap na gumaganang kopya ng data, halimbawa, sa isa pang MySQL server, pagkatapos ay kailangan mong gamitin ang key na ito;

--lahat ng mga database nagbibigay-daan sa iyo na gumawa ng mga kopya ng lahat ng mga database na umiiral sa isang ibinigay na MySQL server. Kung kailangan mong gumawa ng mga kopya ng ilang mga database lamang, kailangan mo lamang na tukuyin ang mga ito na pinaghihiwalay ng isang puwang kapag tumatawag sa mysqldump mula sa command line (tingnan sa itaas);

Susi --tulong. Ang mysqldump program ay may maraming bersyon. Makikita mo kung anong mga feature ang partikular na sinusuportahan ng iyong bersyon gamit ang key na ito;

--add-drop-table- isang switch na pipilitin ang mysqldump na magdagdag ng drop table na utos sa resultang script bago lumikha ng mga talahanayan. Ito ay magbibigay-daan sa iyo upang maiwasan ang ilang mga error kapag nagpapanumbalik ng isang database mula sa isang backup. Siyempre, kailangan mong isaalang-alang na ang mga talahanayan na matatagpuan sa gumaganang kopya (kung ang mga talahanayan na may parehong pangalan ay umiiral sa backup) ay tatanggalin mula sa pangunahing database at muling likhain mula sa backup bago ibalik mula sa backup;

--walang-data. Gamit ang key na ito, mabilis kang makakagawa ng kopya ng istraktura ng talahanayan/database nang wala ang data mismo. Halimbawa, gumawa ka ng isang kumplikadong talahanayan at nais mong i-save ang istraktura nito para sa hinaharap, ngunit hindi mo kailangan ang data mismo na nasa talahanayang ito sa isang backup na kopya;

--result-file=...- ang switch na ito ay maaaring gamitin upang i-redirect ang output sa isang file. Maaari mong gamitin ang regular na pag-redirect ng Unix gamit ang command na ">", o maaari mong gamitin ang key na ito. Sino may gusto sa ano?

Isa pang napaka kapaki-pakinabang na payo sa paggamit ng mysqldump sa isang hosting environment. Bilang isang tuntunin, kapag gumagamit ng pagho-host, ang ilang mga paghihigpit ay ipinapataw sa gumagamit. Halimbawa, hindi ka maaaring humiram ng higit sa isang tiyak na halaga pisikal na memorya(RAM, RAM). Ang mysqldump bilang default ay inilalagay ang lahat ng data na natanggap mula sa MySQL server sa memorya, at pagkatapos ay isusulat ang lahat ng ito sa disk. Alinsunod dito, kung pinapayagan ka ng provider na humiram, halimbawa, 30 MB ng memorya, at ang database, na iyong kinokopya gamit ang mysqldump, ay sumasakop sa 50 MB, siyempre, isang error ang lilitaw dito - ang mysqldump ay hindi gagana nang tama at mag-crash, na ipaalam nito sa iyo. Upang "puwersa" ang mysqldump na magsulat ng data nang direkta sa disk, sa halip na iimbak ito, kahit pansamantala, sa memorya, gamitin ang susi --mabilis. Malulutas nito ang problema.

Narito ang ilang mas kapaki-pakinabang na mga halimbawa:

mysqldump -u ugat -p Pwd-f --default-character-set=cp1251 DBNAME| gzip -c > filename.txt .gz

Maaari mong i-unpack ang naturang archive gamit ang command:

gunzip filename.txt.gz

Upang malaman kung anong petsa ginawa ang backup, maaari mong isulat ang sumusunod na command:

mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `petsa "+%Y-%m-%d"`.gz

at kung kailangan mong gumawa ng mga dump na may iba't ibang mga pag-encode, kung gayon maginhawang gumamit ng mga variable:

itakda DBCHARACTER= utf8

itakda DBNAME= paglabag

mysqldump -u ugat -p Pwd-f --default-character-set=$ DBCHARACTER $DBNAME| bzip2 -c > sql. $DBNAME.`petsa "+%Y-%m-%d"`.bz2

Kung gusto mong i-automate ang pag-alis ng mga lumang archive, subukang gamitin ang cron at hanapin ang utos, na kadalasang matatagpuan sa unix. Pana-panahong tumatakbo

hanapin~/directory-with-archives -name "*.gz" -mtime +7 -exec rm -f () \;

Kaya, tatanggalin mo ang mga archive na "mas luma" sa pitong araw.

Marahil ay kinailangan mong mag-import ng mga database dump nang higit sa isang beses. At sa kabila ng kawalang-kabuluhan ng gawaing ito, ang mga tanong at kung minsan ay mga problema na nauugnay dito ay madalas na lumitaw. Nasa ibaba ang lahat ng code na kailangan mo para mabilis na mag-apply ng database dump mula sa command line.

SET NAMES utf8; DROP DATABASE `mydb`; GUMAWA NG DATABASE `mydb` DEFAULT CHARACTER SET utf8; GAMITIN ang `mydb`; SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; Itakda ang autocommit=0; SET foreign_key_checks=0; SET unique_checks=0; SOURCE /path/to/db_dump.sql; COMMIT; Itakda ang autocommit=1; SET foreign_key_checks=1; SET unique_checks=1;

Ang mga utos na ito ay magbibigay-daan sa iyo na mabilis na mag-import ng isang database dump at maiwasan ang mga problema. Bukod dito, ang ilan sa mga problemang ito ay hindi nareresolba kahit ng mga karaniwang mysql client, tulad ng phpMyAdmin at iba pa.

Subukan nating malaman ito ang code na ito sa ayos.

SET NAMES utf8; nagsasabing ang palitan ng data ay magaganap sa pag-encode ng UTF-8 at doon ito matatagpuan source file database dump at ito ang magiging huling database.

DROP DATABASE `mydb`; At GUMAWA NG DATABASE `mydb` DEFAULT CHARACTER SET utf8; gumanap pagkawasak database at ang kasunod na paglikha nito gamit ang default na pag-encode na UTF-8. Malinaw na tatanggalin nito ang lahat ng mga talahanayan at data sa mga ito, ngunit ito ay magbibigay sa amin ng kumpiyansa na ang resultang database ay ganap na tumutugma sa data sa dump file.

GAMITIN ang `mydb`; ay nagpapahiwatig na ang partikular na database na ito ay dapat gamitin para sa lahat ng mga utos mula sa dump file (suriin ang dump file para sa pagkakaroon ng direktiba na ito na nagpapahiwatig ng ibang database upang maiwasan ang pagkalito).

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; hindi pinapagana ang pagtaas ng auto-increment counter kapag isinusulat ang value 0 sa auto-increment na field Bilang default, kapag sumusulat sa naturang field NULL halaga o 0 ito ay awtomatikong nadaragdagan. At kahit na ang pagkakaroon ng isang halaga ng 0 sa isang auto-incremental na patlang ay hindi pinakamahusay na kasanayan, minsan nangyayari pa rin na may mga ganoong linya sa dump (nakatagpo ako ng katulad sa isang dump mula sa Magento). Ito rin ay nagkakahalaga ng pagpapalit ng kung ano ang mysqldump ay kasama para sa ilang oras na ngayon ang direktiba na ito bilang default sa kanilang mga tambakan.

Itakda ang autocommit=0; bago i-upload ang dump at COMMIT; pagkatapos nito, pinapabilis nila ang pagpapatupad ng mga INSERT para sa mga talahanayan ng InnoDB, dahil kapag pinagana ang auto-commit mode, ang mga log ay nai-save sa disk sa bawat INSERT. Makakatulong kapag nagpapagulong ng malalaking tambakan.

SET foreign_key_checks=0; ang pinaka-halatang opsyon, kung wala ang karamihan sa mga dump ay hindi mailalapat sa lahat. Hindi pinapagana ang mga foreign key check, na nagbibigay-daan sa data na maisulat sa anumang pagkakasunud-sunod, kasama ang mga circular reference mga dayuhang susi. Pinapabilis din ng opsyong ito ang pag-import ng dump.

SET unique_checks=0; hindi pinapagana ang mga pagsusuri sa pagiging natatangi para sa mga pangalawang key, na muling makakapagpabilis sa proseso ng pag-import.

At sa wakas, ang pangunahing koponan kung kanino ang lahat ng ito ay pinlano - SOURCE /path/to/db_dump.sql; direktang nag-import ng mysql database dump mula sa tinukoy na file. Ang path sa file ay maaaring ganap o nauugnay sa direktoryo kung saan mo na-access ang mysql console.

At pagkatapos makumpleto ang pag-import, ibinabalik namin ang halaga ng mga flag, bagaman hindi ito kailangang gawin, dahil ang utos SET sa mysql, bilang default, binabago lamang ang mga halaga ng mga variable sa konteksto ng kasalukuyang session.

Ito ay kakaiba, ngunit medyo mahirap hanapin ang impormasyong ito sa Internet. Isang grupo ng lahat ng uri ng mga rekomendasyon sa kaliwa. Ngunit sa katunayan, ang lahat ay simple. Maaari mong ibalik ang dump gamit ang command:

# mysql-u -p< mysql_dump.sql.

Sa halip, palitan ang username, ako mismo ang gumagawa ng pagbawi mula sa ugat. At sa mysql_dump, sql, talaga, ginawa ang dump mysqldump utility. Ang -p na opsyon ay nagpapahiwatig ng pahintulot na may isang password pagkatapos pindutin ang enter ay hihilingin sa iyo ang isang password. Iyon lang, actually. Maaari kang gumawa ng isang dump gamit ang utos:

# mysqldump-u ugat -p -f database_name > file_with_dump.sql

Dito tinutukoy ng parameter na -f database_name ang pangalan ng database na aming sine-save. Kung kailangan mo ang lahat, papalitan namin ito ng --lahat ng mga database. Ang pagpipiliang ito ay magsasaad ng pag-save ng lahat ng mga database sa server. Upang hindi maipasok ang password sa bawat oras, maaari mong tukuyin ito nang direkta sa utos (kinakailangan ito kung gumagawa ka ng isang cron dump mula sa isang script), gayunpaman, mula sa isang punto ng seguridad, ang mga tanong ay lumitaw dito, lalo na kung ang ang password ay ugat para sa kalamnan. Now, if only the muscle understand at least md5 passwords... However, it’s not a fact na hindi niya naiintindihan, I just maybe I don’t know :)

May-akda

Alex Razgibalov

Isang baliw na tao, sa hindi tiyak na edad, tinatangkilik ang isang maling akala ng pag-uusig. Pathologically walang tiwala, makasarili, awtoritaryan. Mga pangalawang diagnosis - programmer at katulong. nagmamay-ari Ingles sa isang antas ng tungkol sa bastos na pakikipag-usap. Pamilyar din sa ilang iba pang mga wika. Siya ay interesado sa lahat at sa lahat, dahil sa kung saan ang kanyang kaalaman sa anumang larangan ay mababaw at mababaw. Ang karakter ay hindi mapigilan. Lakas - 55 degrees.

Dump at ibalik ang database data ng MySQL Ito ay medyo simple at maginhawang gawin nang malayuan sa pamamagitan ng SSH o direkta sa pamamagitan ng server console. Malayo, maaari itong gawin gamit ang mga programang Putty/Kitty. Maaari mo ring patakbuhin ang mga halimbawa sa ibaba sa Windows sa pamamagitan ng pagpapatakbo command linecmd'. Nasa ibaba ang mga halimbawa kung paano gumawa ng MySQL database dumps at pagkatapos ay i-restore ang mga ito kung kinakailangan, halimbawa para sa iyong website, online store o ilang iba pang proyekto.

Paglikha ng MySQL Database Dump

Upang maisagawa ang mga utos na ito, kumonekta nang malayuan sa iyong server sa pamamagitan ng SSH gamit ang isa sa mga program na nakalista sa itaas. Pagkatapos kumonekta at pahintulutan sa server/hosting, maaari mong ilagay ang mga command sa ibaba.

# I-backup ang isang database para mag-file ng dump_file.sql mysqldump -uroot -p your_base > dump_file.sql # Naka-on tambakan ng bintana Pinakamainam na gumawa ng bahagyang naiibang command na pumipigil sa # aksidenteng pag-overwriting ng mga dump lines dahil sa pag-convert ng mga newline na character na "\r\n" sa "\n" mysqldump -uroot -p your_base -r dump_file_utf8.sql # Kung kailangan mo ng backup ng mga indibidwal na talahanayan lamang, at hindi ang buong database # (tukuyin ang mga pangalan ng talahanayan na pinaghihiwalay ng isang puwang pagkatapos ng pangalan ng database) mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql # Kung kailangan mong lumikha ng backup ng database lamang structure na walang mismong data mysqldump -uroot -p -- no-data your_base > dump_file.sql # I-backup ang lahat ng database sa file na current_date.gz mysqldump -uroot -p --all_databases | gzip -c > "date "+%Y-%m-%d"".gz # Backup, kung saan ang isang hiwalay na INSERT ay ginawa para sa bawat record # at may tahasang indikasyon ng database na naka-encode ng UTF-8 mysqldump -uroot -p --default- character-set=utf8 your_base --extended-insert=FALSE | gzip -c > "petsa "+%Y-%m-%d"".gz

# I-backup ang isang database sa dump_file.sql

mysqldump - uroot - p your_base > dump_file . sql

# Sa Windows pinakamainam na gumawa ng dump na may bahagyang naiibang command na pumipigil

# aksidenteng overwriting ng mga dump lines dahil sa conversion ng mga newline na character na "\r\n" sa "\n"

mysqldump - uroot - p your_base - r dump_file_utf8 . sql

# Kung kailangan mo ng backup ng mga indibidwal na talahanayan lamang, at hindi ang buong database

# (ipahiwatig ang mga pangalan ng talahanayan na pinaghihiwalay ng isang puwang pagkatapos ng pangalan ng database)

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

# Kung kailangan mong i-backup lamang ang istraktura ng database nang walang data mismo

mysqldump - uroot - p -- no - data your_base > dump_file . sql

# I-backup ang lahat ng database sa file na current_date.gz

mysqldump - uroot - p -- all_databases | gzip - c > "petsa "+%Y-%m-%d"" . gz

# Backup, kung saan ang isang hiwalay na INSERT ay nilikha para sa bawat entry

# at tahasang tinukoy ang database ng pag-encode ng UTF-8

mysqldump - uroot - p -- default - character - set = utf8 your_base -- extended - insert = FALSE | gzip - c > "petsa "+%Y-%m-%d"" . gz

Sa halimbawa sa itaas, ang utility ay ginagamit upang lumikha ng backup mysqldump, na kasama sa mysql. Ang mga sumusunod ay ang mga parameter para sa paglikha ng backup ng database, na susuriin namin nang mas detalyado:

  • -u– ang parameter ay tumutukoy sa login na gagamitin para kumonekta sa database. Sa halimbawa, ginagamit namin ang root login, na dapat na tinukoy sa parameter na ito nang walang puwang! Bilang isang resulta, ito ay mukhang -uroot
  • -p– ang parameter ay nagpapahiwatig na kailangan mong magpasok ng isang password para sa tinukoy na pag-login. Iniwan namin itong walang laman, bilang isang resulta kung saan ang password ay kailangang ipasok pagkatapos ng pagpindot sa "Enter" kapag isinasagawa ang utos. Gayunpaman, maaari mong tukuyin ang password dito mismo, tulad ng sa parameter ng pag-login, nang walang puwang pagkatapos -p, gayunpaman, ang pamamaraang ito ay hindi ligtas, dahil nai-save ng console ang iyong mga utos sa isang log file at kung hindi mo ito regular na i-clear, ito ay maaaring matingnan ng isang umaatake.
  • iyong_base– sa halip na ang linyang ito sa halimbawa, kailangan mong ipahiwatig ang tunay na pangalan ng iyong database kung saan ka gumagawa ng backup.
  • > – isang operator na nagpapakita ng direksyon ng pagkilos, i.e. na parang nagpapahiwatig na ikaw ay magsusulat mula sa database patungo sa isang file.
  • dump_file.sql– ito ang pangalan ng iyong .slq file kung saan kailangan mong i-save ang iyong database. Ito ay ipinahiwatig ng isang puwang pagkatapos ng operator na '>'. Maaari mong tukuyin ang anumang iba pang pangalan. Halimbawa, upang sa pangalan ay awtomatikong ipasok ang system kasalukuyang panahon, tukuyin lamang ang isang linya tulad ng:

    "petsa "+%Y-%m-%d""

    "petsa "+%Y-%m-%d""


    pagkatapos ng linyang ito sa halimbawa ang extension ng file ay ipinahiwatig ' .gz'. Bilang resulta, isang file tulad ng ' 2014-11-15.gz‘.

    Pansin! Kung tinukoy mo lamang ang pangalan ng file, mase-save ito sa parehong direktoryo na may kaugnayan sa kung saan mo ipapatupad ang utos na ito. Yung. kung makakita ka ng ganito sa command prompt # , Saan ugat@dvs ito ang login at pangalan ng server, ang file ay gagawin sa direktoryo /bahay. Upang baguhin ang pag-save ng file sa ibang path, tukuyin sa halip na ang pangalan buong landas para mag-save ng file, halimbawa: /var/www/backup/dump_file.sql.

  • Sa pangalawang halimbawa, sa halip na ang operator ' > Ginagamit ang 'operator' | ', na nagpapahiwatig ng pangangailangan na gumanap karagdagang utos gzip na may parameter ' -c' na nagpapahintulot sa iyo na agad na i-pack ang dump sa isang archive, at pagkatapos lamang i-save ito sa isang file tulad ng ' 2014-11-15.gz', gaya ng iniulat ng operator' > ‘.
  • Parameter -walang data nagbibigay-daan sa iyo na i-dump lamang ang istraktura ng database nang wala ang data mismo. Medyo kapaki-pakinabang sa ilang mga kaso kapag ang data ay hindi kailangan.
  • Mga pagpipilian –default-character-set=utf8 At –extended-insert=FALSE. Ang una ay nagpapahintulot sa iyo na tahasang tukuyin ang pag-encode na ginagamit ng database na ito, sa gayon ay maiiwasan ang pag-save ng database sa maling pag-encode sa halip na utf8, maaari mong tukuyin ang anumang iba pang pag-encode, halimbawa cp1251. Ang pangalawang parameter ay nagpapahintulot sa iyo na tukuyin na ang isang hiwalay na INSERT na utos ay dapat gawin para sa bawat tala kapag nag-e-export. Sa ilang mga kaso, maaaring kailanganin ito kapag bahagyang nagpapanumbalik ng data mula sa isang dump.
  • Pagpapanumbalik ng Database mula sa MySQL Dump File

    Ngayon tingnan natin ang baligtad na proseso ng pagpapanumbalik ng isang database mula sa isang dump file. Ang pagkilos na ito isinagawa gamit ang mysql program. Tingnan natin kaagad ang isang halimbawa.