MySQL
Säkerhetskopia med mysqldump
Sök…
Syntax
- mysqldump -u [användarnamn] -p [lösenord] [andra alternativ] db_name> dumpFileName.sql /// Till säkerhetskopiering av en enda databas
- mysqldump -u [användarnamn] -p [lösenord] [andra alternativ] db_name [tbl_name1 tbl_name2 tbl_name2 ...]> dumpFileName.sql /// För att säkerhetskopiera en eller flera tabeller
- mysqldump -u [användarnamn] -p [lösenord] [andra alternativ] - databaser db_name1 db_name2 db_name3 ...> dumpFileName.sql /// För att säkerhetskopiera en eller flera kompletta databaser
- mysqldump -u [användarnamn] -p [lösenord] [andra alternativ] - alla-databaser> dumpFileName.sql /// För att säkerhetskopiera hela MySQL-servern
parametrar
Alternativ | Effekt |
---|---|
- | # Serverinloggningsalternativ |
-h (- --host ) | Host (IP-adress eller värdnamn) att ansluta till. Standard är localhost ( 127.0.0.1 ) Exempel: -h localhost |
-u ( --user ) | MySQL-användare |
-p (- --password ) | MySQL-lösenord. Viktigt : När du använder -p får det inte finnas ett avstånd mellan alternativet och lösenordet. Exempel: -pMyPassword |
- | # Dumpalternativ |
--add-drop-database | Lägg till ett DROP DATABASE uttalande före varje CREATE DATABASE uttalande. Användbart om du vill ersätta databaser på servern. |
--add-drop-table | Lägg till ett DROP TABLE uttalande före varje CREATE TABLE uttalande. Användbart om du vill ersätta tabeller på servern. |
--no-create-db | Undertryck CREATE DATABASE uttalandena i dumpningen. Det här är användbart när du är säker på att databas (er) som du dumpar redan finns i servern där du laddar dumpningen. |
-t (- --no-create-info ) | Undertryck alla CREATE TABLE uttalanden i dumpningen. Detta är användbart när du bara vill dumpa data från tabellerna och använder dumpfilen för att fylla identiska tabeller i en annan databas / server. |
-d (- --no-data ) | Skriv inte tabellinformation. Detta kommer bara att dumpa CREATE TABLE uttalandena. Användbart för att skapa "mall" -databaser |
-R ( --routines ) | Inkludera lagrade procedurer / funktioner i dumpningen. |
-K (- --disable-keys ) | Inaktivera nycklar för varje tabell innan du sätter in data, och aktivera nycklar efter att data är infogade. Detta påskyndar infogningar endast i MyISAM-tabeller med icke-unika index. |
Anmärkningar
Utgången från en mysqldump
operation är en lätt kommenterad fil som innehåller sekventiella SQL-satser som är kompatibla med versionen av MySQL-verktyg som användes för att generera den (med uppmärksamhet på kompatibilitet med tidigare versioner, men ingen garanti för framtida versioner). Återställningen av en mysqldump
ed-databas innefattar mysqldump
exekvering av dessa uttalanden. I allmänhet den här filen
-
DROP
s den första specificerade tabellen eller vyn -
CREATE
den tabellen eller vyn - För tabeller dumpade med data (dvs. utan
--no-data
)-
LOCK
bordet -
INSERT
alla raderna från den ursprungliga tabellen i ett uttalande
-
-
UNLOCK TABLES
- Upprepar ovanstående för alla andra tabeller och vyer
-
DROP
är den första inkluderade rutinen -
CREATE
den rutinen - Upprepar samma för alla andra rutiner
Närvaron av DROP
före CREATE
för varje tabell innebär att om schemat finns, oavsett om det är tomt, kommer att använda en mysqldump
fil för att återställa den eller de kommer att skrivas över dem.
Skapa en säkerhetskopia av en databas eller tabell
Skapa en ögonblicksbild av en hel databas:
mysqldump [options] db_name > filename.sql
Skapa en ögonblicksbild av flera databaser:
mysqldump [options] --databases db_name1 db_name2 ... > filename.sql
mysqldump [options] --all-databases > filename.sql
Skapa en ögonblicksbild av en eller flera tabeller:
mysqldump [options] db_name table_name... > filename.sql
Skapa en ögonblicksbild exklusive en eller flera tabeller:
mysqldump [options] db_name --ignore-table=tbl1 --ignore-table=tbl2 ... > filename.sql
.sql
är helt en fråga om stil. Varje förlängning skulle fungera.
Ange användarnamn och lösenord
> mysqldump -u username -p [other options]
Enter password:
Om du behöver ange lösenordet på kommandoraden (t.ex. i ett skript) kan du lägga till det efter alternativet -p
utan mellanrum:
> mysqldump -u username -ppassword [other options]
Om ditt lösenord innehåller mellanslag eller specialtecken, kom ihåg att använda flykt beroende på ditt skal / ditt system.
Eventuellt är det utökade formuläret:
> mysqldump --user=username --password=password [other options]
(Explicitet som anger lösenordet på kommandoraden rekommenderas inte på grund av säkerhetsproblem.)
Återställa en säkerhetskopia av en databas eller tabell
mysql [options] db_name < filename.sql
Anteckna det:
-
db_name
måste vara en befintlig databas; - din autentiserade användare har tillräckliga privilegier för att köra alla kommandon i ditt
filename.sql
; -
.sql
är helt en fråga om stil. Varje förlängning skulle fungera. - Du kan inte ange ett tabellnamn att ladda in även om du kan ange ett att dumpa från. Detta måste göras inom
filename.sql
.
Alternativt, när du är i MySQL-kommandoradverktyget , kan du återställa (eller köra något annat skript) med källkommandot:
source filename.sql
eller
\. filename.sql
mysqldump från en fjärrserver med komprimering
För att använda komprimering över kabeln för en snabbare överföring, --compress
alternativet - mysqldump
till mysqldump
. Exempel:
mysqldump -h db.example.com -u username -p --compress dbname > dbname.sql
Viktigt: Om du inte vill låsa upp källan db, bör du också inkludera - --lock-tables=false
. Men du kanske inte får en internt konsekvent db-bild på det sättet.
För att också spara filen komprimerad kan du pipa till gzip
.
mysqldump -h db.example.com -u username -p --compress dbname | gzip --stdout > dbname.sql.gz
återställa en gzipped mysqldump-fil utan att komprimera
gunzip -c dbname.sql.gz | mysql dbname -u username -p
Obs: -c
betyder skrivutgång till stdout.
Säkerhetskopiera direkt till Amazon S3 med komprimering
Om du vill göra en komplett säkerhetskopia av en stor MySql-installation och inte har tillräcklig lokal lagring, kan du dumpa och komprimera den direkt till en Amazon S3-hink. Det är också bra att göra detta utan att ha DB-lösenordet som en del av kommandot:
mysqldump -u root -p --host=localhost --opt --skip-lock-tables --single-transaction \
--verbose --hex-blob --routines --triggers --all-databases |
gzip -9 | s3cmd put - s3://s3-bucket/db-server-name.sql.gz
Du ombeds lösenordet, varefter säkerhetskopian startar.
Överföra data från en MySQL-server till en annan
Om du behöver kopiera en databas från en server till en annan har du två alternativ:
Alternativ 1:
- Lagra dumpfilen på källservern
- Kopiera dumpfilen till din destinationsserver
- Ladda dumpfilen till din destinationsserver
På källservern:
mysqldump [options] > dump.sql
Kopiera dumpfilen på destinationsservern och kör:
mysql [options] < dump.sql
Alternativ 2:
Om destinationsservern kan ansluta till värdservern kan du använda en pipeline för att kopiera databasen från en server till den andra:
På destinationsservern
mysqldump [options to connect to the source server] | mysql [options]
På samma sätt kan skriptet köras på källservern och skjuta till destinationen. I båda fallen är det troligtvis betydligt snabbare än alternativ 1.
Säkerhetskopieringsdatabas med lagrade procedurer och funktioner
Som standard lagrade procedurer och funktioner eller som inte genereras av mysqldump
, måste du lägga till parametern --routines
(eller -R
):
mysqldump -u username -p -R db_name > dump.sql
När du använder - --routines
upprätthålls inte frimärken för skapande och ändring, istället bör du dumpa och ladda om innehållet i mysql.proc
.