Mysql återställning från dump via konsolen. Vi dumpar MySQL-databasen och exporterar data till konsolen. Databasimport

Verktyg mysqldump används för säkerhetskopiering och återställning säkerhetskopior(ofta kallade "dumpar") av databaser och MySQL-tabeller. Verktyget är avsett för kommandorad och arbetar under operationssalar Windows-system, FreeBSD och några andra. Mysqldump är gratis programvara med öppen källkod.

För lokal kopia baser MySQL-data med ISAM och MyISAM tabelltyp är det bättre att använda ett verktyg skrivet i Perl: mysql hotcopy. Det fungerar mycket snabbare än mysqldump, eftersom det kopierar hela databasfilerna *.frm, *.myd och *.myi, efter att tabellerna har låsts. Också för korrekt funktion mysqlhotcopy kräver Unix-verktyg: cp eller scp. För InnoDB-tabeller fungerar inte mysqlhotcopy, eftersom inte alla InnoDB-tabellfiler lagras i MySQL-databasens standardkatalog.

mysqldump exempel

Den grundläggande syntaxen för mysqldump är:

mysqldump [ALTERNATIV] databas [tabeller]
mysqldump [ ALTERNATIV] -- databaser [ ALTERNATIV] DB1 [ DB2 DB3... ]
mysqldump [ALTERNATIV] -- alla databaser [ALTERNATIV]

Utan att ange tabellnamn eller använda alternativen --databases eller --all-databases, kommer en dump av alla databaser i MySQL att erhållas.

Fånga databasdump från fjärrkontrollen MySQL-servrar med adressen 127.0.0.2 till den lokala datorn till filen dump_db.sql:

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

Återställ MySQL-databasen db_name till Fjärrserver vid 127.0.0.2 från soptippen som ligger på lokal dator, i filen dump_db.sql:

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

Skriv en dump av MySQL-databaser (databas1, databas2, databas3) som finns på en fjärrserver på 127.0.0.2 i lokal fil dump_db.sql:

mysqldump - uroot - h127.0.0.2 - p - B databas1 databas2 databas3 > dump_db.sql

Ett urval av högst 50 poster (till exempel för testning behövs inte fullständig kopia DB):

Kopiera MySQL-databaser till fjärrdator:

mysqldump -- opt databas | mysql -- host= fjärrvärd - C-databas

Kopiera endast MySQL-databasstruktur:

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

Verktyget mysqldump, som används utan alternativen --opt eller --quick, skriver hela resultatet av sitt arbete till minnet innan resultatet av ett urval av information dumpas. Detta kan orsaka problem när du skaffar en soptipp. stor bas data. Observera också att det inte är nödvändigt att använda --opt eller -e alternativen om du tänker använda ett nytt exemplar mysqldump-programmet och sedan spela upp det på en mycket gammal MySQL-server.

Alla alternativ för mysqldump-verktyget kan ses genom att köra det så här:

mysqldump --hjälp

Standard mysqldump parameterlista med kort beskrivning postat nedan:

--add-drop-databas
Lägger till DROP DATABASE före varje CREATE DATABASE-sats.

--lägg till-släpp-tabell
Lägger till DROP TABLE före varje CREATE TABLE-sats.

--add-locks
Lägger till LÅS TABELLER före exekvering och LÅS TABELL efter varje tabelldump (för att påskynda MySQL-åtkomst).

--alla-databaser, -A
Sparar alla tabeller från alla databaser som hanteras av den aktuella servern.

--tillåt-sökord
Tillåt att du skapar kolumnnamn som matchar sökord. Frånvaron av konflikter säkerställs genom att lägga till tabellnamnet som ett prefix till varje kolumnnamn.

--kommentarer, -i
Det här alternativet låter dig lägga till i dumpen Ytterligare information, såsom mysqldump-version, MySQL-version, värdnamn där MySQL-servern finns.

--kompakt
Det här alternativet säger åt mysqldump att skapa en dump med ett så kompakt format som möjligt. Alternativet är motsatsen till --kommentarer.

--kompatibelt=namn
Parametern genererar utdata som är kompatibel med andra DBMS eller äldre MySQL-versioner. Istället för namnnyckelordet kan du använda: "ansi", "mysql323", "mysql40", "postgresql", "oracle", "mssql", "db2", "maxdb", "no_key_options", "no_table_options", "no_field_options" . Du kan använda flera värden genom att separera dem med kommatecken.

