Mysql gjenoppretting fra dump via konsollen. Vi dumper MySQL-databasen og eksporterer dataene i konsollen. Database import

Nytte mysqldump brukes til sikkerhetskopiering og gjenoppretting sikkerhetskopier(ofte referert til som "dumper") av databaser og MySQL-tabeller. Verktøyet er beregnet på kommandolinje og jobber under operasjonsstuer Windows-systemer, FreeBSD og noen andre. Mysqldump er gratis programvare med åpen kildekode.

Til lokal kopi baser MySQL-data med ISAM og MyISAM tabelltype er det bedre å bruke et verktøy skrevet i Perl: mysql hotcopy. Den fungerer mye raskere enn mysqldump, ettersom den kopierer hele databasefilene *.frm, *.myd og *.myi, etter å ha låst tabellene. Også for riktig drift mysqlhotcopy krever Unix-verktøy: cp eller scp. For InnoDB-tabeller er ikke mysqlhotcopy egnet, siden ikke alle InnoDB-tabellfiler er lagret i standard MySQL-databasekatalogen.

mysqldump eksempler

Den grunnleggende syntaksen for mysqldump er:

mysqldump [OPSJONER] database [tabeller]
mysqldump [ ALTERNATIVER] -- databaser [ ALTERNATIVER] DB1 [ DB2 DB3... ]
mysqldump [OPSJONER] -- alle databaser [ALTERNATIV]

Uten å spesifisere tabellnavn eller bruke --databases eller --all-databases alternativene, vil en dump av alle databaser i MySQL bli hentet.

Ta opp databasedump fra ekstern MySQL-servere med adressen 127.0.0.2 til den lokale datamaskinen til dump_db.sql-filen:

mysqldump - uroot - h127.0.0.2 - p db_name > dump_db.sql

Gjenopprett MySQL-databasen db_name til ekstern server på 127.0.0.2 fra fyllingen som ligger på lokal datamaskin, i filen dump_db.sql:

mysql - uroot - h127.0.0.2 - p db_name< dump_db.sql

Skriv en dump av MySQL-databaser (database1, database2, database3) plassert på en ekstern server på 127.0.0.2 i lokal fil dump_db.sql:

mysqldump - uroot - h127.0.0.2 - p - B database1 database2 database3 > dump_db.sql

Et utvalg på ikke mer enn 50 poster (for eksempel for testing er ikke nødvendig full kopi DB):

Kopier MySQL-databaser til ekstern maskin:

mysqldump -- opt database | mysql -- host= ekstern vert - C-database

Kopier kun MySQL-databasestruktur:

mysqldump - uroot - hh127.0.0.2 - p -- no- data my_dbname > my_db_structure.sql

Mysqldump-verktøyet, brukt uten --opt eller --quick-alternativene, skriver hele resultatet av arbeidet til minnet før du dumper resultatet av et utvalg informasjon. Dette kan forårsake problemer når du får en dump. stor base data. Vær også oppmerksom på at det ikke er nødvendig å bruke --opt eller -e alternativene hvis du har tenkt å bruke et nytt eksemplar mysqldump-programmet og deretter spille det av på en veldig gammel MySQL-server.

Alle alternativer for mysqldump-verktøyet kan sees ved å kjøre det slik:

mysqldump --hjelp

Standard mysqldump parameterliste med Kort beskrivelse lagt ut nedenfor:

--legg til-slipp-database
Legger til DROP DATABASE før hver CREATE DATABASE-setning.

--legg til-slipp-tabell
Legger til DROP TABLE før hver CREATE TABLE-setning.

--add-låser
Legger til LÅS TABELLER før kjøring og LÅS TABELL opp etter hver tabelldump (for å øke hastigheten på MySQL-tilgang).

--alle-databaser, -A
Lagrer alle tabeller fra alle databaser administrert av gjeldende server.

