MySQL je open source systém pro správu relačních databází (DBMS), který je často nasazován v široké škále kontextů. Nejčastěji se nasazuje jako součást LAMP Stack. Databázový systém je také snadno použitelný a vysoce přenosný a v kontextu mnoha aplikací je mimořádně efektivní. Protože MySQL je často centralizovaným úložištěm dat pro velké množství kritických dat, pravidelné zálohování vaší databáze MySQL je jednou z nejdůležitějších úloh obnovy po havárii, kterou může správce systému provést. Tato příručka se zabývá řadou různých metod pro vytváření záloh vaší databáze a také pro obnovu databází ze záloh.
<šablona x-if=visible><šablona x-if=$isMobile()>
Před zahájením procesu instalace předpokládáme, že jste postupovali podle kroků uvedených v části Nastavení a zabezpečení výpočetní instance. Kromě toho budete muset nainstalovat databázi MySQL. Veškerá konfigurace bude provedena v terminálové relaci; ujistěte se, že jste přihlášeni ke svému Linode jako root přes SSH. Pokud jste v administraci linuxových serverů nováčkem, možná vás bude zajímat naše úvodní příručka s koncepty Linuxu, příručka pro začátečníky a příručka se základy administrace.
Metodika zálohování
Většina záloh MySQL databází v této příručce se provádí pomocí mysqldump
nástroj, který je distribuován s výchozí instalací serveru MySQL. Doporučujeme použít mysqldump
kdykoli je to možné, protože je to často nejjednodušší a nejúčinnější způsob zálohování databáze. Další metody popsané v této příručce jsou uvedeny pro situace, kdy nemáte přístup k mysqldump
nástroj, jako v prostředí obnovy, jako je Finnix, nebo v situacích, kdy se místní instance serveru MySQL nespustí.
Nicméně tato příručka poskytuje pouhý přehled mysqldump
nástroj, protože existuje mnoho možností a použití mysqldump
které přesahují rámec tohoto dokumentu. Doporučujeme vám seznámit se se všemi postupy uvedenými v tomto dokumentu a pokračovat ve zkoumání mysqldump
nad rámec zde popsaných případů. Nezapomeňte si uvědomit následující:
*.sql
soubory vytvořené pomocímysqldump
lze kdykoli obnovit. Můžete dokonce upravit databázi.sql
soubory ručně (s velkou opatrností!) pomocí vašeho oblíbeného textového editoru.- Pokud vaše databáze využívají pouze úložiště MyISAM, můžete nahradit
mysqldump
příkaz s rychlejšímmysqlhotcopy
.
Vytváření záloh celého systému správy databází (DBMS)
Často je nutné provést zálohu (neboli „skládku“) celého systému správy databází spolu se všemi databázemi a tabulkami, včetně systémových databází, které obsahují uživatele, oprávnění a hesla.
Možnost 1:Vytvořte zálohy celého systému správy databáze pomocí nástroje mysqldump
Nejpřímější metoda pro vytvoření jediné koherentní zálohy celého systému správy databáze MySQL používá mysqldump
nástroj z příkazového řádku. Syntaxe pro vytvoření výpisu databáze s aktuálním časovým razítkem je následující:
mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p
Tento příkaz vás vyzve k zadání hesla před zahájením zálohování databáze v aktuálním adresáři. Tento proces může trvat od několika sekund do několika hodin v závislosti na velikosti vašich databází.
Automatizujte tento proces přidáním řádku do crontab
:
0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD
Pro výše uvedený příklad použijte which mysqldump
potvrďte správnou cestu k příkazu a nahraďte root
s uživatelem mysql, pod kterým chcete spouštět zálohy, a PASSWORD
se správným heslem pro daného uživatele.
Poznámka V příkladu crontab se ujistěte, že mezi příznakem -P a zadáním hesla není mezera.
Možnost 2:Vytvořte zálohy celého DBMS pomocí kopií datového adresáře MySQL
Zatímco mysqldump
je preferovanou metodou zálohování, existuje několik případů, které vyžadují jiný přístup. mysqldump
funguje pouze tehdy, když je databázový server přístupný a běží. Pokud databázi nelze spustit nebo je hostitelský systém nedostupný, můžeme přímo zkopírovat databázi MySQL. Tato metoda je často nezbytná v situacích, kdy máte přístup pouze k prostředí pro obnovu, jako je Finnix, s disky vašeho systému připojenými v daném systému souborů. Pokud tuto metodu zkoušíte na svém systému, ujistěte se, že databáze není běh. Zadejte příkaz podobný následujícímu:
/etc/init.d/mysqld stop
Ve většině verzí MySQL distribuce je datový adresář umístěn v /var/lib/mysql/
adresář. Pokud tento adresář neexistuje, prozkoumejte /etc/mysql/my.cnf
soubor pro cestu k datovému adresáři. Alternativně můžete v systému souborů vyhledat adresář dat zadáním následujícího příkazu:
find / -name mysql
Jakmile najdete svůj datový adresář MySQL, můžete jej zkopírovat do záložního umístění. Následující příklad předpokládá, že datový adresář MySQL je umístěn na adrese /var/lib/mysql/
:
cp -R /var/lib/mysql/* /opt/database/backup-1266871069/
V tomto případě jsme rekurzivně zkopírovali obsah datového adresáře (např. /var/lib/mysql/
) do adresáře v rámci /opt/
hierarchie (např. /opt/database/backup-1266871069/
). Tento adresář musí existovat před zahájením operace kopírování. Zvažte následující sekvenci operací:
/etc/init.d/mysql stop
mkdir -p /opt/database/backup-1266872202/
cp -R /var/lib/mysql/* /opt/database/backup-1266872202/
Tyto příkazy začínají zastavením démona serveru MySQL a vytvořením adresáře s názvem /opt/database/backup-1266872202/
a provedení rekurzivní kopie datového adresáře. Všimněte si, že jsme se rozhodli použít backup-[time_t]
konvence pojmenování pro naše příklady. Nahraďte výše uvedené cesty svou preferovanou organizaci a schéma pojmenování. cp
příkaz nevytváří výstup a jeho dokončení může nějakou dobu trvat v závislosti na velikosti vaší databáze. Neznepokojujte se, pokud dokončení bude chvíli trvat. Po dokončení operace kopírování můžete chtít archivovat datový adresář do archivu „tar“, abyste usnadnili správu a přesun mezi počítači. Chcete-li vytvořit archiv, zadejte následující příkazy:
cd /opt/database/backup-1266872202
tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz
Jakmile je tarball vytvořen, můžete soubor snadno přenést způsobem, který je pro vás nejpohodlnější. V případě potřeby nezapomeňte znovu restartovat démona serveru MySQL:
/etc/init.d/mysql start
Vytváření záloh jedné databáze
V mnoha případech není nutné vytvářet zálohu celého databázového serveru. V některých případech, jako je upgrade webové aplikace, může instalační technik doporučit vytvoření zálohy databáze pro případ, že by aktualizace databáze nepříznivě ovlivnila. Podobně, pokud chcete vytvořit „dump“ konkrétní databáze a přesunout tuto databázi na jiný server, můžete zvážit následující metodu.
Pokud je to možné, použijte mysqldump
nástroj pro export „dump“ jedné databáze. Tento příkaz bude vypadat následovně:
mysqldump -u username -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql
Výše uvedený příklad je jako příklad v předchozí části, s výjimkou použití --all-databases
Tento příklad určuje konkrétní název databáze. V tomto případě vytvoříme zálohu danceLeaders
databáze. Forma tohoto příkazu v jednodušším zápisu je následující:
mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
Pro další příklad provedeme zálohu databáze s názvem customer
pomocí účtu kořenové databáze zadáním následujícího příkazu:
mysqldump -u root -p -h localhost customer > customerBackup.sql
Před mysqldump
budete vyzváni k zadání hesla spustí proces zálohování. Jako vždy záložní soubor, v tomto případě customerBackup.sql
, se vytvoří v adresáři, kde zadáváte tento příkaz. mysqldump
příkaz může být dokončen během několika sekund nebo několika hodin v závislosti na velikosti databáze a zatížení hostitele při spuštění zálohy.
Vytváření záloh jedné tabulky
Možnost 1:Vytvořte zálohy jedné tabulky pomocí nástroje mysqldump
Tato operace, stejně jako předchozí použití mysqldump
v tomto dokumentu vám umožňuje vytvořit zálohu jedné databázové tabulky. Následující příklad pokračuje v našich dřívějších příkladech a umožňuje vám zálohovat tabulku usernameRecords
v danceLeaders
databáze.
mysqldump -u username -ps3cr1t -h localhost danceLeaders usernameRecords \> 1266861650-danceLeaders-usernameRecords.sql
Výše uvedený příklad je jako příklad v předchozí části s tím rozdílem, že jsme do příkazu přidali specifikaci názvu tabulky, která určuje název tabulky, kterou chceme zálohovat. Forma tohoto příkazu v jednodušším zápisu je následující:
mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql
Jako další příklad provedeme zálohu tabulky s názvem „objednávka“ z databáze s názvem customer
pomocí účtu kořenové databáze zadáním následujícího příkazu:
mysqldump -u root -p -h localhost customer order > customerBackup-order.sql
Před mysqldump
budete vyzváni k zadání hesla zahájí proces zálohování. Jako vždy záložní soubor (v tomto případě customerBackup.sql
) se vytvoří v adresáři, kde zadáte tento příkaz. mysqldump
příkaz může být dokončen během několika sekund nebo několika hodin v závislosti na velikosti databáze a zatížení hostitele při spuštění zálohy.
Možnost 2:Vytvořte zálohy jedné tabulky pomocí klienta MySQL a prohlášení OUTFILE
Samotný klient MySQL má určitou zálohovací schopnost. Je to užitečné, když jste již přihlášeni a nechcete opustit aktuální relaci. Pokud používáte aktivní systém a nemůžete si dovolit odstávku, měli byste zvážit dočasné uzamčení tabulky, kterou zálohujete.
Uvědomte si, že při zálohování jedné tabulky pomocí klienta MySQL není v záloze zachována struktura této tabulky. Při použití této metody se uloží pouze samotná data.
-
Než začneme, doporučujeme provést
LOCK TABLES
na tabulkách, které chcete zálohovat, a potéFLUSH TABLES
abyste zajistili, že databáze bude během operace zálohování v konzistentním prostoru. Potřebujete pouze zámek pro čtení. To umožňuje ostatním klientům pokračovat v dotazování na tabulky, zatímco vy vytváříte kopie souborů v datovém adresáři MySQL. Pro zámek „čtení“ syntaxeLOCK TABLES
vypadá následovně:1
LOCK TABLES tableName READ;
Chcete-li provést
LOCK TABLES
naorder
tabulkycustomer
databáze, zadejte následující příkaz:mysql -u root -p -h localhost
Poté budete vyzváni k zadání hesla uživatele root. Jakmile zadáte přihlašovací údaje k databázi, dostanete se na výzvu klienta mysql. Chcete-li uzamknout
order
, zadejte následující příkaz tabulce vcustomer
databáze (koncové;
je vyžadován pro příkazy MySQL):1 2 3
USE customer; LOCK TABLES order READ; FLUSH TABLES;
-
Nyní můžeme zahájit operaci zálohování. Chcete-li vytvořit zálohu jedné tabulky pomocí klienta MySQL, budete muset být přihlášeni do svého MySQL DBMS. Pokud nejste aktuálně přihlášeni, můžete se přihlásit pomocí následujícího příkazu:
mysql -u root -p -h localhost
Budete vyzváni k zadání hesla. Jakmile zadáte správné heslo a dostanete se na výzvu klienta MySQL, můžete použít
SELECT * INTO OUTFILE
prohlášení. Syntaxe tohoto příkazu vypadá následovně:1
SELECT * INTO OUTFILE 'file_name' FROM tbl_name;
V tomto příkladu vytvoříme zálohu dat z
order
tabulkycustomer
databáze. Vydáním následujícího příkazu zahájíte proces zálohování (koncové;
je vyžadován pro příkazy MySQL):1 2 3 4 5
USE customer; LOCK TABLES order READ; FLUSH TABLES; SELECT * INTO OUTFILE 'customerOrderBackup.sql' FROM order; UNLOCK TABLES;
customerOrderBackup.sql
bude vytvořen v příslušném datovém podadresáři v datovém adresáři MySQL. Datový adresář MySQL je běžně/var/lib/mysql/
. V tomto příkladuOUTFILE
bude/var/lib/mysql/customer/customerOrderBackup.sql
. Umístění tohoto adresáře a souboru se však může v jednotlivých distribucích Linuxu lišit. Pokud nemůžete najít záložní soubor, můžete jej vyhledat pomocí následujícího příkazu:find / -name customerOrderBackup.sql
-
Jakmile dokončíte operaci zálohování, budete chtít odemknout tabulky pomocí následujícího příkazu v klientovi MySQL. Tím se databáze vrátí do normálního provozu. Přihlaste se ke klientovi MySQL pomocí prvního příkazu, pokud právě nejste přihlášeni, a poté zadejte druhý příkaz:
mysql -uroot -p -h localhost
1
UNLOCK TABLES;
Od tohoto okamžiku můžete pokračovat v používání databáze jako obvykle.
Úvahy o efektivní strategii zálohování
Vytváření záloh vaší databáze MySQL by mělo být pravidelnou a plánovanou úlohou. Můžete zvážit naplánování pravidelných záloh pomocí cron
, mysqldump
a/nebo mail
. Další informace o cronu naleznete v naší dokumentaci. Implementace řešení automatického zálohování může pomoci minimalizovat prostoje v situaci obnovy po havárii.
Při zálohování databází se nemusíte přihlašovat jako root. Uživatel MySQL se čtením (např. SELECT
) je možné použít jak mysqldump
a mysql
(např. klient MySQL) nástroje pro vytváření záloh, jak je popsáno níže. V rámci běžné praxe doporučujeme nepoužívat root
MySQL kdykoli je to možné, abyste minimalizovali bezpečnostní rizika.
Možná budete chtít zvážit přírůstkové zálohy jako součást dlouhodobého plánu zálohování databáze. I když zde tento proces není popsán, doporučujeme, abyste zvážili zdroj informací o metodách zálohování databáze MySQL.
Obnovení celého DBMS ze zálohy
Záloha, kterou nelze obnovit, má minimální hodnotu. Doporučujeme zálohy pravidelně testovat, abyste se ujistili, že je lze obnovit v případě, že budete možná potřebovat obnovit ze záloh. Při použití obnovy záloh vaší databáze MySQL závisí metoda, kterou použijete, na metodě, kterou jste použili k vytvoření příslušné zálohy.
Možnost 1:Obnovení celého DBMS pomocí klienta MySQL a záloh vytvořených mysqldump
Před zahájením procesu obnovy tato část předpokládá, že váš systém používá nově nainstalovanou verzi MySQL bez jakýchkoli existujících databází nebo tabulek. Pokud již máte databáze a tabulky v databázi MySQL DBMS, proveďte zálohu, než budete pokračovat, protože tento proces přepíše aktuální data MySQL.
Celý svůj DBMS můžete snadno obnovit pomocí mysql
příkaz. Syntaxe tohoto bude vypadat takto:
mysql -u [username] -p [password] < backupFile.sql
V tomto případě jednoduše obnovujeme celý DBMS. Příkaz bude vypadat následovně:
mysql -u root -p < 1266861650-backup-all.sql
Budete vyzváni k zadání hesla uživatele root MySQL. Po zadání správných přihlašovacích údajů začne proces obnovy. Protože tento proces obnovuje celý DBMS, může to trvat od několika sekund po mnoho hodin.
Možnost 2:Obnovení celého DBMS pomocí datových souborů MySQL zkopírovaných přímo z Data Directory MySQL
Před zahájením procesu obnovy tato část předpokládá, že váš systém používá nově nainstalovanou verzi MySQL bez jakýchkoli existujících databází nebo tabulek. Pokud již máte databáze a tabulky v databázi MySQL DBMS, proveďte zálohu, než budete pokračovat, protože tento proces přepíše aktuální data MySQL.
-
Pokud máte úplnou zálohu datového adresáře MySQL (obvykle
/var/lib/mysql
), můžete jej obnovit z příkazového řádku. Chcete-li zajistit úspěšnou obnovu, musíte nejprve zastavit démona serveru MySQL a odstranit aktuální data v datovém adresáři MySQL./etc/init.d/mysql stop rm -R /var/lib/mysql/*
-
V následujícím příkladu je záloha datového adresáře MySQL umístěna v
/opt/database/backup-1266872202
adresář. Pokud jste při zálohování datového adresáře DBMS vytvořili tarball datového adresáře, budete muset před kopírováním extrahovat soubory z tarballu pomocí následujících příkazů:cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/ cd /var/lib/mysql tar xzvf mysqlBackup-1266872202.tar.gz
-
Než budeme moci restartovat proces databáze MySQL, musíme se ujistit, že jsou správně nastavena oprávnění na
/var/lib/mysql/
adresář. V tomto příkladu předpokládáme, že démon serveru MySQL běží jako uživatelmysql
se skupinoumysql
. Chcete-li změnit oprávnění k datovému adresáři, zadejte následující příkaz:chown -R mysql:mysql /var/lib/mysql
-
Změňte
mysql:mysql
části tohoto příkazu, pokud vaše instance MySQL běží s různými uživatelskými a skupinovými oprávněními. Tvar tohoto argumentu je[user]:[group]
. Nakonec můžeme spustit démona serveru MySQL pomocí následujícího příkazu:/etc/init.d/mysql start
Pokud se zobrazí chyba podobná následující:
/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Budete muset najít starý
debian-sys-maint
uživatelské heslo v/etc/mysql/debian.cnf
a poté změňte novýdebian-sys-maint
uživatelské heslo k němu. Staré heslo můžete zobrazit pomocícat
:cat /etc/mysql/debian.cnf | grep password
Zkopírujte (nebo si zapamatujte) heslo. Pak budete muset změnit nový
debian-sys-maint
uživatelské heslo. Můžete to udělat tak, že se přihlásíte jako uživatel root MySQL a vydáte následující příkaz (kdeje heslo starého debian-sys-maint
uživatel):1
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
-
Poté budete muset restartovat MySQL pomocí následujícího příkazu:
/etc/init.d/mysql restart
Po úspěšném spuštění serveru MySQL budete chtít otestovat svůj MySQL DBMS a zajistit, aby byly všechny databáze a tabulky správně obnoveny. Doporučujeme také, abyste provedli audit protokolů, zda neobsahují potenciální chyby. V některých případech se MySQL může úspěšně spustit i přes chyby databáze.
Obnovení jedné databáze ze zálohy
V případech, kdy jste vytvořili zálohu pouze pro jednu databázi nebo potřebujete obnovit pouze jednu databázi, je proces obnovy poněkud odlišný.
Před zahájením procesu obnovy tato část předpokládá, že váš systém používá nově nainstalovanou verzi MySQL bez jakýchkoli existujících databází nebo tabulek. Pokud již máte databáze a tabulky v databázi MySQL DBMS, proveďte zálohu, než budete pokračovat, protože tento proces přepíše aktuální data MySQL.
-
Chcete-li obnovit jednu databázi pomocí
mysql
nejprve připravte cílovou databázi. Přihlaste se ke svému (novému) databázovému serveru MySQL pomocí klienta MySQL:mysql -u root -p -h localhost
-
Budete vyzváni k zadání hesla uživatele root MySQL. Po zadání správných pověření musíte vytvořit cílovou databázi. V tomto případě
customer
databáze bude obnovena:1
CREATE DATABASE customer;
-
Stejně jako u všech příkazů MySQL nevynechávejte poslední středník (např.
;
) na závěr každého příkazu. V závislosti na vašem nasazení možná budete muset vytvořit nového uživatele MySQL nebo znovu vytvořit předchozího uživatele s přístupem k nově vytvořené databázi. Příkaz pro vytvoření nového uživatele MySQL má následující podobu:1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
V dalším příkladu vytvoříme uživatele s názvem
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nyní dáme
customeradmin
oprávnění pro přístup kcustomer
databáze. Příkaz pro udělení oprávnění k databázi pro konkrétního uživatele má následující podobu:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
-
Pro účely následujícího příkladu uvedeme
customeradmin
plný přístup kcustomer
databáze. V klientovi MySQL zadejte následující příkaz:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Možná budete muset zadat různá udělení přístupu v závislosti na požadavcích vašeho nasazení. Prostudujte si oficiální dokumentaci prohlášení GRANT MySQL. Po vytvoření cílové databáze a uživatele MySQL můžete klienta MySQL zavřít následujícím příkazem:
quit
-
Nyní můžete použít
mysql
příkaz k obnovení souboru SQL. Tvar tohoto příkazu se podobá následujícímu:mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
V následujícím příkladu obnovíme customer
databázi ze záložního souboru SQL s názvem customerBackup.sql
(zvláštní pozornost věnujte <
symbol v tomto příkazu):
mysql -u root -p -h localhost customer < customerBackup.sql
Budete vyzváni k zadání hesla uživatele root MySQL. Po zadání správných přihlašovacích údajů začne proces obnovy. Doba trvání této operace závisí na zatížení vašeho systému a velikosti databáze, kterou obnovujete. Může to být dokončeno za několik sekund nebo to může trvat mnoho hodin.
Obnovení jedné tabulky ze zálohy
Možnost 1:Obnovení jedné tabulky pomocí MySQL a záloh vytvořených mysqldump
-
Před zahájením procesu obnovy předpokládáme, že vaše instance MySQL již má existující databázi, která může přijmout tabulku, kterou chcete obnovit. Pokud vaše instance MySQL nemá požadovanou databázi, budeme ji muset před pokračováním vytvořit. Nejprve se přihlaste do své instance MySQL pomocí následujícího příkazu:
mysql -u root -p -h localhost
-
Budete vyzváni k zadání hesla uživatele root MySQL. Po zadání správných pověření musíte vytvořit cílovou databázi. Pro účely tohoto příkladu vytvoříme
customer
databáze.1
CREATE DATABASE customer;
Poté ukončete
mysql
výzva:quit
Pokud již požadovanou databázi máte, můžete výše uvedený krok bezpečně přeskočit. Chcete-li pokračovat v obnově tabulky, zadejte příkaz v následujícím tvaru:
mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql
-
V následujícím příkladu obnovíme
order
tabulky do stávajícíhocustomer
databázi ze záložního souboru SQL s názvemcustomerOrderBackup.sql
. Buďte velmi opatrní při použití<
operátor v následujícím příkazu:mysql -u root -p -h localhost customer < customerOrderBackup.sql
Budete vyzváni k zadání hesla uživatele root MySQL. Po zadání správných přihlašovacích údajů začne proces obnovy. Doba trvání této operace závisí na zatížení vašeho systému a velikosti tabulky, kterou obnovujete. Může to být dokončeno za několik sekund nebo to může trvat mnoho hodin.
Možnost 2:Obnovení jedné tabulky pomocí klienta MySQL a příkaz INFILE pro zálohy vytvořené pomocí OUTFILE
-
Před zahájením procesu obnovy předpokládáme, že vaše instance MySQL již má existující databázi, která může přijmout tabulku, kterou chcete obnovit. Pokud vaše instance MySQL nemá požadovanou databázi, budeme ji muset před pokračováním vytvořit. Nejprve se přihlaste do své instance MySQL pomocí následujícího příkazu:
mysql -u root -p -h localhost
-
Budete vyzváni k zadání hesla uživatele root MySQL. Po zadání správných pověření musíte vytvořit cílovou databázi. Pro účely tohoto příkladu vytvoříme
customer
databáze.1
CREATE DATABASE customer;
Poté ukončete
mysql
výzva:quit
-
Záloha dat použitá v tomto případě byla vytvořena pomocí
SELECT * INTO OUTFILE 'backupFile.sql' FROM tableName
příkaz. Tento typ zálohy uchovává pouze samotná data, takže strukturu tabulky je třeba znovu vytvořit. Chcete-li obnovit jednu tabulku z klienta MySQL, musíte nejprve připravit cílovou databázi a tabulku. Přihlaste se do své (nové) instance MySQL pomocí klienta MySQL:mysql -u root -p -h localhost
-
Budete vyzváni k zadání hesla uživatele root MySQL. Jakmile jsou zadána správná pověření, musíte vytvořit cílovou databázi. V tomto případě vytvoříme
customer
databáze. Vydejte následující prohlášení:1
CREATE DATABASE customer;
-
Pamatujte, že středníky (např.
;
) po každém prohlášení jsou povinné. Nyní musíte vytvořit cílovou tabulku se správnou strukturou. Datové typy polí tabulky musí odpovídat datovým typům tabulky, ze které záloha pochází. V tomto příkladu obnovímeorder
tabulkycustomer
databáze.order
obsahuje 2 pole tabulka,custNum
s datovým typemINT
aorderName
s datovým typemVARCHAR(20)
; struktura vaší tabulky se bude lišit:1 2
USE customer; CREATE TABLE order (custNum INT, orderName VARCHAR(20));
-
V závislosti na vašem nasazení možná budete muset vytvořit nového uživatele MySQL nebo znovu vytvořit předchozího uživatele s přístupem k nově vytvořené databázi. Příkaz pro vytvoření nového uživatele MySQL má následující podobu:
1
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
-
V dalším příkladu vytvoříme uživatele s názvem
customeradmin
:1
CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';
-
Nyní dáme
customeradmin
oprávnění pro přístup kcustomer
databáze. Příkaz pro udělení oprávnění k databázi pro konkrétního uživatele má následující podobu:1
GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'
Pro účely následujícího příkladu uvedeme
customeradmin
plný přístup kcustomer
databáze. V klientovi MySQL zadejte následující příkaz:1
GRANT ALL ON customer.* TO 'customeradmin'@'localhost';
-
Možná budete muset zadat různá udělení přístupu v závislosti na požadavcích vašeho nasazení. Prostudujte si oficiální dokumentaci prohlášení GRANT MySQL. Po vytvoření tabulky a uživatele můžeme importovat data zálohy ze záložního souboru pomocí
LOAD DATA
příkaz. Syntaxe je podobná následující:1
LOAD DATA INFILE '[filename]' INTO TABLE [tableName];
V následujícím příkladu obnovíme data z tabulky ze souboru s názvem
customerOrderBackup.sql
. Když je klientovi MySQL zadána cesta a název souboru zaINFILE
, hledá tento soubor v datovém adresáři MySQL. Pokud je název souborucustomerOrderBackup.sql
was given, the path would be/var/lib/mysql/customerOrderBackup.sql
. Ensure that the file you are trying to restore from exists, especially if MySQL generatesFile not found
errors. -
To import the data from the
customerOrderBackup.sql
file located in/var/lib/mysql/
, issue the following command:1
LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;
This process can take anywhere from a few seconds to many hours depending on the size of your table. The duration of this operation depends on your system’s load and the size of the table that you are restoring. It may complete in a few seconds, or it may take many hours. After you have verified that your data was imported successfully, you can log out:
quit
Další informace
Další informace o tomto tématu můžete získat v následujících zdrojích. Přestože jsou poskytovány v naději, že budou užitečné, vezměte prosím na vědomí, že nemůžeme ručit za přesnost nebo aktuálnost externě hostovaných materiálů.
- The Official MySQL Web Site
- MySQL Database Backup Methods page
- mysqldump Manual Page
- Schedule Tasks With Cron
- MySQL’s Grant Statement, Official Documentation