--komplett-insert, -c
Begagnade lång form INSERT-sats (med kolumnnamn).

--skapa-alternativ
Lägger till ytterligare information för CREATE TABLE-satser. Detta kan vara tabelltypen, det initiala AUTO_INCREMENT-värdet och andra alternativ.

--databaser, -B
Parametern låter dig ange namnen på flera databaser för vilka du vill skapa en dump.

--försenad
Använd kommandot INSERT DELAYED när du infogar rader.

--delete-master-logs
På huvudreplikeringsservern raderas binära loggar (logbin) automatiskt efter att en dump har skapats med mysqldump. Det här alternativet inkluderar automatiskt alternativet "--master-data".

--inaktivera-nycklar, -K

För varje tabell, omge INSERT-satsen med /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; och /*!40000 ALTER TABLE tbl_name ENABLE KEYER */; i utmatningen av dumpresultatet. Detta kommer att påskynda laddningen av data på servern för tabeller av MyISAM-typ, eftersom index skapas efter att all data har matats in.

--extended-insert, -e
Använd kommandot INSERT med ny flerradssyntax (förbättrar kompaktheten och prestandan för inmatningssatser).

--spolningsloggar, -F
Skriv data till disk system-logg från MySQL-serverbufferten innan du startar dumpningen.

--kraft, -f
Fortsätt även om ett fel uppstår när du skapar en dump.

--hex-blob
Parametern låter dig representera binära data i fält av typen BINARY, VARBINARY, BLOB och BIT i hexadecimalt format. Så sekvensen "abc" kommer att ersättas av 0x616263.

--ignore-table=db_name.tbl_name
Tillåter att db_name-databastabellen tbl_name ignoreras vid dumpning. Om du vill utesluta flera tabeller från dumpen måste du använda flera "--ignore-table"-alternativ, och ange en tabell i vart och ett av alternativen.

--infoga-ignorera
Lägger till nyckelord IGNORERA till INSERT-satsen.

--lås-alla-bord, -x
Om du anger det här alternativet låses alla tabeller i alla databaser under hela dumpningen av alla databaser.

--lås-bord, -l
Om du anger det här alternativet låses tabellerna för databasen som dumpas.

--ingen autocommit
Inkluderar alla INSERT-satser relaterade till samma tabell i en transaktion, vilket resulterar i snabbare dataladdning.

--no-create-db, -n
Undertrycker dumpningen av CREATE DATABASE-satser som läggs till automatiskt när alternativen --databases och --all-databases används.

--ingen data, -d
Undertrycker skapandet av INSERT-satser i dumpen, vilket kan vara användbart när du dumpar en databasstruktur utan själva data.

--välja
Parametern är avsedd att optimera hastigheten för säkerhetskopiering av data och är en förkortning som innehåller följande alternativ: --quick --add-drop-table --add-locks --create-options --disable-keys --extended- infoga --lock-tables --set-charset. Från och med MySQL 4.1 används alternativet --opt som standard, dvs. alla ovanstående alternativ är aktiverade som standard, även om de inte är specificerade. För att utesluta detta beteende måste du använda parametrarna --skip-opt

--order-efter-primär
Att specificera en parameter resulterar i som varje tabell sorteras efter primärnyckel eller det första unika indexet.

--port, -P
siffra TCP-port Används för att ansluta till värden.

--protokoll=(TCP|SOCKET|PIPE|MINNE)
Denna parameter låter dig ställa in protokollet för anslutning till servern.

--snabb, -q
Gör att du kan börja dumpa utan att vänta full belastning data från servern och därigenom spara minne.