-- tillat-søkeord
Tillat opprettelse av kolonnenavn som samsvarer med søkeord. Fraværet av konflikter sikres ved å legge til tabellnavnet som et prefiks til hvert kolonnenavn.

--kommentarer, -i
Dette alternativet lar deg legge til dumpen Ytterligere informasjon, for eksempel mysqldump-versjon, MySQL-versjon, vertsnavn der MySQL-serveren er plassert.

--kompakt
Dette alternativet forteller mysqldump å lage en dump ved å bruke et så kompakt format som mulig. Alternativet er det motsatte av --kommentarer.

--kompatibelt=navn
Parameteren genererer utdata som er kompatibel med andre DBMS eller eldre MySQL-versjoner. I stedet for navneordet kan du bruke: "ansi", "mysql323", "mysql40", "postgresql", "oracle", "mssql", "db2", "maxdb", "no_key_options", "no_table_options", "no_field_options" . Du kan bruke flere verdier ved å skille dem med kommaer.

--komplett-innsetting, -c
brukt lang form INSERT-setning (med kolonnenavn).

--opprett-alternativer
Legger til tilleggsinformasjon for CREATE TABLE-setninger. Dette kan være tabelltypen, den innledende AUTO_INCREMENT-verdien og andre alternativer.

--databaser, -B
Parameteren lar deg spesifisere navnene på flere databaser du vil opprette en dump for.

--forsinket
Bruk kommandoen INSERT DELAYED når du setter inn rader.

--slett-master-logger
På masterreplikeringsserveren slettes binære logger (logbin) automatisk etter at en dump har blitt opprettet med mysqldump. Dette alternativet inkluderer automatisk alternativet "--master-data".

--deaktiver-nøkler, -K

For hver tabell, omslutt INSERT-setningen med /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; og /*!40000 ALTER TABLE tbl_name AKTIVER NØKLER */; i utgangen av dumpresultatet. Dette vil øke hastigheten på lasting av data på serveren for MyISAM-typetabeller, siden indekser opprettes etter at alle dataene er lagt inn.

--utvidet-innlegg, -e
Bruk INSERT-kommandoen med den nye flerlinjesyntaksen (forbedrer kompaktheten og ytelsen til input-setninger).

--flush-logger, -F
Skriv data til disk systemlogg fra MySQL-serverbufferen før du starter dumpen.

--kraft, -f
Fortsett selv om det oppstår en feil under oppretting av dump.

--hex-blob
Parameteren lar deg representere binære data i felt av typen BINARY, VARBINARY, BLOB og BIT i heksadesimalt format. Så sekvensen "abc" vil bli erstattet av 0x616263.

--ignore-table=db_name.tbl_name
Tillater at databasetabellen tbl_name ignoreres ved dumping. Hvis du vil ekskludere flere tabeller fra dumpen, må du bruke flere "--ignore-table"-alternativer, og spesifisere én tabell i hvert av alternativene.

--sett inn-ignorer
Legger til nøkkelord IGNORER til INSERT-setningen.

--lås-alle-tabeller, -x
Hvis du spesifiserer dette alternativet, låses alle tabeller i alle databaser for hele dumpen av alle databaser.

--lås-bord, -l
Hvis du spesifiserer dette alternativet, låses tabellene til databasen som dumpes.

--no-autocommit
Inkluderer alle INSERT-setninger relatert til samme tabell i én transaksjon, noe som resulterer i raskere datainnlasting.

--no-create-db, -n
Undertrykker dumpingen av CREATE DATABASE-setninger som automatisk legges til når du bruker alternativene --databases og --all-databases.

--ingen data, -d
Undertrykker opprettelsen av INSERT-setninger i dumpen, noe som kan være nyttig når du dumper en databasestruktur uten selve dataene.

