MySQL är ett relationsdatabashanteringssystem (DBMS) med öppen källkod som ofta används i ett brett urval av sammanhang. Oftast distribueras den som en del av LAMP-stacken. Databassystemet är också lätt att använda och mycket portabelt och är, i samband med många applikationer, extremt effektivt. Eftersom MySQL ofta är ett centraliserat datalager för stora mängder verksamhetskritisk data, är att göra regelbundna säkerhetskopior av din MySQL-databas en av de viktigaste återställningsuppgifterna som en systemadministratör kan utföra. Den här guiden tar upp ett antal olika metoder för att skapa säkerhetskopior av din databas samt återställa databaser från säkerhetskopior.
Innan du påbörjar installationsprocessen antar vi att du har följt stegen som beskrivs i vår Konfigurera och säkra en beräkningsinstans. Dessutom måste du installera MySQL-databasen. All konfiguration kommer att utföras i en terminalsession; se till att du är inloggad på din Linode som root via SSH. Om du är ny på Linux-serveradministration kanske du är intresserad av vår introduktion till Linux-konceptguide, nybörjarguide och grundläggande administrationsguide.
Säkerhetskopieringsmetod
De flesta säkerhetskopieringar av MySQL-databaser i den här guiden utförs med mysqldump
verktyg, som distribueras med standardinstallationen av MySQL-servern. Vi rekommenderar att du använder mysqldump
när det är möjligt eftersom det ofta är det enklaste och mest effektiva sättet att ta säkerhetskopior av databaser. Andra metoder som beskrivs i den här guiden tillhandahålls för situationer när du inte har tillgång till mysqldump
verktyg, som i en återställningsmiljö som Finnix eller i situationer där den lokala instansen av MySQL-servern inte startar.
Ändå ger den här guiden bara en översikt över mysqldump
verktyg, eftersom det finns många alternativ för och användningsområden för mysqldump
som faller utanför detta dokuments räckvidd. Vi uppmuntrar dig att bekanta dig med alla procedurer som behandlas i det här dokumentet och att fortsätta din utforskning av mysqldump
utöver de fall som beskrivs här. Var noga med att notera följande:
*.sql
filer skapade medmysqldump
kan återställas när som helst. Du kan till och med redigera databasen.sql
filer manuellt (med stor försiktighet!) med din favorittextredigerare.- Om dina databaser bara använder MyISAM-lagringsmotorn kan du ersätta
mysqldump
kommandot med den snabbaremysqlhotcopy
.
Skapa säkerhetskopior av hela databashanteringssystemet (DBMS)
Det är ofta nödvändigt att ta en säkerhetskopia (eller "dumpa") av ett helt databashanteringssystem tillsammans med alla databaser och tabeller, inklusive systemdatabaserna som innehåller användarna, behörigheter och lösenord.
Alternativ 1:Skapa säkerhetskopior av ett helt databashanteringssystem med hjälp av mysqldump-verktyget
Den enklaste metoden för att skapa en enda sammanhängande säkerhetskopia av hela MySQL-databashanteringssystemet använder mysqldump
verktyget från kommandoraden. Syntaxen för att skapa en databasdump med en aktuell tidsstämpel är följande:
mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p
Detta kommando kommer att uppmana dig att ange ett lösenord innan du påbörjar säkerhetskopieringen av databasen i den aktuella katalogen. Denna process kan ta allt från några sekunder till några timmar beroende på storleken på dina databaser.
Automatisera denna process genom att lägga till en rad i crontab
:
0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD
För exemplet ovan, använd which mysqldump
för att bekräfta den korrekta sökvägen till kommandot, och ersätt root
med mysql-användaren du vill köra säkerhetskopior som, och PASSWORD
med rätt lösenord för den användaren.
Obs I crontab-exemplet, se till att det inte finns något mellanslag mellan flaggan -P och din lösenordsinmatning.
Alternativ 2:Skapa säkerhetskopior av en hel DBMS med hjälp av kopior av MySQL-datakatalogen
Medan mysqldump
verktyg är den föredragna backupmetoden, det finns ett par fall som kräver ett annat tillvägagångssätt. mysqldump
fungerar bara när databasservern är tillgänglig och körs. Om databasen inte kan startas eller värdsystemet är otillgängligt kan vi kopiera MySQL:s databas direkt. Denna metod är ofta nödvändig i situationer där du bara har tillgång till en återställningsmiljö som Finnix med ditt systems diskar monterade i det filsystemet. Om du försöker den här metoden på ditt system, se till att databasen inte är det löpning. Ge ett kommando som liknar följande:
/etc/init.d/mysqld stop
På de flesta distributionsversioner av MySQL finns datakatalogen i /var/lib/mysql/
katalog. Om den här katalogen inte finns granska /etc/mysql/my.cnf
fil för en sökväg till datakatalogen. Alternativt kan du söka i ditt filsystem efter datakatalogen genom att utfärda följande kommando:
find / -name mysql
När du har hittat din MySQL-datakatalog kan du kopiera den till en säkerhetskopia. Följande exempel förutsätter att MySQL-datakatalogen finns på /var/lib/mysql/
:
cp -R /var/lib/mysql/* /opt/database/backup-1266871069/
I det här fallet har vi rekursivt kopierat innehållet i datakatalogen (t.ex. /var/lib/mysql/
) till en katalog inom /opt/
hierarki (t.ex. /opt/database/backup-1266871069/
). Denna katalog måste finnas innan kopieringsoperationen påbörjas. Tänk på följande operationssekvens:
/etc/init.d/mysql stop
mkdir -p /opt/database/backup-1266872202/
cp -R /var/lib/mysql/* /opt/database/backup-1266872202/
Dessa kommandon börjar med att stoppa MySQL-serverdemonen och sedan skapa en katalog med namnet /opt/database/backup-1266872202/
och utföra en rekursiv kopia av datakatalogen. Observera att vi har valt att använda backup-[time_t]
namnkonvention för våra exempel. Ersätt sökvägarna ovan med din föredragna organisation och namnschema. cp
kommandot producerar inte utdata och kan ta lite tid att slutföra beroende på storleken på din databas. Bli inte orolig om det tar ett tag att slutföra. När kopieringen är klar kanske du vill arkivera datakatalogen i ett "tar"-arkiv för att göra det lättare att hantera och flytta mellan maskiner. Ge följande kommandon för att skapa arkivet:
cd /opt/database/backup-1266872202
tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz
När tarballen har skapats kan du enkelt överföra filen på det sätt som är mest bekvämt för dig. Glöm inte att starta om MySQL-serverdemonen igen om det behövs:
/etc/init.d/mysql start
Skapa säkerhetskopior av en enskild databas
I många fall är det inte nödvändigt att skapa en säkerhetskopia av hela databasservern. I vissa fall, som att uppgradera en webbapplikation, kan installationsprogrammet rekommendera att göra en säkerhetskopia av databasen om uppgraderingen påverkar databasen negativt. På liknande sätt, om du vill skapa en "dump" av en specifik databas för att flytta databasen till en annan server, kan du överväga följande metod.
Om möjligt, använd mysqldump
verktyg för att exportera en "dump" av en enda databas. Detta kommando kommer att likna följande:
mysqldump -u username -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql
Exemplet ovan är som exemplet i föregående avsnitt, förutom att använda --all-databases
alternativet anger det här exemplet ett särskilt databasnamn. I det här fallet skapar vi en säkerhetskopia av danceLeaders
databas. Formen för detta kommando, i en mer enkel notation, är följande:
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
För ett ytterligare exempel kommer vi att säkerhetskopiera databasen med namnet customer
använda rotdatabaskontot genom att utfärda följande kommando:
mysqldump -u root -p -h localhost customer > customerBackup.sql
Du kommer att bli tillfrågad om ett lösenord före mysqldump
börjar sin säkerhetskopiering. Som alltid säkerhetskopian, i det här fallet customerBackup.sql
, skapas i katalogen där du utfärdar detta kommando. mysqldump
kommandot kan slutföras på några sekunder eller några timmar beroende på storleken på databasen och belastningen på värden när säkerhetskopieringen körs.
Skapa säkerhetskopior av en enskild tabell
Alternativ 1:Skapa säkerhetskopior av en enskild tabell med hjälp av mysqldump-verktyget
Denna operation, liksom tidigare användningar av mysqldump
verktyget i det här dokumentet, låter dig skapa en säkerhetskopia av en enda databastabell. För att fortsätta våra tidigare exempel kan du i följande exempel säkerhetskopiera tabellen usernameRecords
i danceLeaders
databas.
mysqldump -u username -ps3cr1t -h localhost danceLeaders usernameRecords \> 1266861650-danceLeaders-usernameRecords.sql
Ovanstående exempel är som exemplet i föregående avsnitt, förutom att vi har lagt till en tabellnamnspecifikation till kommandot för att ange namnet på tabellen som vi vill säkerhetskopiera. Formen för detta kommando i en mer enkel notation är följande:
mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql
För ett ytterligare exempel kommer vi att säkerhetskopiera tabellen med namnet "order" från databasen med namnet customer
använda rotdatabaskontot genom att utfärda följande kommando:
mysqldump -u root -p -h localhost customer order > customerBackup-order.sql
Du kommer att bli tillfrågad om ett lösenord före mysqldump
börjar sin säkerhetskopiering. Som alltid, säkerhetskopian (i det här fallet customerBackup.sql
) skapas i katalogen där du utfärdar detta kommando. mysqldump
kommandot kan slutföras på några sekunder eller några timmar beroende på storleken på databasen och belastningen på värden när säkerhetskopieringen körs.
Alternativ 2:Skapa säkerhetskopior av en enskild tabell med hjälp av MySQL-klienten och ett OUTFILE-uttalande
Själva MySQL-klienten har viss säkerhetskopieringskapacitet. Det är användbart när du redan är inloggad och du inte vill avsluta den aktuella sessionen. Om du använder ett livesystem och inte har råd med stilleståndstid bör du överväga att tillfälligt låsa bordet du säkerhetskopierar.
Tänk på att när du säkerhetskopierar en enskild tabell med MySQL-klienten, bibehålls inte tabellens struktur i säkerhetskopian. Endast själva data sparas när du använder den här metoden.
-
Innan vi börjar rekommenderar vi att du utför en
LOCK TABLES
på tabellerna du tänker säkerhetskopiera, följt avFLUSH TABLES
för att säkerställa att databasen är på ett konsekvent utrymme under säkerhetskopieringen. Du behöver bara ett läslås. Detta gör att andra klienter kan fortsätta att fråga efter tabellerna medan du gör en kopia av filerna i MySQL-datakatalogen. För ett "läs"-lås, syntaxen förLOCK TABLES
ser ut så här:1
LOCK TABLES tableName READ;
För att utföra en
LOCK TABLES
påorder
tabell förcustomer
databas, utfärda följande kommando:mysql -u root -p -h localhost
Du kommer då att bli tillfrågad om root-lösenordet. När du har angett databasuppgifterna kommer du till mysql-klientprompten. Ge följande kommando för att låsa
order
tabellen icustomer
databas (den efterföljande;
krävs för MySQL-kommandon):1 2 3
USE customer; LOCK TABLES order READ; FLUSH TABLES;
-
Vi kan nu påbörja säkerhetskopieringen. För att skapa en säkerhetskopia av en enskild tabell med MySQL-klienten måste du vara inloggad på ditt MySQL DBMS. Om du inte är inloggad för närvarande kan du logga in med följande kommando:
mysql -u root -p -h localhost
Du kommer att bli tillfrågad om ett lösenord. När du har angett rätt lösenord och är vid MySQL-klientprompten kan du använda en
SELECT * INTO OUTFILE
påstående. Syntaxen för detta uttalande ser ut som följande:1
SELECT * INTO OUTFILE 'file_name' FROM tbl_name;
I det här exemplet kommer vi att skapa en säkerhetskopia av data från
order
tabell förcustomer
databas. Ge följande kommando för att påbörja säkerhetskopieringen (den efterföljande;
). krävs för MySQL-kommandon):1 2 3 4 5
USE customer; LOCK TABLES order READ; FLUSH TABLES; SELECT * INTO OUTFILE 'customerOrderBackup.sql' FROM order; UNLOCK TABLES;
customerOrderBackup.sql
filen kommer att skapas i lämplig dataunderkatalog i MySQLs datakatalog. MySQL-datakatalogen är vanligtvis/var/lib/mysql/
. I det här exemplet,OUTFILE
kommer att vara/var/lib/mysql/customer/customerOrderBackup.sql
. Platsen för den här katalogen och filen kan dock variera mellan Linux-distributioner. Om du inte kan hitta din säkerhetskopia kan du söka efter den med följande kommando:find / -name customerOrderBackup.sql
-
När du har slutfört säkerhetskopieringen vill du låsa upp tabellerna med följande kommando i MySQL-klienten. Detta kommer att återställa din databas till dess normala funktion. Logga in på MySQL-klienten med det första kommandot om du inte är inloggad för närvarande och utfärda sedan det andra kommandot:
mysql -uroot -p -h localhost
1
UNLOCK TABLES;
Du kan fortsätta använda din databas som vanligt från denna punkt.
Överväganden för en effektiv säkerhetskopieringsstrategi
Att skapa säkerhetskopior av din MySQL-databas bör vara en regelbunden och schemalagd uppgift. Du kanske vill överväga att schemalägga periodiska säkerhetskopieringar med cron
, mysqldump
och/eller mail
. Titta på vår dokumentation för mer information om Cron. Att implementera en automatiserad säkerhetskopieringslösning kan hjälpa till att minimera stilleståndstiden i en katastrofåterställningssituation.
Du behöver inte logga in som root när du säkerhetskopierar databaser. En MySQL-användare med läsning (t.ex. SELECT
) behörighet kan använda både mysqldump
och mysql
(t.ex. MySQL-klienten) verktyg för att ta säkerhetskopior, som beskrivs nedan. Som en vanlig praxis rekommenderar vi att du inte använder MySQL root
användare när det är möjligt för att minimera säkerhetsrisker.
Du kanske vill överväga inkrementella säkerhetskopieringar som en del av en långsiktig säkerhetskopieringsplan för databaser. Även om denna process inte täcks här, rekommenderar vi att du överväger resursen MySQL Database Backup Methods för mer information.
Återställa en hel DBMS från säkerhetskopia
En säkerhetskopia som inte kan återställas är av minimalt värde. Vi rekommenderar att du testar dina säkerhetskopior regelbundet för att säkerställa att de kan återställas i händelse av att du kan behöva återställa från säkerhetskopior. När du använder återställning av säkerhetskopior av din MySQL-databas beror metoden du använder på vilken metod du använde för att skapa säkerhetskopian i fråga.
Alternativ 1:Återställa en hel DBMS med MySQL-klienten och säkerhetskopior skapade av mysqldump
Innan du påbörjar återställningsprocessen antar det här avsnittet att ditt system kör en nyinstallerad version av MySQL utan några befintliga databaser eller tabeller. Om du redan har databaser och tabeller i ditt MySQL DBMS, gör en säkerhetskopia innan du fortsätter eftersom den här processen kommer att skriva över aktuella MySQL-data.
Du kan enkelt återställa hela ditt DBMS med mysql
kommando. Syntaxen för detta kommer att likna följande:
mysql -u [username] -p [password] < backupFile.sql
I det här fallet återställer vi helt enkelt hela DBMS. Kommandot kommer att se ut så här:
mysql -u root -p < 1266861650-backup-all.sql
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När rätt referenser har tillhandahållits kommer återställningsprocessen att börja. Eftersom den här processen återställer ett helt DBMS kan det ta allt från några sekunder till många timmar.
Alternativ 2:Återställa en hel DBMS med MySQL-datafiler kopierade direkt från MySQL:s datakatalog
Innan du påbörjar återställningsprocessen antar det här avsnittet att ditt system kör en nyinstallerad version av MySQL utan några befintliga databaser eller tabeller. Om du redan har databaser och tabeller i ditt MySQL DBMS, gör en säkerhetskopia innan du fortsätter eftersom den här processen kommer att skriva över aktuella MySQL-data.
-
Om du har en fullständig säkerhetskopia av din MySQL-datakatalog (vanligtvis
/var/lib/mysql
), kan du återställa den från kommandoraden. För att säkerställa en framgångsrik återställning måste du först stoppa MySQL-serverdemonen och ta bort aktuell data i MySQL-datakatalogen./etc/init.d/mysql stop rm -R /var/lib/mysql/*
-
I följande exempel finns säkerhetskopian av MySQL-datakatalogen i
/opt/database/backup-1266872202
katalog. Om du gjorde en tarball av datakatalogen när du säkerhetskopierade din DBMS-datakatalog, måste du extrahera filerna från tarballen innan du kopierar med följande kommandon:cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/ cd /var/lib/mysql tar xzvf mysqlBackup-1266872202.tar.gz
-
Innan vi kan starta om MySQL-databasprocessen måste vi se till att behörigheterna är korrekt inställda på
/var/lib/mysql/
katalog. I det här exemplet antar vi att MySQL-serverdemonen körs som användarenmysql
med gruppenmysql
. För att ändra behörigheterna för datakatalogen, utfärda följande kommando:chown -R mysql:mysql /var/lib/mysql
-
Ändra
mysql:mysql
del av detta kommando om din MySQL-instans körs med olika användar- och gruppbehörigheter. Formen för detta argument är[user]:[group]
. Slutligen kan vi starta MySQL-serverdemonen med följande kommando:/etc/init.d/mysql start
Om du får ett felmeddelande som liknar följande:
/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Du måste hitta den gamla
debian-sys-maint
användarens lösenord i/etc/mysql/debian.cnf
och ändra sedan den nyadebian-sys-maint
användarens lösenord till den. Du kan se det gamla lösenordet medcat
:cat /etc/mysql/debian.cnf | grep password
Kopiera (eller kom ihåg) lösenordet. Sedan måste du ändra den nya
debian-sys-maint
användarens lösenord. Du kan göra detta genom att logga in som MySQL-rotanvändare och utfärda följande kommando (därär lösenordet för den gamla debian-sys-maint
användare):1
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
-
Du måste sedan starta om MySQL med följande kommando:
/etc/init.d/mysql restart
Efter att MySQL-servern har startat framgångsrikt vill du testa ditt MySQL DBMS och se till att alla databaser och tabeller återställs på rätt sätt. Vi rekommenderar också att du granskar dina loggar för eventuella fel. I vissa fall kan MySQL starta framgångsrikt trots databasfel.
Återställa en enskild databas från säkerhetskopia
I de fall där du bara har skapat en säkerhetskopia för en databas, eller bara behöver återställa en enda databas, är återställningsprocessen något annorlunda.
Innan du påbörjar återställningsprocessen antar det här avsnittet att ditt system kör en nyinstallerad version av MySQL utan några befintliga databaser eller tabeller. Om du redan har databaser och tabeller i ditt MySQL DBMS, gör en säkerhetskopia innan du fortsätter eftersom den här processen kommer att skriva över aktuella MySQL-data.
-
För att återställa en enskild databas med
mysql
kommandot, förbered först destinationsdatabasen. Logga in på din (nya) MySQL-databasserver med MySQL-klienten:mysql -u root -p -h localhost
-
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När du har angett korrekta referenser måste du skapa måldatabasen. I det här fallet,
customer
databasen kommer att återställas:1
CREATE DATABASE customer;
-
Som med alla MySQL-satser, utelämna inte det sista semikolonet (t.ex.
;
) vid slutet av varje kommando. Beroende på din distribution kan du behöva skapa en ny MySQL-användare eller återskapa en tidigare användare med åtkomst till den nyskapade databasen. Kommandot för att skapa en ny MySQL-användare har följande form:1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
I nästa exempel kommer vi att skapa en användare som heter
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nu kommer vi att ge
customeradmin
privilegier för att komma åtcustomer
databas. Kommandot för att ge privilegier till en databas för en specifik användare har följande form:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
-
För syftet med följande exempel kommer vi att ge
customeradmin
full tillgång tillcustomer
databas. Ge följande kommando i MySQL-klienten:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Du kan behöva ange olika åtkomstbeviljande beroende på kraven på din implementering. Se den officiella dokumentationen för MySQL:s GRANT-uttalande. När destinationsdatabasen och MySQL-användaren har skapats kan du stänga MySQL-klienten med följande kommando:
quit
-
Du kan nu använda
mysql
kommandot för att återställa din SQL-fil. Formen för detta kommando liknar följande:mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
I följande exempel kommer vi att återställa customer
databas från en SQL backup-fil med namnet customerBackup.sql
(var särskilt uppmärksam på <
symbol i detta kommando):
mysql -u root -p -h localhost customer < customerBackup.sql
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När rätt referenser har tillhandahållits kommer återställningsprocessen att börja. Varaktigheten av denna operation beror på ditt systems belastning och storleken på databasen som du återställer. Det kan slutföras på några sekunder, eller det kan ta många timmar.
Återställa en enskild tabell från säkerhetskopia
Alternativ 1:Återställa en enskild tabell med MySQL och säkerhetskopior skapade av mysqldump
-
Innan vi påbörjar återställningsprocessen antar vi att din MySQL-instans redan har en befintlig databas som kan ta emot tabellen du vill återställa. Om din MySQL-instans inte har den nödvändiga databasen måste vi skapa den innan vi fortsätter. Logga först in på din MySQL-instans med följande kommando:
mysql -u root -p -h localhost
-
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När du har angett korrekta referenser måste du skapa måldatabasen. För detta exempel kommer vi att skapa
customer
databas.1
CREATE DATABASE customer;
Avsluta sedan
mysql
uppmaning:quit
Om du redan har den nödvändiga databasen kan du säkert hoppa över steget ovan. För att fortsätta med tabellåterställningen, utfärda ett kommando i följande form:
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
-
För följande exempel kommer vi att återställa
order
tabell till den befintligacustomer
databas från en SQL backup-fil med namnetcustomerOrderBackup.sql
. Var mycket noga med att använda<
operatorn i följande kommando:mysql -u root -p -h localhost customer < customerOrderBackup.sql
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När rätt referenser har tillhandahållits kommer återställningsprocessen att börja. Varaktigheten av denna operation beror på systemets belastning och storleken på tabellen som du återställer. Det kan slutföras på några sekunder, eller det kan ta många timmar.
Alternativ 2:Återställa en enskild tabell med MySQL-klienten och ett INFILE-uttalande för säkerhetskopior skapade med OUTFILE
-
Innan vi påbörjar återställningsprocessen antar vi att din MySQL-instans redan har en befintlig databas som kan ta emot tabellen du vill återställa. Om din MySQL-instans inte har den nödvändiga databasen måste vi skapa den innan vi fortsätter. Logga först in på din MySQL-instans med följande kommando:
mysql -u root -p -h localhost
-
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När du har angett korrekta referenser måste du skapa måldatabasen. För detta exempel kommer vi att skapa
customer
databas.1
CREATE DATABASE customer;
Avsluta sedan
mysql
uppmaning:quit
-
Datasäkerhetskopian som användes i det här fallet skapades med
SELECT * INTO OUTFILE 'backupFile.sql' FROM tableName
kommando. Denna typ av säkerhetskopiering behåller bara själva data så tabellstrukturen måste återskapas. För att återställa en enskild tabell från MySQL-klienten måste du först förbereda måldatabasen och tabellen. Logga in på din (nya) MySQL-instans med MySQL-klienten:mysql -u root -p -h localhost
-
Du kommer att bli ombedd att ange root MySQL-användarens lösenord. När du har angett rätt autentiseringsuppgifter måste du skapa måldatabasen. I det här fallet kommer vi att skapa
customer
databas. Ge följande uttalande:1
CREATE DATABASE customer;
-
Kom ihåg att semikolon (t.ex.
;
) efter varje påstående krävs. Nu måste du skapa måltabellen med rätt struktur. Datatyperna för fälten i tabellen måste spegla de i tabellen där säkerhetskopieringen har sitt ursprung. I det här exemplet kommer vi att återställaorder
tabell förcustomer
databas. Det finns 2 fält iorder
tabell,custNum
med datatypINT
ochorderName
med datatypenVARCHAR(20)
; din tabellstruktur kommer att vara annorlunda:1 2
USE customer; CREATE TABLE order (custNum INT, orderName VARCHAR(20));
-
Beroende på din distribution kan du behöva skapa en ny MySQL-användare eller återskapa en tidigare användare med åtkomst till den nyskapade databasen. Kommandot för att skapa en ny MySQL-användare har följande form:
1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
I nästa exempel kommer vi att skapa en användare som heter
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nu kommer vi att ge
customeradmin
privilegier för att komma åtcustomer
databas. Kommandot för att ge privilegier till en databas för en specifik användare har följande form:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
För syftet med följande exempel kommer vi att ge
customeradmin
full tillgång tillcustomer
databas. Ge följande kommando i MySQL-klienten:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Du kan behöva ange olika åtkomstbeviljande beroende på kraven på din implementering. Se den officiella dokumentationen för MySQL:s GRANT-uttalande. När tabellen och användaren har skapats kan vi importera säkerhetskopieringsdata från säkerhetskopian med hjälp av
LOAD DATA
kommando. Syntaxen liknar följande:1
LOAD DATA INFILE '[filename]' INTO TABLE [tableName];
I följande exempel kommer vi att återställa data från en tabell från en fil med namnet
customerOrderBackup.sql
. När MySQL-klienten ges sökväg och filnamn efterINFILE
, letar den efter den filen i MySQL-datakatalogen. Om filnamnetcustomerOrderBackup.sql
gavs, skulle sökvägen vara/var/lib/mysql/customerOrderBackup.sql
. Ensure that the file you are trying to restore from exists, especially if MySQL generatesFile not found
errors. -
To import the data from the
customerOrderBackup.sql
file located in/var/lib/mysql/
, issue the following command:1
LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;
This process can take anywhere from a few seconds to many hours depending on the size of your table. The duration of this operation depends on your system’s load and the size of the table that you are restoring. It may complete in a few seconds, or it may take many hours. After you have verified that your data was imported successfully, you can log out:
quit
Mer information
Du kanske vill konsultera följande resurser för ytterligare information om detta ämne. Även om dessa tillhandahålls i hopp om att de kommer att vara användbara, vänligen observera att vi inte kan garantera noggrannheten eller aktualiteten hos externt värdmaterial.
- The Official MySQL Web Site
- MySQL Database Backup Methods page
- mysqldump Manual Page
- Schedule Tasks With Cron
- MySQL’s Grant Statement, Official Documentation