--citat-namn, -Q
Sätter databas-, tabell- och kolumnnamn i backticks `. Från och med MySQL 4.1 är det här alternativet aktiverat som standard.

--byta ut
Lägger till nyckelordet REPLACE till INSERT-satsen. Det här alternativet dök först upp i MySQL 5.1.3.

--result-fil=/sökväg/till/fil, -r /sökväg/till/fil
Parametern dirigerar dumpningen till fil. Det här alternativet är särskilt användbart på Windows utan att använda kommandoraden. när du kan omdirigera resultatet till en fil med hjälp av sekvenserna > och >>.

--rutiner, -R
Det här alternativet skapar en dump av lagrade procedurer och funktioner. Tillgänglig sedan MySQL 5.1.2.

--entransaktion
Alternativet skapar en dump som en enda transaktion.

--hoppa över kommentarer
Det här alternativet låter dig undertrycka utmatningen av ytterligare information till dumpen.

--socket=/path/to/socket, -S /path/to/socket
Socket-fil för att ansluta till localhost.

--tab=/sökväg/, -T /sökväg/
När detta alternativ används skapas två tabeller i sökvägskatalogen för varje tabell. enskilda filer: tbl_name.sql som innehåller SKAPA uttalande TABLE och tbl_name.txt, som innehåller tabbavgränsade tabelldata. Dataformatet kan explicit åsidosättas med alternativen --fields-xxx och --lines-xxx.

--tabeller
Åsidosätter alternativet --databases (-B). Alla argument efter detta alternativ behandlas som tabellnamn.

--utlösare
Avtryckarna är dumpade. Den här inställningen är aktiverad som standard. för att inaktivera det, använd alternativet --skip-triggers.

--tz-utc
använder sig av given parameter en operatör av formen SET TIME_ZONE="+00:00" kommer att läggas till dumpen, vilket gör att dumpar kan bytas ut i olika tidszoner.

--verbose, -v
Utökat utgångsläge. Slutsats över detaljerad information om hur programmet fungerar.

--version, -V
Visa information om versionen av programmet.

--where="where-condition", -w "where-condition"
Dumpa endast valda poster. Observera att citattecken är obligatoriska: "--where=user="test"" "-wuserid>1" "-wuserid

--xml, -X
Representerar en databasdump som XML.

--första-slav, -x
Låser alla tabeller i alla databaser.

--debug=..., -#
Spåra programförlopp (för felsökning).

--hjälp
Hjälp visas och programmet avslutas.

mysqldump - dokumentation och exempel.

Att göra en dumpning (säkerhetskopiering) av databasen är mycket viktigt. Så jag gjorde några kommentarer med exempel på ett så bra verktyg som mysqldump.

mysqldump - verktyget låter dig få en dump av innehållet i en databas eller en uppsättning databaser för att skapa en säkerhetskopia eller överföra data till en annan SQL-databasserver (inte nödvändigtvis en MySQL-server). Dumpen kommer att innehålla en uppsättning SQL-kommandon för att skapa och/eller fylla i tabeller.

mysqldump-u rot -p -f namndatabas >

Med det här laget gör vi säkerhetskopiering av databas data under namnet name_database för att köra C till filen mydb_backup_name_database.txt

Du behöver inte skapa filen, MySQL skapar den åt dig.

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

med detta kommando importerar vi säkerhetskopieringsdata från filen C:\mydb_backup_name_database.txt

Notera: -f, --force är ett alternativ som säger åt dig att fortsätta även om du får ett SQL-fel, dvs. ignorera fel. Till exempel om tabellen redan har en identisk rad i allt.

För att inte bli tillfrågad om ett lösenord måste du skriva det direkt efter -p, det vill säga utan mellanslag. Om lösenordet pwd, då ser exemplet ut så här:

mysqldump-u rot -s pwd-f namndatabas > C:\mydb_backup_namn_databas.txt

Om du ofta använder givet kommando, är det bättre att göra en separat användare med nödvändiga rättigheter för att göra root-lösenordet mindre synligt

Tänk på mer finjustering mysqldump:

--databaser tillåter mysqldump att inkludera CREATE DATABASE /*!33333 OM INTE FINNS*/ DBNAME och ANVÄND DBNAME-kommandon i återställningsskriptet. Detta gör att du kan skapa fungerande databaser från grunden. Det vill säga, utan att använda --databases, antas det att användaren återställer en databas och anger uttryckligen var data som ska återställas ska placeras. Om säkerhetskopian skapas för att göra en helt fungerande kopia av data, till exempel på en annan MySQL-server, måste denna nyckel användas;

--alla-databaser låter dig göra kopior av alla databaser som finns på givet MySQL-server. Om du bara behöver göra kopior av vissa databaser behöver du bara ange dem åtskilda av ett mellanslag när du anropar mysqldump från kommandoraden (se ovan);

Nyckel --hjälp. Mysqldump-programmet har många versioner. Du kan se vilka funktioner som stöds specifikt av din version med denna nyckel;

--lägg till-släpp-tabell- en nyckel som gör att mysqldump lägger till kommandot drop table till det slutliga skriptet innan tabellerna skapas. Detta kommer att undvika vissa fel när databasen återställs från en säkerhetskopia. Naturligtvis måste man ta hänsyn till att tabellerna som finns i arbetsexemplar(om tabeller med samma namn finns i säkerhetskopian), innan de återställs från säkerhetskopian, kommer de att raderas från huvuddatabasen och återskapas från säkerhetskopian;

--inga data. Med denna nyckel kan du snabbt göra en kopia av strukturen i tabellen/databaserna utan själva data. Du har till exempel skapat komplex tabell och vill spara dess struktur för framtiden, och du behöver inte data som finns i denna tabell i säkerhetskopian;

--resultatfil=...- denna switch kan användas för att omdirigera utdata till en fil. Du kan använda den vanliga unix-omdirigeringen med kommandot ">" eller så kan du använda den här nyckeln. Vem gillar vad;

En annan mycket hjälpsamma råd om att använda mysqldump i en värdmiljö. Som regel, när du använder hosting, åläggs vissa begränsningar för användaren. Du kan till exempel inte ta mer än en viss summa fysiskt minne(RAM, RAM). mysqldump lägger all data som tas emot från MySQL-servern i minnet som standard och skriver sedan allt till disken. Följaktligen, om leverantören tillåter dig att ta till exempel 30 MB minne, och databasen som du gör en kopia av med mysqldump upptar 50 MB, kommer naturligtvis ett fel att uppstå här - mysqldump kommer inte att kunna fungera korrekt och kommer att avslutas onormalt, vilket kommer att informera dig. För att "tvinga" mysqldump att skriva data direkt till disk istället för att lagra dem, även tillfälligt, i minnet, använd omkopplaren --snabbt. Detta kommer att lösa problemet.

Här är ytterligare ett par användbara exempel:

mysqldump -u root -s pwd-f --default-character-set=cp1251 dbnamn| gzip -c > filnamn.txt .gz

Du kan packa upp ett sådant arkiv med kommandot:

gunzip filnamn.txt .gz

För att veta vilket datum säkerhetskopieringen gjordes kan du skriva följande kommando:

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

och om du måste göra dumpningar med olika kodningar, är det bekvämt att använda variabler:

uppsättning DBCHARACTER=utf8

uppsättning dbnamn= brott

mysqldump -u root -s pwd-f --default-character-set=$ DBCHARACTER $dbnamn| bzip2 -c > sql. $DBNAME.`datum "+%Y-%m-%d"`.bz2

Om du vill automatisera borttagningen av gamla arkiv, försök använda cron och kommandot find som vanligtvis finns på unix. Kör med jämna mellanrum

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

På så sätt raderar du arkiv som är "äldre" än sju dagar.

Idag vill jag prata om databasdumpar. Denna fras i sig var en gång skrämmande, även om det i allmänhet inte finns något hemskt i det. Så först och huvudfrågan: vad är en databasdump? Svaret på det är oväntat enkelt - en databasdump är en fil med dess innehåll, som låter dig återställa databasen från början. De där. det är bara en kopia av det. Så varför heter inte databasdumpen "db copy"? Summan av kardemumman är att själva dumpningen inte är en databas, den låter dig bara återskapa den. Poängen är att databasen kan lagras i olika filer beroende på versionen av subd, på typen operativ system och andra faktorer. De där. det är mycket svårt att hitta alla filer i en databas i systemet och överföra dem till ett annat system. För att underlätta denna uppgift fungerar databasdumpen lika bra.

Varför är det nödvändigt att migrera databasen?

För det första att skapa säkerhetskopior, eller återställningspunkter innan man gör viktiga ändringar i strukturen – för att kunna rulla tillbaka vid eventuella problem. Till exempel installerade du en tredjepartskomponent, och som ett resultat visade sig webbplatsen vara inoperabel och du måste snabbt återställa dess arbete. Det är här behovet av att använda en databasdump uppstår.

För det andra, när du skapar en webbplats, görs det vanligtvis först på lokal maskin under virtuell webbserver och först därefter överförs till hosting. Och om allt är mer eller mindre klart med överföringen av filer, så är överföringen av databasen inte en så självklar uppgift att lösa. Inte heller här klarar du dig utan en databasdump.

Så, vad är en databasdump listat ut. Frågan kvarstår hur man använder den. Låt oss överväga en standarduppgift inom webbprogrammering - att överföra en webbplats skapad på en lokal maskin till ett webbhotell. Jag kommer inte att beskriva i detalj överföringen av filer, jag kommer att fokusera på databaser. Så vi har en MySql-databas och uppgiften är att överföra den till ett webbhotell. För att inte uppfinna hjulet på nytt kommer vi att använda det utbredda verktyget phpMyAdmin, som vanligtvis alltid installeras av din leverantör, och det ingår även i Denver. I slutändan är verktyget också gratis och tillgängligt för nedladdning på den officiella webbplatsen. Det fungerar på en webbserver och är inskrivet php språk, vilket gör att du kan använda den direkt i webbläsaren. De där. det borde inte vara några problem här, om de fortfarande uppstår, skriv i kommentarerna - vi kommer att reda ut det.

Låt oss börja skapa en databasdump. Öppna phpMyAdmin, välj den databas vi behöver och klicka på fliken " Exportera". Som ett resultat bör du få något i stil med detta:

Här måste du välja alla tabeller (tja, eller de där du vill återställa ändringar) och sätta alternativknappen i SQL-värde. I struktursektionen kan du markera det första fältet "Lägg till DROPPTABELL / VISA / PROCEDUR / FUNKTION / HÄNDELSE" för att radera motsvarande tabeller i destinationsdatabasen innan du importerar dumpen, om den överförs för första gången - du kan inte markera kryssrutan. I samma fönster nedan ser vi avsnittet "Spara som fil":

Markera faktiskt "Spara som fil" och skriv önskat filnamn. En databasdump kan arkiveras, men den är vanligtvis inte tillräckligt stor för att det ska löna sig att komprimera filen. Vi trycker på "GO"-knappen och vi får standardfönstret för att spara filen i webbläsaren:
. Den sparade filen är databasdumpen. Om du öppnar den i samma anteckningsblock kommer du att se i början av raden liknande

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

Själva filen består av frågor för att skapa och infoga värden i en tabell, inskrivna SQL-språk. Det finns absolut ingen shamanism, allt är väldigt uppenbart. Nu är nästa uppgift att importera soptippen. Även med henne var inget komplicerat. Gå till värdkontrollpanelen, hitta phpMyAdmin där, kör den. Du kan behöva ange ett användarnamn/lösenord - beroende på värdvärdens inställningar. Tja, då är åtgärderna liknande - välj önskad databas, klicka på fliken "Importera", vi ser följande fönster:

I avsnittet "Fil att importera", använd "Bläddra"-knappen, ange databasdumpfilen, nedan lägger vi ner kodningen - i joomla är det utf-8 som standard. Nedan finns avsnittet "Delvis import" och fältet "Antal poster (frågor) att hoppa över från stjärnan" där du kan ange numeriskt värde- antalet rader som behandlas i ett pass, om hela databasen inte hinner importeras under skriptets livstid. Standardvärdet "0" motsvarar importen av hela databasen i en körning av skriptet. I min praktik har jag inte behövt ta itu med att basen inte hinner fyllas i ett pass, även om det inte betyder att sådana fall inte händer. Värdena för de återstående fälten behöver inte ändras, tryck bara på "GO"-knappen. Det är allt, databasdumpen importeras.

Och till sist några förtydliganden.

1) Varför beskrev jag sättet att importera/exportera alla tabeller och inte hela databasen? Faktum är att du oftast måste ta itu med import/exportproceduren när du överför data från en webbserver till en lokal maskin och vice versa. Men mycket ofta på den lokala maskinen åtkomst används av konto"root" utan lösenord. Vi har inte råd med detta med hosting. Och databasen innehåller bara inte bara data, utan också "privilegier" - rättigheterna att få åtkomst till vissa användare till den. För att inte behöva skapa/ta bort användare varje gång och tilldela åtkomsträttigheter till dem, används ett tillvägagångssätt när endast strukturen av tabeller och data i den skrivs till databasdumpen. Om bara en säkerhetskopia skapas för samma server är det fullt möjligt att dumpa hela databasen.

2) Varför phpMyAdmin? Poängen här är inte alls att det inte finns något alternativ till det - det finns bara många av dem, det finns mer funktionella saker och enklare. Bara phpMyAdmin ingår i standarduppsättning för de flesta virtuell värd, dvs. du behöver inte göra något för att installera det. De där. vi bara öppnar den och dumpar databasen. Och naturligtvis kan användningen av phpMyAdmin vara användbar för många uppgifter - samma frågetestning, visning av tabellstrukturen, data i dem.

Tja, det var faktiskt allt jag ville berätta i den här artikeln. Kommentarer är välkomna som alltid.