--opt
Parameteren er ment å optimalisere hastigheten på sikkerhetskopiering av data og er en forkortelse som inkluderer følgende alternativer: --quick --add-drop-table --add-locks --create-options --disable-keys --extended- sette inn --lock-tables --set-charset. Fra og med MySQL 4.1 brukes --opt-alternativet som standard, dvs. alle alternativene ovenfor er aktivert som standard, selv om de ikke er spesifisert. For å utelukke denne oppførselen, må du bruke parameterne --skip-opt

--ordre etter primær
Spesifisering av en parameter resulterer i som hver tabell er sortert etter primærnøkkel eller den første unike indeksen.

--port, -P
Antall TCP-port Brukes til å koble til verten.

--protocol=(TCP|SOCKET|PIPE|MINNE)
Denne parameteren lar deg angi protokollen for tilkobling til serveren.

--rask, -q
Lar deg begynne å dumpe uten å vente fullastet data fra serveren og dermed spare minne.

--sitatnavn, -Q
Setter database-, tabell- og kolonnenavn i backticks `. Fra og med MySQL 4.1 er dette alternativet aktivert som standard.

--erstatte
Legger til REPLACE nøkkelordet i INSERT-setningen. Dette alternativet dukket først opp i MySQL 5.1.3.

--result-file=/bane/til/fil, -r /bane/til/fil
Parameteren dirigerer dumpen til fil. Dette alternativet er spesielt nyttig på Windows uten å bruke kommandolinjen. når du kan omdirigere resultatet til en fil ved å bruke > og >> sekvensene.

--rutiner, -R
Dette alternativet oppretter en dump av lagrede prosedyrer og funksjoner. Tilgjengelig siden MySQL 5.1.2.

--enkelttransaksjon
Alternativet oppretter en dump som en enkelt transaksjon.

--hopp over kommentarer
Dette alternativet lar deg undertrykke utdata av tilleggsinformasjon til dumpen.

--socket=/path/to/socket, -S /path/to/socket
Socket-fil for å koble til localhost.

--tab=/bane/, -T /bane/
Når dette alternativet brukes, opprettes to tabeller i banekatalogen for hver tabell. individuelle filer: tbl_name.sql som inneholder LAG uttalelse TABLE, og tbl_name.txt, som inneholder tabulatordelte tabelldata. Dataformatet kan overstyres eksplisitt med --fields-xxx og --lines-xxx alternativene.

--tabeller
Overstyrer --databases (-B) alternativet. Alle argumenter etter dette alternativet behandles som tabellnavn.

--utløsere
Utløserne er dumpet. Denne innstillingen er aktivert som standard. for å deaktivere det, bruk --skip-triggers alternativet.

--tz-utc
ved hjelp av gitt parameter en operatør av formen SET TIME_ZONE="+00:00" vil bli lagt til dumpen, som vil tillate utveksling av dumps i forskjellige tidssoner.

--verbose, -v
Utvidet utgangsmodus. Konklusjon over detaljert informasjon om driften av programmet.

--versjon, -V
Vis informasjon om versjonen av programmet.

--where="where-condition", -w "where-condition"
Dump bare utvalgte poster. Merk at anførselstegnene er obligatoriske: "--where=user="test"" "-wuserid>1" "-wuserid

--xml, -X
Representerer en databasedump som XML.

--første-slave, -x
Låser alle tabeller i alle databaser.

--debug=..., -#
Spor programfremdrift (for feilsøking).

--hjelp
Hjelp vises og programmet avsluttes.

mysqldump - dokumentasjon og eksempler.

Å gjøre en dump (backup) av databasen er veldig viktig. Så jeg kom med noen kommentarer med eksempler på et så flott verktøy som mysqldump.

mysqldump - verktøyet lar deg få en dump av innholdet i en database eller et sett med databaser for å lage en sikkerhetskopi eller overføre data til en annen SQL-databaseserver (ikke nødvendigvis en MySQL-server). Dumpen vil inneholde et sett med SQL-kommandoer for å lage og/eller fylle ut tabeller.

mysqldump-u rot -p -f navnedatabase >

Med dette laget gjør vi det sikkerhetskopiering av database data under navnet name_database for å kjøre C til filen mydb_backup_name_database.txt

Du trenger ikke lage filen, MySQL vil lage den for deg.

mysql-u rot -p -f navnedatabase< C:\mydb_backup_name_database.txt

med denne kommandoen importerer vi sikkerhetskopidata fra filen C:\mydb_backup_name_database.txt

Merk: -f, --force er et alternativ som forteller deg å fortsette selv om du får en SQL-feil, dvs. ignorere feil. For eksempel hvis tabellen allerede har en identisk rad i alt.

For ikke å bli spurt om passord, må du skrive det umiddelbart etter -p, det vil si uten mellomrom. Hvis passordet pwd, så ser eksemplet slik ut:

mysqldump-u rot -s pwd-f navnedatabase > C:\mydb_backup_navn_database.txt

Hvis du bruker ofte gitt kommando, er det bedre å lage en egen bruker med nødvendige rettigheter for å gjøre root-passordet mindre synlig

Vurder mer finjustering mysqldump:

--databaser lar mysqldump inkludere CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME og USE DBNAME-kommandoer i gjenopprettingsskriptet. Dette vil tillate deg å lage fungerende databaser fra bunnen av. Det vil si at uten å bruke --databases, antas det at brukeren gjenoppretter en database og spesifiserer eksplisitt hvor dataene som skal gjenopprettes skal plasseres. Hvis sikkerhetskopien er opprettet for å lage en fullstendig fungerende kopi av dataene, for eksempel på en annen MySQL-server, må denne nøkkelen brukes;

--alle-databaser lar deg lage kopier av alle databaser som finnes på gitt MySQL-server. Hvis du trenger å lage kopier av bare noen databaser, trenger du bare å spesifisere dem atskilt med et mellomrom når du kaller mysqldump fra kommandolinjen (se ovenfor);

Nøkkel --hjelp. Mysqldump-programmet har mange versjoner. Du kan se hvilke funksjoner som støttes spesifikt av din versjon ved å bruke denne nøkkelen;

--legg til-slipp-tabell- en nøkkel som vil få mysqldump til å legge til drop table-kommandoen til det endelige skriptet før du oppretter tabellene. Dette vil unngå noen feil ved gjenoppretting av databasen fra en sikkerhetskopi. Det må selvfølgelig tas i betraktning at tabellene som ligger i arbeidskopi(hvis tabeller med samme navn finnes i sikkerhetskopien), før de gjenopprettes fra sikkerhetskopien, vil de bli slettet fra hoveddatabasen og gjenskapt fra sikkerhetskopien;

--ingen data. Med denne nøkkelen kan du raskt lage en kopi av strukturen til tabellen/databasene uten selve dataene. For eksempel har du opprettet kompleks tabell og ønsker å lagre strukturen for fremtiden, og du trenger ikke dataene som er i denne tabellen i sikkerhetskopien;

--resultatfil=...- denne bryteren kan brukes til å omdirigere utdata til en fil. Du kan bruke den vanlige unix-omdirigeringen med ">"-kommandoen, eller du kan bruke denne nøkkelen. Hvem liker hva;

En annen veldig nyttige råd om bruk av mysqldump i et vertsmiljø. Som regel, ved bruk av hosting, pålegges brukeren noen begrensninger. Du kan for eksempel ikke ta mer enn et visst beløp fysisk hukommelse(RAM, RAM). mysqldump legger alle dataene mottatt fra MySQL-serveren i minnet som standard, og skriver deretter alt til disk. Følgelig, hvis leverandøren tillater deg å ta for eksempel 30 MB minne, og databasen du lager en kopi av ved å bruke mysqldump, opptar 50 MB, vil selvfølgelig en feil oppstå her - mysqldump vil ikke kunne fungere riktig og vil ende unormalt, noe som vil informere deg. For å "tvinge" mysqldump til å skrive data direkte til disk i stedet for å lagre dem, selv midlertidig, i minnet, bruk bryteren --rask. Dette vil løse problemet.

Her er et par flere nyttige eksempler:

mysqldump -u rot -s pwd-f --default-character-set=cp1251 dbnavn| gzip -c > filnavn.txt .gz

Du kan pakke ut et slikt arkiv med kommandoen:

gunzip filnavn.txt .gz

For å vite hvilken dato sikkerhetskopieringen ble laget, kan du skrive følgende kommando:

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

og hvis du har å gjøre dumper med forskjellige kodinger, er det praktisk å bruke variabler:

sett DBKARAKT=utf8

sett dbnavn= brudd

mysqldump -u rot -s pwd-f --default-character-set=$ DBKARAKT $dbnavn| bzip2 -c > sql. $DBNAME.`dato "+%Y-%m-%d"`.bz2

Hvis du vil automatisere sletting av gamle arkiver, prøv å bruke cron og find-kommandoen som vanligvis finnes på unix. Kjører med jevne mellomrom

finne~/archives-dir -navn "*.gz" -mtime +7 -exec rm -f () \;

På denne måten vil du slette arkiver som er "eldre" enn syv dager.

I dag vil jeg snakke om databasedumper. Denne setningen i seg selv var en gang skremmende, selv om det generelt ikke er noe forferdelig i den. Så først og hovedspørsmålet: hva er en databasedump? Svaret på det er uventet enkelt - en databasedump er en fil med innholdet, som lar deg gjenopprette databasen fra bunnen av. De. det er bare en kopi av det. Så hvorfor heter ikke databasedumpen "db copy"? Poenget er at selve dumpen ikke er en database, den lar deg bare gjenskape den. Poenget er at databasen kan lagres i forskjellige filer avhengig av versjonen av subd, på typen operativsystem og andre faktorer. De. det er svært vanskelig å finne alle filene til en database i systemet og overføre dem til et annet system. For å lette denne oppgaven fungerer databasedumpen like bra.

Hvorfor er det nødvendig å migrere databasen?

For det første å lage sikkerhetskopier, eller gjenopprettingspunkter før du gjør viktige endringer i strukturen – for å kunne rulle tilbake ved eventuelle problemer. For eksempel installerte du en tredjepartskomponent, og som et resultat viste nettstedet seg å være ubrukelig, og du må raskt gjenopprette arbeidet. Det er her behovet for å bruke en databasedump oppstår.

For det andre, når du oppretter et nettsted, gjøres det vanligvis først på lokal maskin under virtuell webserver og først da overført til hosting. Og hvis alt er mer eller mindre klart med overføring av filer, så er ikke overføringen av databasen så åpenbart en løsbar oppgave. Her kan du heller ikke klare deg uten en databasedump.

Så, hva er en databasedump funnet ut. Spørsmålet gjenstår hvordan du bruker det. La oss vurdere en standardoppgave innen webprogrammering – å overføre et nettsted opprettet på en lokal maskin til en webvert. Jeg vil ikke beskrive i detalj overføringen av filer, jeg vil fokusere på databaser. Så vi har en MySql-database og oppgaven er å overføre den til et webhotell. For ikke å finne opp hjulet på nytt, vil vi bruke det utbredte phpMyAdmin-verktøyet, som vanligvis alltid installeres av leverandøren din, og det er også inkludert i Denver. Til slutt er verktøyet også gratis og tilgjengelig for nedlasting på den offisielle nettsiden. Den fungerer på en webserver, og er skrevet inn php språk, som lar deg bruke den direkte i nettleseren. De. det skal ikke være noen problemer her, hvis de fortsatt oppstår, skriv i kommentarfeltet - vi finner ut av det.

La oss begynne å lage en databasedump. Åpne phpMyAdmin, velg databasen vi trenger og klikk på fanen " Eksport". Som et resultat bør du få noe sånt som dette:

Her må du velge alle tabeller (vel, eller de du vil rulle tilbake endringer i) og sette alternativknappen inn SQL-verdi. I strukturdelen kan du merke det første feltet "Legg til DROPPTABELL / VISNING / PROSEDYRE / FUNKSJON / HENDELSE" for å slette de tilsvarende tabellene i destinasjonsdatabasen før du importerer dumpen, hvis den overføres for første gang - du kan ikke merke av i boksen. I samme vindu nedenfor ser vi delen "Lagre som fil":

Marker faktisk "Lagre som fil" og skriv ønsket filnavn. En databasedump kan arkiveres, men den er vanligvis ikke stor nok til å gjøre det verdt å komprimere filen. Vi trykker på "GO"-knappen, og vi får standardvinduet for å lagre filen i nettleseren:
. Den lagrede filen er databasedumpen. Hvis du åpner den i samme notisblokk, vil du se på begynnelsen av linjen som

PhpMyAdmin SQL Dump
-- versjon 3.2.3
-- http://www.phpmyadmin.net

Selve filen består av spørringer for å opprette og sette inn verdier i en tabell, skrevet inn SQL-språk. Det er absolutt ingen sjamanisme, alt er veldig åpenbart. Nå er neste oppgave å importere dumpen. Med henne heller ikke noe komplisert. Gå til vertskontrollpanelet, finn phpMyAdmin der, kjør det. Du må kanskje spesifisere et brukernavn / passord - avhengig av innstillingene til hosteren. Vel, da er handlingene like - velg ønsket database, klikk på "Importer" -fanen, vi ser følgende vindu:

I delen "Fil som skal importeres", bruk "Bla gjennom"-knappen, spesifiser databasedumpfilen, nedenfor legger vi ned kodingen - i joomla er det utf-8 som standard. Nedenfor er seksjonen "Delvis import" og feltet "Antall poster (spørringer) som skal hoppes over fra stjerne" hvor du kan legge inn numerisk verdi- antall linjer som behandles i ett pass, i tilfelle hele databasen ikke rekker å importeres i løpet av skriptets levetid. Standardverdien "0" tilsvarer importen av hele databasen i én kjøring av skriptet. I min praksis har jeg ikke vært nødt til å forholde meg til at basen ikke rekker å fylles opp i ett pass, selv om det ikke betyr at slike tilfeller ikke skjer. Verdiene til de resterende feltene trenger ikke å endres, bare trykk på "GO"-knappen. Det er alt, databasedumpen er importert.

Og til slutt noen avklaringer.

1) Hvorfor beskrev jeg måten å importere/eksportere alle tabeller på og ikke hele databasen? Faktum er at du oftest må forholde deg til import / eksport prosedyren når du overfører data fra en webserver til en lokal maskin og omvendt. Men veldig ofte på den lokale maskinen brukes tilgang av regnskap"root" uten passord. Vi har ikke råd til dette med hosting. Og databasen inneholder ikke bare data, men også "privilegier" - rettighetene til å få tilgang til visse brukere til den. For ikke å måtte opprette/slette brukere hver gang og tildele tilgangsrettigheter til dem, brukes en tilnærming når kun strukturen til tabeller og dataene i den skrives til databasedumpen. Hvis det bare lages en sikkerhetskopi for samme server, er det fullt mulig å dumpe hele databasen.

2) Hvorfor phpMyAdmin? Poenget her er slett ikke at det ikke er noe alternativ til det - det er bare mange av dem, det er mer funksjonelle ting og enklere. Bare phpMyAdmin er inkludert i standard sett for de fleste virtuell hosting, dvs. du trenger ikke å gjøre noe for å installere det. De. vi bare åpner den og dumper databasen. Og selvfølgelig kan bruk av phpMyAdmin være nyttig for mange oppgaver - den samme spørringstestingen, visning av strukturen til tabeller, data i dem.

Vel, det er faktisk alt jeg ønsket å fortelle i denne artikkelen. Kommentarer er velkomne som alltid.