sql >> Database teknologi >  >> RDS >> Mysql

Sikkerhedskopier dine MySQL-databaser

MySQL er et open source relationsdatabasestyringssystem (DBMS), som ofte bruges i en bred vifte af sammenhænge. Oftest implementeres det som en del af LAMP-stakken. Databasesystemet er også nemt at bruge og meget bærbart og er, i forbindelse med mange applikationer, ekstremt effektivt. Da MySQL ofte er et centraliseret datalager for store mængder missionskritiske data, er det at lave regelmæssige sikkerhedskopier af din MySQL-database en af ​​de vigtigste katastrofegendannelsesopgaver, som en systemadministrator kan udføre. Denne vejledning omhandler en række forskellige metoder til oprettelse af sikkerhedskopier af din database samt gendannelse af databaser fra sikkerhedskopier.

Før du begynder installationsprocessen, antager vi, at du har fulgt de trin, der er beskrevet i vores Opsætning og sikring af en computerforekomst. Derudover skal du installere MySQL-databasen. Al konfiguration vil blive udført i en terminalsession; sørg for, at du er logget ind på din Linode som root via SSH. Hvis du er ny til Linux-serveradministration, kan du være interesseret i vores introduktion til Linux-konceptguide, begyndervejledning og grundlæggende administrationsvejledning.

Sikkerhedskopieringsmetode

De fleste sikkerhedskopier af MySQL-databaser i denne vejledning udføres ved hjælp af mysqldump værktøj, som distribueres med standard MySQL-serverinstallationen. Vi anbefaler, at du bruger mysqldump når det er muligt, fordi det ofte er den nemmeste og mest effektive måde at tage backup af databaser. Andre metoder, der er beskrevet i denne vejledning, findes i situationer, hvor du ikke har adgang til mysqldump værktøj, som i et gendannelsesmiljø som Finnix eller i situationer, hvor den lokale forekomst af MySQL-serveren ikke starter.

Ikke desto mindre giver denne guide et simpelt overblik over mysqldump værktøj, da der er mange muligheder for og anvendelser af mysqldump som falder uden for dette dokuments rammer. Vi opfordrer dig til at blive fortrolig med alle de procedurer, der er dækket i dette dokument, og fortsætte din udforskning af mysqldump ud over de tilfælde, der er beskrevet her. Vær sikker på at bemærke følgende:

  • *.sql filer oprettet med mysqldump kan gendannes til enhver tid. Du kan endda redigere databasen .sql filer manuelt (med stor omhu!) ved hjælp af din foretrukne teksteditor.
  • Hvis dine databaser kun gør brug af MyISAM-lagringsmotoren, kan du erstatte mysqldump kommando med den hurtigere mysqlhotcopy .

Oprettelse af sikkerhedskopier af hele databasestyringssystemet (DBMS)

Det er ofte nødvendigt at tage en sikkerhedskopi (eller "dump") af et helt databasestyringssystem sammen med alle databaser og tabeller, inklusive systemdatabaserne, som indeholder brugere, tilladelser og adgangskoder.

Mulighed 1:Opret sikkerhedskopier af et helt databasestyringssystem ved hjælp af mysqldump-værktøjet

Den mest ligetil metode til at skabe en enkelt sammenhængende sikkerhedskopi af hele MySQL-databasestyringssystemet bruger mysqldump værktøj fra kommandolinjen. Syntaksen for at oprette et databasedump med et aktuelt tidsstempel er som følger:

mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p

Denne kommando vil bede dig om en adgangskode, før du begynder at sikkerhedskopiere databasen i den aktuelle mappe. Denne proces kan tage alt fra et par sekunder til et par timer afhængigt af størrelsen på dine databaser.

Automatiser denne proces ved at tilføje en linje til crontab :

0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD

Til eksemplet ovenfor skal du bruge which mysqldump for at bekræfte den korrekte sti til kommandoen, og erstatte root med den mysql-bruger, du gerne vil køre sikkerhedskopier som, og PASSWORD med den korrekte adgangskode for den pågældende bruger.

Bemærk I crontab-eksemplet skal du sikre dig, at der ikke er mellemrum mellem -P-flaget og din adgangskodeindtastning.

Mulighed 2:Opret sikkerhedskopier af en hel DBMS ved hjælp af kopier af MySQL Data Directory

