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 medmysqldump
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 hurtigeremysqlhotcopy
.
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.
-
Før vi begynder, anbefaler vi at udføre en
LOCK TABLES
på de tabeller, du har til hensigt at tage backup af, efterfulgt afFLUSH 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 forLOCK TABLES
ser sådan ud:1
LOCK TABLES tableName READ;
For at udføre en
LOCK TABLES
påorder
tabel forcustomer
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 icustomer
database (den efterfølgende;
er påkrævet for MySQL-kommandoer):1 2 3
USE customer; LOCK TABLES order READ; FLUSH TABLES;
-
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 forcustomer
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 erOUTFILE
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
-
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.
-
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/*
-
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
-
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 brugerenmysql
med gruppenmysql
. Udfør følgende kommando for at ændre tilladelserne på databiblioteket:chown -R mysql:mysql /var/lib/mysql
-
Æ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 nyedebian-sys-maint
brugerens adgangskode til det. Du kan se den gamle adgangskode ved hjælp afcat
: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 (hvorer adgangskoden til den gamle debian-sys-maint
bruger):1
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
-
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.
-
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
-
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;
-
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]';
-
I det næste eksempel vil vi oprette en bruger ved navn
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nu vil vi give
customeradmin
privilegier for at få adgang tilcustomer
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 tilcustomer
database. Udfør følgende kommando i MySQL-klienten:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
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
-
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
-
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
-
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
-
I det følgende eksempel vil vi gendanne
order
tabel til den eksisterendecustomer
database fra en SQL backup fil med navnetcustomerOrderBackup.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
-
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
-
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
-
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
-
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;
-
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 gendanneorder
tabel forcustomer
database. Der er 2 felter iorder
tabel,custNum
med datatypenINT
ogorderName
med datatypenVARCHAR(20)
; din tabelstruktur vil være anderledes:1 2
USE customer; CREATE TABLE order (custNum INT, orderName VARCHAR(20));
-
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]';
-
I det næste eksempel vil vi oprette en bruger ved navn
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nu vil vi give
customeradmin
privilegier for at få adgang tilcustomer
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 tilcustomer
database. Udfør følgende kommando i MySQL-klienten:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
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 efterINFILE
, det leder efter den fil i MySQL-datamappen. Hvis filnavnetcustomerOrderBackup.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 generererFile not found
fejl. -
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