sql >> Databasteknik >  >> RDS >> Mysql

Säkerhetskopiera dina MySQL-databaser

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 med mysqldump 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 snabbare mysqlhotcopy .

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.

  1. Innan vi börjar rekommenderar vi att du utför en LOCK TABLES på tabellerna du tänker säkerhetskopiera, följt av FLUSH 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ör LOCK TABLES ser ut så här:

    1
    
    LOCK TABLES tableName READ;

    För att utföra en LOCK TABLESorder tabell för customer 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 i customer databas (den efterföljande ; krävs för MySQL-kommandon):

    1
    2
    3
    
    USE customer;
    LOCK TABLES order READ;
    FLUSH TABLES;
  2. 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ör customer 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
    
  3. 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.

  1. 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/*
    
  2. 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
    
  3. 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ändaren mysql med gruppen mysql . För att ändra behörigheterna för datakatalogen, utfärda följande kommando:

    chown -R mysql:mysql /var/lib/mysql
    
  4. Ä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 nya debian-sys-maint användarens lösenord till den. Du kan se det gamla lösenordet med cat :

    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;
  5. 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.

  1. 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
    
  2. 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;
  3. 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]';
  4. I nästa exempel kommer vi att skapa en användare som heter customeradmin :

    1
    
    CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
  5. Nu kommer vi att ge customeradmin privilegier för att komma åt customer 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]'
  6. För syftet med följande exempel kommer vi att ge customeradmin full tillgång till customer databas. Ge följande kommando i MySQL-klienten:

    1
    
    GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
  7. 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
    
  8. 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

  1. 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
    
  2. 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
    
  3. För följande exempel kommer vi att återställa order tabell till den befintliga customer databas från en SQL backup-fil med namnet customerOrderBackup.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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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;
  5. 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älla order tabell för customer databas. Det finns 2 fält i order tabell, custNum med datatyp INT och orderName med datatypen VARCHAR(20); din tabellstruktur kommer att vara annorlunda:

    1
    2
    
    USE customer;
    CREATE TABLE order (custNum INT, orderName VARCHAR(20));
  6. 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]';
  7. I nästa exempel kommer vi att skapa en användare som heter customeradmin :

    1
    
    CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
  8. Nu kommer vi att ge customeradmin privilegier för att komma åt customer 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 till customer databas. Ge följande kommando i MySQL-klienten:

    1
    
    GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
  9. 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 efter INFILE , letar den efter den filen i MySQL-datakatalogen. Om filnamnet customerOrderBackup.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 generates File not found errors.

  10. 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

  1. Ändra och återställ MySQL root-lösenord

  2. Grundläggande tabelluttryck, del 10 – Visningar, SELECT * och DDL-ändringar

  3. Oracle Database Developer Choice Awards

  4. Subtrahera dagar från ett datum i SQLite