Mens mysqldump værktøj er den foretrukne backup-metode, der er et par tilfælde, der kræver en anden tilgang. mysqldump virker kun, når databaseserveren er tilgængelig og kører. Hvis databasen ikke kan startes, eller værtssystemet er utilgængeligt, kan vi kopiere MySQLs database direkte. Denne metode er ofte nødvendig i situationer, hvor du kun har adgang til et gendannelsesmiljø som Finnix med dit systems diske monteret i det pågældende filsystem. Hvis du prøver denne metode på selve dit system, skal du sikre dig, at databasen ikke er det løb. Udsted en kommando, der ligner følgende:

/etc/init.d/mysqld stop

På de fleste distributionsversioner af MySQL er databiblioteket placeret i /var/lib/mysql/ vejviser. Hvis denne mappe ikke findes, skal du undersøge /etc/mysql/my.cnf fil for en sti til databiblioteket. Alternativt kan du søge i dit filsystem efter databiblioteket ved at udstede følgende kommando:

find / -name mysql

Når du har fundet din MySQL-datamappe, kan du kopiere den til en sikkerhedskopi. Det følgende eksempel antager, at MySQL-databiblioteket er placeret på /var/lib/mysql/ :

cp -R /var/lib/mysql/* /opt/database/backup-1266871069/

I dette tilfælde har vi rekursivt kopieret indholdet af databiblioteket (f.eks. /var/lib/mysql/ ) til en mappe i /opt/ hierarki (f.eks. /opt/database/backup-1266871069/ ). Denne mappe skal eksistere, før du starter kopieringsoperationen. Overvej følgende rækkefølge af operationer:

/etc/init.d/mysql stop
mkdir -p /opt/database/backup-1266872202/
cp -R /var/lib/mysql/* /opt/database/backup-1266872202/

Disse kommandoer begynder med at stoppe MySQL-serverdæmonen og derefter oprette en mappe ved navn /opt/database/backup-1266872202/ og udfører en rekursiv kopi af databiblioteket. Bemærk, at vi har valgt at bruge backup-[time_t] navnekonvention for vores eksempler. Erstat stierne ovenfor med din foretrukne organisation og navngivningsskema. cp kommandoen producerer ikke output og kan tage noget tid at fuldføre afhængigt af størrelsen på din database. Bliv ikke forskrækket, hvis det tager et stykke tid at fuldføre. Når kopieringsoperationen er færdig, vil du måske arkivere databiblioteket i et "tar"-arkiv for at gøre det nemmere at administrere og flytte mellem maskiner. Udsted følgende kommandoer for at oprette arkivet:

cd /opt/database/backup-1266872202
tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz

Når tarballen er oprettet, kan du nemt overføre filen på den måde, der er mest praktisk for dig. Glem ikke at genstarte MySQL-serverdæmonen igen, hvis det er nødvendigt:

/etc/init.d/mysql start

Oprettelse af sikkerhedskopier af en enkelt database

I mange tilfælde er det ikke nødvendigt at lave en sikkerhedskopi af hele databaseserveren. I nogle tilfælde, f.eks. ved at opgradere en webapplikation, kan installationsprogrammet anbefale at lave en sikkerhedskopi af databasen, hvis opgraderingen påvirker databasen negativt. På samme måde, hvis du vil oprette et "dump" af en specifik database for at flytte databasen til en anden server, kan du overveje følgende metode.

Når det er muligt, skal du bruge mysqldump værktøj til at eksportere en "dump" af en enkelt database. Denne kommando vil ligne følgende:

mysqldump -u username -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql

Ovenstående eksempel er ligesom eksemplet i det foregående afsnit, undtagen i stedet for at bruge --all-databases option, specificerer dette eksempel et bestemt databasenavn. I dette tilfælde laver vi en sikkerhedskopi af danceLeaders database. Formen af ​​denne kommando, i en mere almindelig notation, er som følger:

mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql

Som et ekstra eksempel vil vi tage backup af databasen med navnet customer ved at bruge roddatabasekontoen ved at udstede følgende kommando:

mysqldump -u root -p -h localhost customer > customerBackup.sql

Du vil blive bedt om en adgangskode før mysqldump begynder sin backup-proces. Som altid backup-filen, i dette tilfælde customerBackup.sql , oprettes i den mappe, hvor du afgiver denne kommando. mysqldump kommandoen kan fuldføres på få sekunder eller få timer afhængigt af størrelsen af ​​databasen og belastningen på værten, når sikkerhedskopieringen køres.

Oprettelse af sikkerhedskopier af en enkelt tabel

Mulighed 1:Opret sikkerhedskopier af en enkelt tabel ved hjælp af mysqldump-værktøjet

Denne operation, ligesom tidligere brug af mysqldump værktøjet i dette dokument, giver dig mulighed for at oprette en sikkerhedskopi af en enkelt databasetabel. For at fortsætte vores tidligere eksempler giver følgende eksempel dig mulighed for at sikkerhedskopiere tabellen usernameRecords i danceLeaders database.

 mysqldump -u username -ps3cr1t -h localhost danceLeaders usernameRecords \> 1266861650-danceLeaders-usernameRecords.sql

Ovenstående eksempel er ligesom eksemplet i det foregående afsnit, bortset fra at vi har tilføjet en tabelnavnspecifikation til kommandoen for at angive navnet på den tabel, som vi vil sikkerhedskopiere. Formen for denne kommando i en mere almindelig notation er som følger:

mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql

Som et ekstra eksempel vil vi tage backup af tabellen med navnet "ordre" fra databasen med navnet customer ved at bruge roddatabasekontoen ved at udstede følgende kommando:

mysqldump -u root -p -h localhost customer order > customerBackup-order.sql

Du vil blive bedt om en adgangskode før mysqldump begynder sin backup-proces. Som altid sikkerhedskopieringsfilen (i dette tilfælde customerBackup.sql ) oprettes i den mappe, hvor du afgiver denne kommando. mysqldump kommandoen kan fuldføres på få sekunder eller få timer afhængigt af størrelsen af ​​databasen og belastningen på værten, når sikkerhedskopieringen køres.

Mulighed 2:Opret sikkerhedskopier af en enkelt tabel ved hjælp af MySQL-klienten og en OUTFILE-erklæring

Selve MySQL-klienten har en vis backup-funktion. Det er nyttigt, når du allerede er logget på, og du ikke ønsker at afslutte den aktuelle session. Hvis du bruger et live-system og ikke har råd til nedetid, bør du overveje midlertidigt at låse det bord, du sikkerhedskopierer.

Vær opmærksom på, at når du sikkerhedskopierer en enkelt tabel ved hjælp af MySQL-klienten, vedligeholdes tabellens struktur ikke i sikkerhedskopien. Kun selve dataene gemmes ved brug af denne metode.

  1. Før vi begynder, anbefaler vi at udføre en LOCK TABLES på de tabeller, du har til hensigt at tage backup af, efterfulgt af FLUSH TABLES for at sikre, at databasen er på en ensartet plads under sikkerhedskopieringen. Du behøver kun en læselås. Dette giver andre klienter mulighed for at fortsætte med at forespørge i tabellerne, mens du laver en kopi af filerne i MySQL-datamappen. For en "læse"-lås, syntaksen for LOCK TABLES ser sådan ud:

    1
    
    LOCK TABLES tableName READ;

    For at udføre en LOCK TABLESorder tabel for customer database, skal du udsende følgende kommando:

    mysql -u root -p -h localhost
    

    Du vil derefter blive bedt om root-adgangskoden. Når du har indtastet database-legitimationsoplysningerne, kommer du til mysql-klientprompten. Udfør følgende kommando for at låse order tabel i customer database (den efterfølgende ; er påkrævet for MySQL-kommandoer):

    1
    2
    3
    
    USE customer;
    LOCK TABLES order READ;
    FLUSH TABLES;
  2. Vi kan nu begynde sikkerhedskopieringen. For at lave en sikkerhedskopi af en enkelt tabel ved hjælp af MySQL-klienten, skal du være logget ind på dit MySQL DBMS. Hvis du ikke er logget på i øjeblikket, kan du logge ind med følgende kommando:

    mysql -u root -p -h localhost
    

    Du vil blive bedt om en adgangskode. Når du har indtastet den korrekte adgangskode og er ved MySQL-klientprompten, kan du bruge en SELECT * INTO OUTFILE udmelding. Syntaksen for denne sætning ser sådan ud:

    1
    
    SELECT * INTO OUTFILE 'file_name' FROM tbl_name;

    I dette eksempel vil vi lave en sikkerhedskopi af dataene fra order tabel for customer database. Udsted følgende kommando for at starte sikkerhedskopieringsproceduren (den efterfølgende ;). er påkrævet for MySQL-kommandoer):

    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 vil blive oprettet i den relevante dataundermappe i MySQLs datamappe. MySQL-datamappen er almindeligvis /var/lib/mysql/ . I dette eksempel er OUTFILE vil være /var/lib/mysql/customer/customerOrderBackup.sql . Placeringen af ​​denne mappe og fil kan dog variere mellem Linux-distributioner. Hvis du ikke kan finde din sikkerhedskopifil, kan du søge efter den med følgende kommando:

    find / -name customerOrderBackup.sql
    
  3. Når du har fuldført sikkerhedskopieringen, vil du gerne låse tabellerne op ved hjælp af følgende kommando i MySQL-klienten. Dette vil returnere din database til dens normale drift. Log ind på MySQL-klienten med den første kommando, hvis du ikke er logget på i øjeblikket, og afgiv derefter den anden kommando:

    mysql -uroot -p -h localhost
    
    1
    
    UNLOCK TABLES;

Du kan fortsætte med at bruge din database som normalt fra dette tidspunkt.

Overvejelser for en effektiv sikkerhedskopieringsstrategi

Oprettelse af sikkerhedskopier af din MySQL-database bør være en regelmæssig og planlagt opgave. Du vil måske overveje at planlægge periodiske sikkerhedskopier ved hjælp af cron , mysqldump og/eller mail . Overvej vores dokumentation for mere information om Cron. Implementering af en automatiseret backup-løsning kan hjælpe med at minimere nedetiden i en katastrofeoprettelse.

Du behøver ikke at logge på som root, når du sikkerhedskopierer databaser. En MySQL-bruger med læst (f.eks. SELECT ) tilladelse er i stand til at bruge både mysqldump og mysql (f.eks. MySQL-klienten) værktøjer til at tage sikkerhedskopier, som beskrevet nedenfor. Som almindelig praksis anbefaler vi, at du ikke bruger MySQL root bruger, når det er muligt for at minimere sikkerhedsrisici.

Det kan være en god ide at overveje inkrementelle sikkerhedskopier som en del af en langsigtet database backup plan. Selvom denne proces ikke er dækket her, anbefaler vi, at du overvejer ressourcen MySQL Database Backup Methods for at få flere oplysninger.

Gendannelse af en hel DBMS fra sikkerhedskopi

En sikkerhedskopi, der ikke kan gendannes, er af minimal værdi. Vi anbefaler, at du tester dine sikkerhedskopier regelmæssigt for at sikre, at de kan gendannes i tilfælde af, at du muligvis skal gendanne fra sikkerhedskopier. Når du bruger gendannelse af sikkerhedskopier af din MySQL-database, afhænger den metode, du bruger, af den metode, du brugte til at oprette den pågældende sikkerhedskopi.

Mulighed 1:Gendannelse af en hel DBMS ved hjælp af MySQL-klienten og sikkerhedskopier oprettet af mysqldump

Før gendannelsesprocessen påbegyndes, antager dette afsnit, at dit system kører en nyinstalleret version af MySQL uden nogen eksisterende databaser eller tabeller. Hvis du allerede har databaser og tabeller i dit MySQL DBMS, skal du lave en sikkerhedskopi, før du fortsætter, da denne proces vil overskrive aktuelle MySQL-data.

Du kan nemt gendanne hele dit DBMS ved hjælp af mysql kommando. Syntaksen for dette vil ligne følgende:

mysql -u [username] -p [password] < backupFile.sql

I dette tilfælde gendanner vi simpelthen hele DBMS. Kommandoen ser således ud:

mysql -u root -p < 1266861650-backup-all.sql

Du vil blive bedt om root MySQL-brugerens adgangskode. Når de korrekte legitimationsoplysninger er leveret, begynder gendannelsesprocessen. Da denne proces gendanner et helt DBMS, kan det tage alt fra et par sekunder til mange timer.

Mulighed 2:Gendannelse af en hel DBMS ved hjælp af MySQL-datafiler kopieret direkte fra MySQL's datakatalog

Før gendannelsesprocessen påbegyndes, antager dette afsnit, at dit system kører en nyinstalleret version af MySQL uden nogen eksisterende databaser eller tabeller. Hvis du allerede har databaser og tabeller i dit MySQL DBMS, skal du lave en sikkerhedskopi, før du fortsætter, da denne proces vil overskrive aktuelle MySQL-data.

  1. Hvis du har en komplet sikkerhedskopi af din MySQL-datamappe (almindeligvis /var/lib/mysql ), kan du gendanne den fra kommandolinjen. For at sikre en vellykket gendannelse skal du først stoppe MySQL-serverdæmonen og slette de aktuelle data i MySQL-databiblioteket.

    /etc/init.d/mysql stop
    rm -R /var/lib/mysql/*
    
  2. I det følgende eksempel er sikkerhedskopieringen af ​​MySQL-databiblioteket placeret i /opt/database/backup-1266872202 vejviser. Hvis du lavede en tarball af databiblioteket, da du sikkerhedskopierede dit DBMS databibliotek, skal du udpakke filerne fra tarballen, før du kopierer med følgende kommandoer:

     cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/
     cd /var/lib/mysql
     tar xzvf mysqlBackup-1266872202.tar.gz
    
  3. Før vi kan genstarte MySQL-databaseprocessen, skal vi sikre, at tilladelserne er indstillet korrekt på /var/lib/mysql/ vejviser. I dette eksempel antager vi, at MySQL-serverdæmonen kører som brugeren mysql med gruppen mysql . Udfør følgende kommando for at ændre tilladelserne på databiblioteket:

    chown -R mysql:mysql /var/lib/mysql
    
  4. Ændre mysql:mysql del af denne kommando, hvis din MySQL-instans kører med forskellige bruger- og gruppetilladelser. Formen af ​​dette argument er [user]:[group] . Endelig kan vi starte MySQL-serverdæmonen med følgende kommando:

    /etc/init.d/mysql start
    

    Hvis du modtager en fejl, der ligner følgende:

    /usr/bin/mysqladmin: connect to server at 'localhost' failed
        error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
    

    Du skal finde den gamle debian-sys-maint brugerens adgangskode i /etc/mysql/debian.cnf og derefter ændre den nye debian-sys-maint brugerens adgangskode til det. Du kan se den gamle adgangskode ved hjælp af cat :

    cat /etc/mysql/debian.cnf | grep password
    

    Kopier (eller husk) adgangskoden. Så bliver du nødt til at ændre den nye debian-sys-maint brugerens adgangskode. Du kan gøre dette ved at logge ind som MySQL root-bruger og udstede følgende kommando (hvor er adgangskoden til den gamle debian-sys-maint bruger):

    1
    
    GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
  5. Du skal derefter genstarte MySQL med følgende kommando:

    /etc/init.d/mysql restart
    

Efter at MySQL-serveren er startet, vil du gerne teste dit MySQL DBMS og sikre, at alle databaser og tabeller gendannes korrekt. Vi anbefaler også, at du reviderer dine logfiler for potentielle fejl. I nogle tilfælde kan MySQL starte med succes på trods af databasefejl.

Gendannelse af en enkelt database fra sikkerhedskopi

I tilfælde, hvor du kun har lavet en sikkerhedskopi for én database, eller kun skal gendanne en enkelt database, er gendannelsesprocessen noget anderledes.

Før gendannelsesprocessen påbegyndes, antager dette afsnit, at dit system kører en nyinstalleret version af MySQL uden nogen eksisterende databaser eller tabeller. Hvis du allerede har databaser og tabeller i dit MySQL DBMS, skal du lave en sikkerhedskopi, før du fortsætter, da denne proces vil overskrive aktuelle MySQL-data.

  1. At gendanne en enkelt database ved hjælp af mysql kommando, skal du først forberede destinationsdatabasen. Log ind på din (nye) MySQL-databaseserver ved hjælp af MySQL-klienten:

    mysql -u root -p -h localhost
    
  2. Du vil blive bedt om root MySQL-brugerens adgangskode. Når du har angivet de korrekte legitimationsoplysninger, skal du oprette destinationsdatabasen. I dette tilfælde er customer databasen vil blive gendannet:

    1
    
    CREATE DATABASE customer;
  3. Som med alle MySQL-sætninger, undlad ikke at udelade det sidste semikolon (f.eks. ; ) ved afslutningen af ​​hver kommando. Afhængigt af din implementering skal du muligvis oprette en ny MySQL-bruger eller genskabe en tidligere bruger med adgang til den nyoprettede database. Kommandoen til at oprette en ny MySQL-bruger har følgende form:

    1
    
    CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
  4. I det næste eksempel vil vi oprette en bruger ved navn customeradmin :

    1
    
    CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
  5. Nu vil vi give customeradmin privilegier for at få adgang til customer database. Kommandoen til at give privilegier til en database for en bestemt bruger har følgende form:

    1
    
    GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
  6. Med henblik på det følgende eksempel vil vi give customeradmin fuld adgang til customer database. Udfør følgende kommando i MySQL-klienten:

    1
    
    GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
  7. Du skal muligvis angive forskellige adgangsbevillinger afhængigt af kravene til din implementering. Se den officielle dokumentation for MySQL's GRANT-erklæring. Når destinationsdatabasen og MySQL-brugeren er blevet oprettet, kan du lukke MySQL-klienten med følgende kommando:

     quit
    
  8. Du kan nu bruge mysql kommando for at gendanne din SQL-fil. Formen af ​​denne kommando ligner følgende:

     mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
    

I det følgende eksempel vil vi gendanne customer database fra en SQL backup fil med navnet customerBackup.sql (vær særlig opmærksom på < symbol i denne kommando):

mysql -u root -p -h localhost customer < customerBackup.sql

Du vil blive bedt om root MySQL-brugerens adgangskode. Når de korrekte legitimationsoplysninger er leveret, begynder gendannelsesprocessen. Varigheden af ​​denne handling afhænger af dit systems belastning og størrelsen af ​​den database, du er ved at gendanne. Det kan gennemføres på få sekunder, eller det kan tage mange timer.

Gendannelse af en enkelt tabel fra sikkerhedskopi

Mulighed 1:Gendannelse af en enkelt tabel ved hjælp af MySQL og sikkerhedskopier oprettet af mysqldump

  1. Før gendannelsesprocessen påbegyndes, antager vi, at din MySQL-instans allerede har en eksisterende database, der kan modtage den tabel, du ønsker at gendanne. Hvis din MySQL-instans ikke har den nødvendige database, skal vi oprette den, før vi fortsætter. Først skal du logge ind på din MySQL-instans med følgende kommando:

    mysql -u root -p -h localhost
    
  2. Du vil blive bedt om root MySQL-brugerens adgangskode. Når du har angivet de korrekte legitimationsoplysninger, skal du oprette destinationsdatabasen. Til formålet med dette eksempel vil vi oprette customer database.

    1
    
    CREATE DATABASE customer;

    Afslut derefter mysql prompt:

    quit
    

    Hvis du allerede har den nødvendige database, kan du trygt springe ovenstående trin over. For at fortsætte med tabelgendannelsen skal du udstede en kommando i følgende form:

    mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
    
  3. I det følgende eksempel vil vi gendanne order tabel til den eksisterende customer database fra en SQL backup fil med navnet customerOrderBackup.sql . Vær meget omhyggelig med at bruge < operator i følgende kommando:

    mysql -u root -p -h localhost customer < customerOrderBackup.sql
    

Du vil blive bedt om root MySQL-brugerens adgangskode. Når de korrekte legitimationsoplysninger er leveret, begynder gendannelsesprocessen. Varigheden af ​​denne operation afhænger af dit systems belastning og størrelsen på den tabel, du er ved at gendanne. Det kan gennemføres på få sekunder, eller det kan tage mange timer.

Mulighed 2:Gendannelse af en enkelt tabel ved hjælp af MySQL-klienten og en INFILE-erklæring for sikkerhedskopier oprettet med OUTFILE

  1. Før gendannelsesprocessen påbegyndes, antager vi, at din MySQL-instans allerede har en eksisterende database, der kan modtage den tabel, du ønsker at gendanne. Hvis din MySQL-instans ikke har den nødvendige database, skal vi oprette den, før vi fortsætter. Først skal du logge ind på din MySQL-instans med følgende kommando:

    mysql -u root -p -h localhost
    
  2. Du vil blive bedt om root MySQL-brugerens adgangskode. Når du har angivet de korrekte legitimationsoplysninger, skal du oprette destinationsdatabasen. Til formålet med dette eksempel vil vi oprette customer database.

    1
    
    CREATE DATABASE customer;

    Afslut derefter mysql prompt:

    quit
    
  3. Datasikkerhedskopien, der blev brugt i dette tilfælde, blev oprettet ved hjælp af SELECT * INTO OUTFILE 'backupFile.sql' FROM tableName kommando. Denne type sikkerhedskopiering beholder kun selve dataene, så tabelstrukturen skal genskabes. For at gendanne en enkelt tabel fra MySQL-klienten skal du først forberede destinationsdatabasen og -tabellen. Log ind på din (nye) MySQL-instans ved hjælp af MySQL-klienten:

    mysql -u root -p -h localhost
    
  4. Du vil blive bedt om root MySQL-brugerens adgangskode. Når de korrekte legitimationsoplysninger er angivet, skal du oprette destinationsdatabasen. I dette tilfælde vil vi oprette customer database. Udsend følgende erklæring:

    1
    
    CREATE DATABASE customer;
  5. Husk, at semikolonerne (f.eks. ; ) efter hver erklæring er påkrævet. Nu skal du oprette destinationstabellen med den korrekte struktur. Datatyperne i tabellens felter skal afspejle dem i tabellen, hvor sikkerhedskopien stammer fra. I dette eksempel vil vi gendanne order tabel for customer database. Der er 2 felter i order tabel, custNum med datatypen INT og orderName med datatypen VARCHAR(20); din tabelstruktur vil være anderledes:

    1
    2
    
    USE customer;
    CREATE TABLE order (custNum INT, orderName VARCHAR(20));
  6. Afhængigt af din implementering skal du muligvis oprette en ny MySQL-bruger eller genskabe en tidligere bruger med adgang til den nyoprettede database. Kommandoen til at oprette en ny MySQL-bruger har følgende form:

    1
    
    CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
  7. I det næste eksempel vil vi oprette en bruger ved navn customeradmin :

    1
    
    CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
  8. Nu vil vi give customeradmin privilegier for at få adgang til customer database. Kommandoen til at give privilegier til en database for en bestemt bruger har følgende form:

    1
    
    GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'

    Med henblik på det følgende eksempel vil vi give customeradmin fuld adgang til customer database. Udfør følgende kommando i MySQL-klienten:

    1
    
    GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
  9. Du skal muligvis angive forskellige adgangsbevillinger afhængigt af kravene til din implementering. Se den officielle dokumentation for MySQL's GRANT-erklæring. Når tabellen og brugeren er blevet oprettet, kan vi importere backup-dataene fra backup-filen ved hjælp af LOAD DATA kommando. Syntaksen ligner følgende:

    1
    
    LOAD DATA INFILE '[filename]' INTO TABLE [tableName];

    I det følgende eksempel vil vi gendanne data fra en tabel fra en fil med navnet customerOrderBackup.sql . Når MySQL-klienten får sti og filnavn efter INFILE , det leder efter den fil i MySQL-datamappen. Hvis filnavnet customerOrderBackup.sql blev givet, ville stien være /var/lib/mysql/customerOrderBackup.sql . Sørg for, at den fil, du forsøger at gendanne fra, findes, især hvis MySQL genererer File not found fejl.

  10. For at importere data fra customerOrderBackup.sql fil placeret i /var/lib/mysql/ , udsend følgende kommando:

    1
    
    LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;

    Denne proces kan tage alt fra et par sekunder til mange timer afhængigt af størrelsen på dit bord. Varigheden af ​​denne operation afhænger af dit systems belastning og størrelsen på den tabel, du er ved at gendanne. Det kan gennemføres på få sekunder, eller det kan tage mange timer. Når du har bekræftet, at dine data blev importeret korrekt, kan du logge ud:

    quit
    

Flere oplysninger

Du ønsker måske at konsultere følgende ressourcer for yderligere oplysninger om dette emne. Selvom disse leveres i håb om, at de vil være nyttige, bemærk venligst, at vi ikke kan stå inde for nøjagtigheden eller aktualiteten af ​​eksternt hostede materialer.

  • Det officielle MySQL-websted
  • Siden MySQL Database Backup Methods
  • mysqldump-manualside
  • Planlæg opgaver med Cron
  • MySQL's bevillingserklæring, officiel dokumentation

  1. Tips til migrering fra MySQL-replikering til MySQL Galera Cluster 4.0

  2. Arbejder dine medarbejdere på afstand? Sådan holder du dine data sikre.

  3. LIMIT 10..20 i SQL Server

  4. Flere af mine foretrukne PostgreSQL-forespørgsler - og hvorfor de også betyder noget