MySQL is een open source relationeel databasebeheersysteem (DBMS) dat vaak wordt ingezet in een breed scala aan contexten. Meestal wordt het ingezet als onderdeel van theLAMP Stack. Het databasesysteem is ook gemakkelijk te gebruiken en zeer draagbaar en is, in de context van vele toepassingen, uiterst efficiënt. Aangezien MySQL vaak een gecentraliseerde gegevensopslag is voor grote hoeveelheden bedrijfskritieke gegevens, is het maken van regelmatige back-ups van uw MySQL-database een van de belangrijkste hersteltaken die een systeembeheerder kan uitvoeren. Deze handleiding behandelt een aantal verschillende methoden voor het maken van back-ups van uw database en het herstellen van databases vanaf back-ups.
Voordat u met het installatieproces begint, gaan we ervan uit dat u de stappen hebt gevolgd die zijn beschreven in onze Een computerinstantie instellen en beveiligen. Bovendien moet u de MySQL-database installeren. Alle configuratie wordt uitgevoerd in een terminalsessie; zorg ervoor dat je via SSH als root op je Linode bent ingelogd. Als Linux-serverbeheer nieuw voor u is, bent u wellicht geïnteresseerd in onze introductie tot de Linux-conceptengids, de beginnershandleiding en de basisgids voor het beheer.
Back-upmethodologie
De meeste back-ups van MySQL-databases in deze handleiding worden uitgevoerd met de mysqldump
tool, die wordt gedistribueerd met de standaard MySQL-serverinstallatie. We raden u aan mysqldump
. te gebruiken waar mogelijk, omdat dit vaak de gemakkelijkste en meest efficiënte manier is om databaseback-ups te maken. Andere methoden die in deze handleiding worden beschreven, zijn bedoeld voor situaties waarin u geen toegang hebt tot de mysqldump
tool, zoals in een herstelomgeving zoals Finnix of in situaties waarin de lokale instantie van de MySQL-server niet start.
Desalniettemin biedt deze handleiding slechts een overzicht van de mysqldump
tool, aangezien er veel opties en gebruiksmogelijkheden zijn voor mysqldump
die buiten het bestek van dit document vallen. We raden u aan om vertrouwd te raken met alle procedures die in dit document worden behandeld en om door te gaan met uw verkenning van mysqldump
buiten de hier beschreven gevallen. Let op het volgende:
- De
*.sql
bestanden gemaakt metmysqldump
kan op elk moment worden hersteld. U kunt zelfs de database.sql
bewerken bestanden handmatig (met grote zorg!) met uw favoriete teksteditor. - Als uw databases alleen gebruikmaken van de MyISAM-opslagengine, kunt u de
mysqldump
vervangen commando met de snelleremysqlhotcopy
.
Back-ups maken van het gehele databasebeheersysteem (DBMS)
Het is vaak nodig om een back-up (of "dump") te maken van een volledig databasebeheersysteem samen met alle databases en tabellen, inclusief de systeemdatabases die de gebruikers, machtigingen en wachtwoorden bevatten.
Optie 1:maak back-ups van een volledig databasebeheersysteem met behulp van het mysqldump-hulpprogramma
De meest ongecompliceerde methode voor het maken van een enkele coherente back-up van het volledige MySQL-databasebeheersysteem maakt gebruik van de mysqldump
hulpprogramma vanaf de opdrachtregel. De syntaxis voor het maken van een databasedump met een huidige tijdstempel is als volgt:
mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p
Met deze opdracht wordt u om een wachtwoord gevraagd voordat de databaseback-up in de huidige map wordt gestart. Dit proces kan enkele seconden tot enkele uren duren, afhankelijk van de grootte van uw databases.
Automatiseer dit proces door een regel toe te voegen aan crontab
:
0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD
Gebruik voor het bovenstaande voorbeeld which mysqldump
om het juiste pad naar de opdracht te bevestigen, en vervang root
met de mysql-gebruiker die u wilt back-uppen als, en PASSWORD
met het juiste wachtwoord voor die gebruiker.
Opmerking Zorg er in het crontab-voorbeeld voor dat er geen spatie is tussen de vlag -P en uw wachtwoordinvoer.
Optie 2:maak back-ups van een volledig DBMS met behulp van kopieën van de MySQL-gegevensmap
Terwijl de mysqldump
tool de geprefereerde back-upmethode is, zijn er een aantal gevallen die een andere aanpak vereisen. mysqldump
werkt alleen als de databaseserver toegankelijk is en actief is. Als de database niet kan worden gestart of het hostsysteem niet toegankelijk is, kunnen we de database van MySQL rechtstreeks kopiëren. Deze methode is vaak nodig in situaties waarin u alleen toegang hebt tot een herstelomgeving zoals Finnix met de schijven van uw systeem in dat bestandssysteem. Als u deze methode op uw systeem zelf probeert, zorg er dan voor dat de database niet . is rennen. Geef een opdracht die lijkt op het volgende:
/etc/init.d/mysqld stop
Op de meeste distributieversies van MySQL bevindt de gegevensmap zich in de /var/lib/mysql/
map. Als deze map niet bestaat, onderzoekt u de /etc/mysql/my.cnf
bestand voor een pad naar de gegevensmap. Als alternatief kunt u in uw bestandssysteem zoeken naar de gegevensmap door het volgende commando uit te voeren:
find / -name mysql
Zodra u uw MySQL-gegevensmap hebt gevonden, kunt u deze naar een back-uplocatie kopiëren. In het volgende voorbeeld wordt ervan uitgegaan dat de MySQL-gegevensdirectory zich bevindt op /var/lib/mysql/
:
cp -R /var/lib/mysql/* /opt/database/backup-1266871069/
In dit geval hebben we de inhoud van de gegevensmap recursief gekopieerd (bijv. /var/lib/mysql/
) naar een map binnen de /opt/
hiërarchie (bijv. /opt/database/backup-1266871069/
). Deze map moet bestaan voordat de kopieerbewerking wordt gestart. Overweeg de volgende volgorde van bewerkingen:
/etc/init.d/mysql stop
mkdir -p /opt/database/backup-1266872202/
cp -R /var/lib/mysql/* /opt/database/backup-1266872202/
Deze opdrachten beginnen met het stoppen van de MySQL-serverdaemon en het maken van een map met de naam /opt/database/backup-1266872202/
, en het uitvoeren van een recursieve kopie van de gegevensmap. Merk op dat we ervoor hebben gekozen om de backup-[time_t]
. te gebruiken naamgevingsconventie voor onze voorbeelden. Vervang de bovenstaande paden door uw voorkeursorganisatie en naamgevingsschema. De cp
opdracht produceert geen uitvoer en kan enige tijd duren om te voltooien, afhankelijk van de grootte van uw database. Schrik niet als het even duurt voordat het klaar is. Wanneer de kopieerbewerking is voltooid, wilt u misschien de gegevensmap archiveren in een "tar"-archief om het gemakkelijker te kunnen beheren en verplaatsen tussen machines. Geef de volgende opdrachten om het archief te maken:
cd /opt/database/backup-1266872202
tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz
Zodra de tarball is gemaakt, kunt u het bestand eenvoudig overbrengen op de manier die voor u het handigst is. Vergeet niet de MySQL-serverdaemon opnieuw te starten indien nodig:
/etc/init.d/mysql start
Back-ups maken van een enkele database
In veel gevallen is het maken van een back-up van de gehele databaseserver niet vereist. In sommige gevallen, zoals het upgraden van een webtoepassing, kan het installatieprogramma aanbevelen een back-up van de database te maken voor het geval de upgrade de database nadelig beïnvloedt. Evenzo, als u een "dump" van een specifieke database wilt maken om die database naar een andere server te verplaatsen, kunt u de volgende methode overwegen.
Gebruik indien mogelijk de mysqldump
tool om een "dump" van een enkele database te exporteren. Deze opdracht ziet er als volgt uit:
mysqldump -u username -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql
Het bovenstaande voorbeeld is zoals het voorbeeld in de vorige sectie, behalve in plaats van het gebruik van de --all-databases
optie specificeert dit voorbeeld een bepaalde databasenaam. In dit geval maken we een back-up van de danceLeaders
databank. De vorm van dit commando, in een meer duidelijke notatie is als volgt:
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
Voor een extra voorbeeld maken we een back-up van de database met de naam customer
met behulp van de root-database-account door de volgende opdracht te geven:
mysqldump -u root -p -h localhost customer > customerBackup.sql
U wordt om een wachtwoord gevraagd voordat mysqldump
begint het back-upproces. Zoals altijd het back-upbestand, in dit geval customerBackup.sql
, wordt gemaakt in de map waarin u deze opdracht geeft. De mysqldump
opdracht kan binnen een paar seconden of een paar uur worden voltooid, afhankelijk van de grootte van de database en de belasting van de host bij het uitvoeren van de back-up.
Back-ups maken van een enkele tabel
Optie 1:maak back-ups van een enkele tabel met behulp van het mysqldump-hulpprogramma
Deze bewerking, zoals eerder gebruik van de mysqldump
hulpprogramma in dit document, kunt u een back-up maken van een enkele databasetabel. Als vervolg op onze eerdere voorbeelden, kunt u met het volgende voorbeeld een back-up maken van de tabel usernameRecords
in de danceLeaders
database.
mysqldump -u username -ps3cr1t -h localhost danceLeaders usernameRecords \> 1266861650-danceLeaders-usernameRecords.sql
Het bovenstaande voorbeeld lijkt op het voorbeeld in de vorige sectie, behalve dat we een tabelnaamspecificatie hebben toegevoegd aan de opdracht om de naam op te geven van de tabel waarvan we een back-up willen maken. De vorm van dit commando in een meer duidelijke notatie is als volgt:
mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql
Voor een extra voorbeeld maken we een back-up van de tabel met de naam "bestelling" uit de database met de naam customer
met behulp van de root-database-account door de volgende opdracht te geven:
mysqldump -u root -p -h localhost customer order > customerBackup-order.sql
U wordt om een wachtwoord gevraagd voordat mysqldump
begint het back-upproces. Zoals altijd is het back-upbestand (in dit geval customerBackup.sql
) wordt gemaakt in de map waarin u deze opdracht geeft. De mysqldump
opdracht kan binnen een paar seconden of een paar uur worden voltooid, afhankelijk van de grootte van de database en de belasting van de host bij het uitvoeren van de back-up.
Optie 2:maak back-ups van een enkele tabel met behulp van de MySQL-client en een OUTFILE-verklaring
De MySQL-client zelf heeft enige back-upmogelijkheden. Het is handig wanneer u al bent ingelogd en u de huidige sessie niet wilt verlaten. Als u een live-systeem gebruikt en u zich geen downtime kunt veroorloven, kunt u overwegen de tafel waarvan u een back-up maakt tijdelijk te vergrendelen.
Houd er rekening mee dat bij het maken van een back-up van een enkele tabel met behulp van de MySQL-client, de structuur van die tabel niet behouden blijft in de back-up. Bij gebruik van deze methode worden alleen de gegevens zelf opgeslagen.
-
Voordat we beginnen, raden we aan om een
LOCK TABLES
. uit te voeren op de tafels waarvan u een back-up wilt maken, gevolgd doorFLUSH TABLES
om ervoor te zorgen dat de database zich in een consistente ruimte bevindt tijdens de back-upbewerking. Je hebt alleen een leesslot nodig. Hierdoor kunnen andere clients de tabellen blijven doorzoeken terwijl u een kopie maakt van de bestanden in de MySQL-gegevensdirectory. Voor een “lees” slot, de syntax vanLOCK TABLES
ziet er als volgt uit:1
LOCK TABLES tableName READ;
Een
LOCK TABLES
uitvoeren op deorder
tabel van decustomer
database, geef het volgende commando:mysql -u root -p -h localhost
U wordt dan gevraagd om het root-wachtwoord. Nadat u de databasereferenties hebt ingevoerd, komt u bij de mysql-clientprompt. Geef de volgende opdracht om de
order
te vergrendelen tabel in decustomer
database (de achterliggende;
is vereist voor MySQL-opdrachten):1 2 3
USE customer; LOCK TABLES order READ; FLUSH TABLES;
-
We kunnen nu beginnen met de back-upbewerking. Om een back-up van een enkele tabel te maken met behulp van de MySQL-client, moet u zijn aangemeld bij uw MySQL DBMS. Als u momenteel niet bent ingelogd, kunt u inloggen met het volgende commando:
mysql -u root -p -h localhost
U wordt gevraagd om een wachtwoord. Nadat u het juiste wachtwoord hebt ingevoerd en bij de MySQL-clientprompt bent, kunt u een
SELECT * INTO OUTFILE
gebruiken uitspraak. De syntaxis van deze verklaring ziet er als volgt uit:1
SELECT * INTO OUTFILE 'file_name' FROM tbl_name;
In dit voorbeeld maken we een back-up van de gegevens van de
order
tabel van decustomer
databank. Geef de volgende opdracht om de back-upprocedure te starten (de volgende;
is vereist voor MySQL-opdrachten):1 2 3 4 5
USE customer; LOCK TABLES order READ; FLUSH TABLES; SELECT * INTO OUTFILE 'customerOrderBackup.sql' FROM order; UNLOCK TABLES;
De
customerOrderBackup.sql
bestand wordt gemaakt in de juiste gegevenssubmap in de gegevensmap van MySQL. De MySQL-gegevensdirectory is gewoonlijk/var/lib/mysql/
. In dit voorbeeld is deOUTFILE
zal zijn/var/lib/mysql/customer/customerOrderBackup.sql
. De locatie van deze map en dit bestand kan echter variëren tussen Linux-distributies. Als u uw back-upbestand niet kunt vinden, kunt u ernaar zoeken met de volgende opdracht:find / -name customerOrderBackup.sql
-
Nadat u de back-upbewerking hebt voltooid, wilt u de tabellen ontgrendelen met de volgende opdracht in de MySQL-client. Hierdoor keert uw database terug naar de normale werking. Log in op de MySQL-client met het eerste commando als je nog niet bent ingelogd en geef dan het tweede commando:
mysql -uroot -p -h localhost
1
UNLOCK TABLES;
U kunt uw database vanaf dit punt gewoon blijven gebruiken.
Overwegingen voor een effectieve back-upstrategie
Het maken van back-ups van uw MySQL-database zou een regelmatige en geplande taak moeten zijn. U kunt overwegen om periodieke back-ups te plannen met behulp van cron
, mysqldump
en/of mail
. Bekijk onze documentatie voor meer informatie overcron. Het implementeren van een geautomatiseerde back-upoplossing kan de uitvaltijd in een noodherstelsituatie helpen minimaliseren.
U hoeft niet als root in te loggen bij het maken van back-ups van databases. Een MySQL-gebruiker met lezen (bijv. SELECT
) toestemming kan zowel de mysqldump
en mysql
(bijv. de MySQL-client) tools om back-ups te maken, zoals hieronder beschreven. Het is gebruikelijk dat u de MySQL root
niet gebruikt gebruiker waar mogelijk om veiligheidsrisico's te minimaliseren.
U kunt incrementele back-ups overwegen als onderdeel van een langetermijnplan voor databaseback-ups. Hoewel dit proces hier niet wordt behandeld, raden we u aan de bron MySQL Database Backup Methods te raadplegen voor meer informatie.
Een volledig DBMS herstellen vanaf een back-up
Een back-up die niet kan worden hersteld, is van minimale waarde. We raden aan om uw back-ups regelmatig te testen om er zeker van te zijn dat ze kunnen worden teruggezet in het geval dat u een back-up moet herstellen. Wanneer u back-ups van uw MySQL-database terugzet, hangt de methode die u gebruikt af van de methode die u hebt gebruikt om de betreffende back-up te maken.
Optie 1:een volledige DBMS herstellen met behulp van de MySQL-client en back-ups gemaakt door mysqldump
Voordat u met het herstelproces begint, wordt in deze sectie aangenomen dat uw systeem een nieuw geïnstalleerde versie van MySQL gebruikt zonder bestaande databases of tabellen. Als u al databases en tabellen in uw MySQL DBMS heeft, maak dan een back-up voordat u doorgaat, aangezien dit proces huidige MySQL-gegevens zal overschrijven.
U kunt eenvoudig uw volledige DBMS herstellen met behulp van de mysql
opdracht. De syntaxis hiervoor ziet er als volgt uit:
mysql -u [username] -p [password] < backupFile.sql
In dit geval herstellen we gewoon het volledige DBMS. De opdracht ziet er als volgt uit:
mysql -u root -p < 1266861650-backup-all.sql
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Zodra de juiste inloggegevens zijn opgegeven, begint het herstelproces. Aangezien dit proces een volledig DBMS herstelt, kan het enkele seconden tot vele uren duren.
Optie 2:een volledig DBMS herstellen met behulp van MySQL-gegevensbestanden die rechtstreeks zijn gekopieerd van MySQL's gegevensmap
Voordat u met het herstelproces begint, wordt in deze sectie aangenomen dat uw systeem een nieuw geïnstalleerde versie van MySQL gebruikt zonder bestaande databases of tabellen. Als u al databases en tabellen in uw MySQL DBMS heeft, maak dan een back-up voordat u doorgaat, aangezien dit proces huidige MySQL-gegevens zal overschrijven.
-
Als u een volledige back-up hebt van uw MySQL-gegevensmap (gewoonlijk
/var/lib/mysql
), kunt u het herstellen vanaf de opdrachtregel. Om een succesvol herstel te verzekeren, moet u eerst de MySQL-serverdaemon stoppen en de huidige gegevens in de MySQL-gegevensdirectory verwijderen./etc/init.d/mysql stop rm -R /var/lib/mysql/*
-
In het volgende voorbeeld bevindt de back-up van de MySQL-gegevensdirectory zich in de
/opt/database/backup-1266872202
map. Als u een tarball van de datadirectory hebt gemaakt toen u een back-up van uw DBMS-datadirectory maakte, moet u de bestanden uit de tarball halen voordat u ze kopieert met de volgende opdrachten:cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/ cd /var/lib/mysql tar xzvf mysqlBackup-1266872202.tar.gz
-
Voordat we het MySQL-databaseproces opnieuw kunnen starten, moeten we ervoor zorgen dat de machtigingen correct zijn ingesteld op de
/var/lib/mysql/
map. Voor dit voorbeeld nemen we aan dat de MySQL-serverdaemon wordt uitgevoerd als de gebruikermysql
met de groepmysql
. Voer de volgende opdracht uit om de machtigingen voor de gegevensmap te wijzigen:chown -R mysql:mysql /var/lib/mysql
-
Wijzig de
mysql:mysql
deel van deze opdracht als uw MySQL-instantie wordt uitgevoerd met verschillende gebruikers- en groepsmachtigingen. De vorm van dit argument is[user]:[group]
. Eindelijk kunnen we de MySQL-serverdaemon starten met het volgende commando:/etc/init.d/mysql start
Als u een foutmelding krijgt die lijkt op de volgende:
/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
U moet de oude
debian-sys-maint
. vinden gebruikerswachtwoord in de/etc/mysql/debian.cnf
en verander dan de nieuwedebian-sys-maint
gebruikerswachtwoord ervoor. U kunt het oude wachtwoord bekijken metcat
:cat /etc/mysql/debian.cnf | grep password
Kopieer (of onthoud) het wachtwoord. Dan moet u de nieuwe
debian-sys-maint
. wijzigen gebruikerswachtwoord. U kunt dit doen door in te loggen als de MySQL-rootgebruiker en het volgende commando uit te voeren (waarbijhet wachtwoord is van het oude debian-sys-maint
gebruiker):1
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
-
Vervolgens moet u MySQL opnieuw starten met het volgende commando:
/etc/init.d/mysql restart
Nadat de MySQL-server met succes is gestart, wilt u uw MySQL DBMS testen en ervoor zorgen dat alle databases en tabellen correct worden hersteld. We raden u ook aan uw logboeken te controleren op mogelijke fouten. In sommige gevallen kan MySQL ondanks databasefouten succesvol starten.
Een enkele database herstellen vanaf een back-up
In gevallen waarin u slechts een back-up voor één database hebt gemaakt, of slechts één database hoeft te herstellen, is het herstelproces enigszins anders.
Voordat u met het herstelproces begint, wordt in deze sectie aangenomen dat uw systeem een nieuw geïnstalleerde versie van MySQL gebruikt zonder bestaande databases of tabellen. Als u al databases en tabellen in uw MySQL DBMS heeft, maak dan een back-up voordat u doorgaat, aangezien dit proces huidige MySQL-gegevens zal overschrijven.
-
Om een enkele database te herstellen met behulp van de
mysql
opdracht, bereidt u eerst de doeldatabase voor. Log in op uw (nieuwe) MySQL-databaseserver met behulp van de MySQL-client:mysql -u root -p -h localhost
-
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Nadat u de juiste referenties hebt opgegeven, moet u de doeldatabase maken. In dit geval de
customer
database wordt hersteld:1
CREATE DATABASE customer;
-
Zoals bij alle MySQL-instructies, laat de laatste puntkomma niet weg (bijv.
;
) aan het einde van elke opdracht. Afhankelijk van uw implementatie moet u mogelijk een nieuwe MySQL-gebruiker maken of een eerdere gebruiker opnieuw maken met toegang tot de nieuw gemaakte database. De opdracht voor het maken van een nieuwe MySQL-gebruiker heeft de volgende vorm:1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
In het volgende voorbeeld maken we een gebruiker aan met de naam
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nu geven we
customeradmin
toegangsrechten voor decustomer
databank. De opdracht voor het verlenen van privileges aan een database voor een specifieke gebruiker heeft de volgende vorm:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
-
Voor de doeleinden van het volgende voorbeeld geven we
customeradmin
volledige toegang tot decustomer
databank. Geef de volgende opdracht in de MySQL-client:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Mogelijk moet u verschillende toegangsverleningen opgeven, afhankelijk van de vereisten van uw implementatie. Raadpleeg de officiële documentatie voor de GRANT-verklaring van MySQL. Nadat de doeldatabase en de MySQL-gebruiker zijn gemaakt, kunt u de MySQL-client sluiten met de volgende opdracht:
quit
-
U kunt nu de
mysql
. gebruiken commando om uw SQL-bestand te herstellen. De vorm van dit commando lijkt op het volgende:mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
In het volgende voorbeeld herstellen we de customer
database uit een SQL-back-upbestand met de naam customerBackup.sql
(let vooral op de <
symbool in dit commando):
mysql -u root -p -h localhost customer < customerBackup.sql
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Zodra de juiste inloggegevens zijn opgegeven, begint het herstelproces. De duur van deze bewerking hangt af van de belasting van uw systeem en de grootte van de database die u herstelt. Het kan in een paar seconden voltooid zijn, of het kan vele uren duren.
Een enkele tabel herstellen vanuit een back-up
Optie 1:een enkele tabel herstellen met behulp van de MySQL en back-ups gemaakt door mysqldump
-
Voordat we met het herstelproces beginnen, gaan we ervan uit dat uw MySQL-instantie al een bestaande database heeft die de tabel kan ontvangen die u wilt herstellen. Als uw MySQL-instantie niet over de vereiste database beschikt, moeten we deze maken voordat we verder gaan. Log eerst in op uw MySQL-instantie met het volgende commando:
mysql -u root -p -h localhost
-
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Nadat u de juiste referenties hebt opgegeven, moet u de doeldatabase maken. Voor dit voorbeeld maken we de
customer
database.1
CREATE DATABASE customer;
Sluit vervolgens de
mysql
prompt:quit
Als u al over de vereiste database beschikt, kunt u bovenstaande stap gerust overslaan. Geef een opdracht in de volgende vorm om door te gaan met het herstellen van de tabel:
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
-
Voor het volgende voorbeeld herstellen we de
order
tabel in de bestaandecustomer
database uit een SQL-back-upbestand met de naamcustomerOrderBackup.sql
. Wees zeer voorzichtig bij het gebruik van de<
operator in de volgende opdracht:mysql -u root -p -h localhost customer < customerOrderBackup.sql
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Zodra de juiste inloggegevens zijn opgegeven, begint het herstelproces. De duur van deze bewerking hangt af van de belasting van uw systeem en de grootte van de tabel die u herstelt. Het kan in een paar seconden voltooid zijn, of het kan vele uren duren.
Optie 2:een enkele tabel herstellen met de MySQL-client en een INFILE-verklaring voor back-ups gemaakt met OUTFILE
-
Voordat we met het herstelproces beginnen, gaan we ervan uit dat uw MySQL-instantie al een bestaande database heeft die de tabel kan ontvangen die u wilt herstellen. Als uw MySQL-instantie niet over de vereiste database beschikt, moeten we deze maken voordat we verder gaan. Log eerst in op uw MySQL-instantie met het volgende commando:
mysql -u root -p -h localhost
-
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Nadat u de juiste referenties hebt opgegeven, moet u de doeldatabase maken. Voor dit voorbeeld maken we de
customer
database.1
CREATE DATABASE customer;
Sluit vervolgens de
mysql
prompt:quit
-
De gegevensback-up die in dit geval werd gebruikt, is gemaakt met de
SELECT * INTO OUTFILE 'backupFile.sql' FROM tableName
opdracht. Dit type back-up behoudt alleen de gegevens zelf, dus de tabelstructuur moet opnieuw worden gemaakt. Om een enkele tabel vanuit de MySQL-client te herstellen, moet u eerst de doeldatabase en -tabel voorbereiden. Log in op uw (nieuwe) MySQL-instantie met behulp van de MySQL-client:mysql -u root -p -h localhost
-
U wordt gevraagd om het wachtwoord van de root MySQL-gebruiker. Zodra de juiste referenties zijn opgegeven, moet u de doeldatabase maken. In dit geval maken we de
customer
. aan databank. Geef de volgende verklaring af:1
CREATE DATABASE customer;
-
Onthoud dat de puntkomma's (bijv.
;
) na elke verklaring zijn vereist. Nu moet u de bestemmingstabel met de juiste structuur maken. De gegevenstypen van de velden van de tabel moeten overeenkomen met die van de tabel waarin de back-up is gemaakt. In dit voorbeeld herstellen we deorder
tabel van decustomer
databank. Er zijn 2 velden in deorder
tabel,custNum
met gegevenstypeINT
enorderName
met gegevenstypeVARCHAR(20)
; uw tafelstructuur zal anders zijn:1 2
USE customer; CREATE TABLE order (custNum INT, orderName VARCHAR(20));
-
Afhankelijk van uw implementatie moet u mogelijk een nieuwe MySQL-gebruiker maken of een eerdere gebruiker opnieuw maken met toegang tot de nieuw gemaakte database. De opdracht voor het maken van een nieuwe MySQL-gebruiker heeft de volgende vorm:
1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
In het volgende voorbeeld maken we een gebruiker aan met de naam
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nu geven we
customeradmin
toegangsrechten voor decustomer
databank. De opdracht voor het verlenen van privileges aan een database voor een specifieke gebruiker heeft de volgende vorm:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
Voor de doeleinden van het volgende voorbeeld geven we
customeradmin
volledige toegang tot decustomer
databank. Geef de volgende opdracht in de MySQL-client:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Mogelijk moet u verschillende toegangsverleningen opgeven, afhankelijk van de vereisten van uw implementatie. Raadpleeg de officiële documentatie voor de GRANT-verklaring van MySQL. Nadat de tabel en gebruiker zijn gemaakt, kunnen we de back-upgegevens importeren uit het back-upbestand met behulp van de
LOAD DATA
opdracht. De syntaxis lijkt op het volgende:1
LOAD DATA INFILE '[filename]' INTO TABLE [tableName];
In het volgende voorbeeld herstellen we gegevens uit een tabel uit een bestand met de naam
customerOrderBackup.sql
. Wanneer MySQL-client pad en bestandsnaam krijgt naINFILE
, zoekt het in de MySQL-gegevensmap naar dat bestand. Als de bestandsnaamcustomerOrderBackup.sql
werd gegeven, zou het pad/var/lib/mysql/customerOrderBackup.sql
zijn . Zorg ervoor dat het bestand waaruit u probeert te herstellen bestaat, vooral als MySQLFile not found
genereert fouten. -
De gegevens importeren uit de
customerOrderBackup.sql
bestand in/var/lib/mysql/
, geef het volgende commando:1
LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;
Dit proces kan enkele seconden tot vele uren duren, afhankelijk van de grootte van uw tafel. De duur van deze bewerking hangt af van de belasting van uw systeem en de grootte van de tabel die u herstelt. Het kan in een paar seconden worden voltooid, of het kan vele uren duren. Nadat u heeft geverifieerd dat uw gegevens met succes zijn geïmporteerd, kunt u uitloggen:
quit
Meer informatie
U kunt de volgende bronnen raadplegen voor aanvullende informatie over dit onderwerp. Hoewel deze worden verstrekt in de hoop dat ze nuttig zullen zijn, houd er rekening mee dat we niet kunnen instaan voor de nauwkeurigheid of tijdigheid van extern gehost materiaal.
- De officiële MySQL-website
- pagina MySQL-databaseback-upmethoden
- mysqldump handleiding pagina
- Taken plannen met Cron
- MySQL's subsidieverklaring, officiële documentatie