sql >> Databáze >  >> RDS >> Mysql

Jak zálohovat databáze MySQL z příkazového řádku v Linuxu

Současný technologický vývoj každého aspektu života učinil data vzácnějšími než zlato a stříbro. Pokud dokážete získávat, rozšiřovat a chránit data, jste krůček od toho, abyste byli datovým bohem. Přesto velké společnosti, které kontrolují aspekty života, jako je elektronický obchod, paliva, doprava a potraviny, spoléhají na ochranu dat, aby se ochránily před nevyhnutelným kolapsem.

Právě teď je ztráta dat jako ztráta životního pojištění. Systém správy databází, který používáte, by tedy měl mít orientaci zálohování. Pokud jste správce MySQL nebo uživatel zabývající se rostoucími daty, měli byste zvážit implementaci více než častého plánu automatizace zálohování. Důvod? Můžete se stát obětí hacknutí dat nebo dokonce svá data náhodou pozměnit.

Takové okolnosti mohou vést k neúprosnému narušení dat, zvláště když nemáte plán zálohování databáze. Pokud jste zkušeným uživatelem nebo správcem MySQL, tento článek je zde pro vyřešení vašich starostí se zálohováním databáze. Splníme dva cíle. Nejprve porozumíte implementaci exportu databází prostřednictvím „mysqldump“. Nakonec se dotkneme toho, jak může použití „crontab“ celý tento proces zjednodušit pomocí automatizace.

Připravte adresář pro zálohu dat

Vzhledem k tomu, že Linux nedává uživateli doporučení pro umístění zálohy dat MySQL, je na vás, abyste si vybrali vhodné umístění zálohy. Například v tomto tutoriálu budeme pracovat pod záložním adresářem ve „/var/www_my_backups/“. Tento přístup zvažujeme pouze proto, abychom porozuměli mechanismům zálohování dat MySQL. V ideálním případě se doporučuje, aby všechny důležité zálohy dat probíhaly na offside serveru.

Upřednostňovaný záložní adresář můžete vytvořit na místním počítači pomocí příkazu terminálu podobného následujícímu:

$ sudo mkdir /var/www_my_backups/

Ujistěte se, že zálohovací stroj provozovaný na Linuxu, který používáte, vám udělil oprávnění root nebo sudo oprávnění. Pokud nemáte přístup vlastníka k vytvořenému záložnímu adresáři, budete čelit chybám oprávnění při spouštění testů mysqldump. Následující příkaz by měl vypsat aktuálně aktivního systémového uživatele a podrobnosti, pokud máte oprávnění k vlastnictví vytvořené záložní složky.

$ sudo chown $(whoami):$(whoami) /var/www_my_backups/

Nástroj klienta mysqldump

Tento nástroj MySQL provádí logické zálohy. Výsledkem je několik sad příkazů SQL, které při spuštění znovu vytvoří data původní databázové tabulky a definice objektů. Kromě toho je jeden nebo několik výpisů databáze MySQL zálohováno nebo přeneseno na sekundární databázový server SQL.

Standardní příkaz mysqldump je reprezentován následující syntaxí příkazu.

$ mysqldump -u [uživatelské_jméno_mysql] -p[heslo_mysql] [název_databáze_mysql]> /cesta/k/[název_souboru_mysql_dump].sql
  • -u [uživatelské_jméno_mysql]: představuje privilegovaného uživatele databáze MySQL. Tento uživatel by měl být schopen provádět operace výpisu z databáze.
  • -p[heslo_mysql]: představuje uživatelské heslo databáze MySQL. NEPŘIDÁVEJTE mezeru mezi „-p“ a „[heslo_mysql]“.
  • [mysql_dump_file_name]: představuje název vaší databáze MySQL.
  • >: ukazuje na cíl výstupního výpisu
  • /path/to/[mysql_dump_file_name].sql: ukazuje na umístění cesty k přidruženému souboru výpisu. Pokud chcete, můžete tomuto souboru výpisu [mysql_dump_file_name] přiřadit vlastní název.

Než budeme pokračovat s tímto návodem, je tu něco, co stojí za zmínku o „-p[mysql_password]“. I když se tento průvodce článkem zaměří na spojení jeho použití s ​​několika příklady výpisů MySQL, měli byste se vyhnout jeho přímému použití při práci se skutečnými výpisy záloh MySQL, zejména ve sdílené síti.

Spuštěný výpis může být unesen pomocí dvourozměrného příkazu, jako je „ps axe“, který odhalí příslušné uživatelské jméno a heslo databáze. Použití umístění „~/.my.cnf“ k uložení hesla databáze MySQL však činí použití „-p[heslo_mysql]“ v uvedeném příkazu dump zbytečným. Pokud se tento příkaz dump provádí prostřednictvím úlohy cron, měla by volba příkazu „–defaults-extra-file=/cesta/k/.my.cnf“ nasměrovat příkaz mysqldump na umístění hesla databáze.

Některé příklady zálohování databáze MySQL

Zvažme několik uživatelských scénářů, kde můžeme použít příkaz mysqldump k zálohování dat databáze MySQL.

Zálohování všech databází

Použití volby příkazu „–all-databases“ v příkazu mysqldump se postará o všechny výpisy databáze MySQL na vašem systému Linux. Například následující příkaz ukazuje, jak vypsat všechny vaše databáze MySQL do již existujícího souboru „/var/www_my_backups/“. Uživatel tohoto systému Linux by měl být root nebo mít oprávnění sudo.

V našem případě a pro vaše pochopení jsme náš soubor výpisu pojmenovali „all-databases.sql“, ale můžete použít jakýkoli jiný název podle svých preferencí. Protože máme co do činění se všemi databázemi, je nutné být root uživatelem účtu MySQL.

$ mysqldump -u root -p[heslo_mysql] --all-databases> /var/www_my_backups/all-databases.sql

Zálohování jedné databáze

Pokud je pro vás důležitá pouze jedna databáze MySQL, vytvoření její zálohy pomocí příkazu mysqldump vyžaduje nahrazení volby příkazu „[mysql_database]“ skutečným názvem. Název souboru výpisu může mít název této databáze „[mysql_database].sql“, takže bude snadné ji později dohledat a obnovit. Pokud si přejete, můžete také použít jiný vlastní název souboru výpisu.

Tento příklad příkazu je implementován pomocí uživatele root, ale jakýkoli jiný uživatel s přístupem k cílové databázi je životaschopnou možností.

$ mysqldump -u root -p[heslo_mysql] [název_databáze mysql]> /var/www_my_backups/[název_databáze mysql].sql

Zálohování více databází

Možná máte konkrétní výběr databází MySQL, které chcete zálohovat. V tomto případě se možnost příkazu „[mysql_database_name]“ objeví více než jednou a každý případ je spojen s názvem databáze, kterou chcete zálohovat. Nezapomeňte umístit názvy těchto databází v příkazu mysqldump. Soubor výpisu „[mysql_database_name].sql“ by měl být také spojen s jedinečným názvem, který si zapamatujete.

$ mysqldump -u root -p[heslo_mysql] [název_databáze_mysql] [název_databáze_mysql]> /var/www_my_backups/[názvy_mysql_databáze_1_2].sql

Zálohování jedné tabulky

Pokud je vaše zálohovací rutina pouze za konkrétní databázovou tabulkou, vytvoření její zálohy by mělo mít jak název databáze, tak název databázové tabulky jako volby příkazu mysqldump. Souboru výpisu můžete dát stejný název jako cílová databázová tabulka, např. [název_tabulky_mysql_database].sql.

$ mysqldump -u root -p[heslo_mysql] [název_databáze mysql] [název_tabulky_mysql_databáze]> /var/www_my_backups/[název_tabulky_mysql_databases].sql

Zálohování více tabulek

Chcete-li zálohovat mnoho konkrétních databázových tabulek MySQL, zmínka o všech názvech vybraných databázových tabulek by měla následovat za názvem databáze hostující tyto tabulky. Cílový soubor výpisu může mít název jako [mysql_database_tables_1_2_names].sql

$ mysqldump -u root -p[heslo_mysql] [název_databáze_mysql] [název_tabulky_mysql_databáze] [název_tabulky_mysql_databáze]> /var/www_my_backups/[název_databáze_mysql_1_2_pre>. 

Zálohování vzdálené databáze (databází)

Tento příklad implementace je také přímočarý. Příkaz výpisu databáze MySQL bude muset obsahovat volbu příkazu „-h“ následovanou názvem hostitele vzdáleného počítače nebo přidruženou IP adresou. Poté by měly následovat všechny ostatní obvyklé syntaxe příkazů pro zálohování databáze.

$ mysqldump -h [ip_or_hostname_remote_computer] -u root -p[heslo_mysql] [název_databáze mysql]> /var/www_my_backups/[název_databáze_vzdáleného_mysql].sql

Tento příkaz mysqldump můžete upravit tak, aby se vypořádal s jinými případy zálohování databáze, které již byly probrány, např. zálohy MySQL s více databázemi nebo tabulkami.

Zálohování databáze spojené s kompresemi

Pokud chcete přidružit zálohy dat ke kompresím, „| Volba příkazu gzip -c>” mysqldump může být použita k přenosu výstupu gzip.

$ mysqldump -u root -p[heslo_mysql] [název_databáze_mysql] | gzip -c> /var/www_my_backups/[název_mysql_database_name].sql.gz

Pokud je vaše databáze MySQL obrovská a chcete sledovat průběh komprese, vždy zvažte implementaci možnosti podrobného popisu, jak je znázorněno v následujícím příkladu.

$ mysqldump -u root -p[heslo_mysql] [název_databáze_mysql] | gzip -c --verbose> /var/www_my_backups/[mysql_database_name].sql.gz

Obnova databáze MySQL

Jakmile budete hotovi se zálohou databáze MySQL, co dál? Jak se dostanete k datům, která jste tak pečlivě zabezpečili? Obnova dat vyžaduje dodržení následující syntaxe obnovení MySQL.

$ mysql -u [uživatelské_jméno_mysql] -p[heslo_mysql] [název_databáze_mysql]  

Jak jste si možná nevšimli, jediný rozdíl mezi tímto příkazem pro obnovu databáze a příkazem pro zálohování databáze je v tom, že místo možnosti „mysqldump“ používáme možnost „mysql“ a místo možnosti „>“ možnost „<“.

Automatizace zálohování MySQL

Operační systém Linux je vybaven několika užitečnými službami, které jsou pro správce databáze, jako je ta pod MySQL RDBMS, k nezaplacení. Jednou z těchto služeb je služba cron. Je efektivní při plánování automatických příkazů. Jakmile jsou tyto příkazy vytvořeny, jsou přiděleny do tabulky cron crontab. K crontab se dostanete pomocí následujícího příkazu.

$ sudo crontab -e

Pokud se zobrazí výzva, tento příkaz může chtít přiřadit jeho provedení k textovému editoru a vybrat nano textový editor.

Otevře se soubor s názvem „/tmp/crontab.LVY6A9/crontab“. V dolní části tohoto souboru crontab zadejte životaschopný plán cron spolu s příslušným příkazem výpisu MySQL. Níže uvedený příklad implementuje použití komprese gzip pro denní zálohování databáze. Někdy můžete mít naplánováno zálohování velkých souborů .sql. Použití gzip zmenší takové soubory na rozumnou velikost před uložením zálohy. Pomáhá se správou záložní paměti.

00 03 * * * mysqldump -u root -p[heslo_mysql] [název_databáze_mysql] | gzip -c> /var/www_my_backups/[název_mysql_database_name].sql.gz

Volba příkazu „00 03 ***“ může být interpretována následujícím způsobem. Každých 24 hodin po 3:00 se provede následující příkaz mysqldump k zálohování databáze. Záložní soubor databáze, který aktuálně existoval před zahájením tohoto procesu zálohování, bude přepsán. Ve vašem případě nemusíte čekat po 24 hodinách, abyste byli svědky automatizace zálohování vaší databáze v akci prostřednictvím crontab.

Možnost „00 03 ***“ v souboru crontab můžete upravit na něco jako „02 00 ***“ a za pouhé dvě minuty by se měl proces zálohování samo inicializovat. Alternativně, pokud je váš čas 22:30, úprava souboru pomocí „34 22 ***“ inicializuje proces zálohování databáze ve 22:34. Nezapomeňte uložit (Ctrl+X) tento soubor crontab před jeho zavřením, aby se tento příkaz stal spustitelným.

Po uplynutí vámi nastavených minut by měla být úloha cron provedena. Poté vypište vytvořenou záložní složku na vašem terminálu a vytvořený záložní soubor .sql.gz by měl být přítomen.

$ ls -l /var/www_my_backups/

Výsledný výstup by měl být podobný následujícímu:

-rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name].sql.gz

Pokud máte problémy s nalezením záložního souboru .sql.gz MySQL, zkontrolujte čas crontab nebo celý příkaz. Může být chyba v syntaxi nebo něco chybí. Případně může systémový cron log ukazovat na místo, kde došlo k problému.

$ sudo grep CRON /var/log/syslog 

Jakmile potvrdíte, že vše funguje správně, nezapomeňte resetovat položku crontab na preferovaný plán databáze.

Ukládání hesel k databázi MySQL pomocí my.cnf  

Již jsme zmínili nevýhody volby „-p[heslo_mysql]“ v příkazu mysqldump, zejména ve sdílené síti. Musíme prodiskutovat, jak implementovat ukládání hesel do souboru „~/.my.cnf“. Uživatelé používající cron k automatizaci zálohování svých databází budou muset pochopit implementaci volby příkazu „–defaults-extra-file=/path/to/.my.cnf“.

Úprava souboru my.cnf

Tento skrytý soubor obsahuje domovský adresář vašeho systému Linux. Přímá systémová cesta k němu je „/home/vaše_uživatelské_jméno/.my.cnf“. K otevření tohoto souboru použijte textový editor nano. Volba „~“ ukazuje na domovský adresář.

$ sudo nano ~/.my.cnf

Upravte tento otevřený soubor podle následující syntaxe, abyste úspěšně uložili heslo k databázi MySQL. Část „YOUR_DB_PASS“ je jedinou položkou, kterou musíte změnit pomocí vašeho skutečného hesla databáze. Zadejte tyto informace do dolní části souboru a uložte je.

[mysqldump] 
heslo=VÁŠ_DB_PASS

Pomocí Ctrl+X uložte tento soubor. Tento soubor „my.cnf“ také potřebuje určitá nastavení oprávnění. Implementujte následující příkaz:

$ sudo chmod 600 ~/.my.cnf

Nyní je čas vidět znovuzrození našeho nového příkazu mysqldump s odstraněnou možností příkazu „-p[mysql_password]“.

$ mysqldump -u root [název_databáze_mysql] | gzip -c> /var/www_my_backups/[název_mysql_database_name].sql.gz 

Jak vidíte, nic jsme nepřidali. Zdá se, že jediná věc, kterou jsme odstranili, je možnost příkazu „-p[heslo_mysql]“.

Crontab a –defaults-extrs-file

Pro uživatele, kteří preferují automatické zálohování databáze, budete muset získat heslo databáze v souboru „~/.my.cnf“ pomocí volby příkazu „–defaults-extra-file“. Tento přístup usnadňuje příkazu mysqldump, když potřebuje odkazovat na autentičnost uživatele databáze a hesla. Musíte být konkrétní ohledně cesty k souboru my.cnf a nepoužít pouze symbol „~“. Zvažte následující implementaci uvnitř souboru crontab:

30 22 * ​​* *   mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [název_databáze_mysql] | gzip -c> /var/www_my_backups/[název_mysql_database_name].sql.gz 

V tomto příkladu se crontab spouští každý den ve 22:30 za účelem vytvoření zálohované gzip komprese databáze MySQL.

Poznámka na závěr

Tento článek se zabýval mechanismy zálohování lokální databáze o záložním adresáři „/var/www_my_backups“. Protože nyní rozumíte tomu, jak proces zálohování probíhá, měli byste škálovat více a začít přemýšlet o zálohách mimo pracoviště. Praktičtější přístup je však prostřednictvím konfigurace přístupu SFTP, která odkazuje na tento záložní adresář „/var/www_my_backups“.

S takovou konfigurací je možné vytvořit úlohu SFTP cron prostřednictvím vzdáleného serveru pro načtení kopie těchto místně uložených databázových souborů pro uložení pojištění v noci a denně.

Na konci tohoto úžasného průvodce článkem jste nyní hrdým mistrem scénářů zálohování databáze MySQL, obnovy zálohování databáze a automatizace zálohování databáze. Nyní byste měli důvěřovat a mít jistotu v používání úloh cron k plánování a řízení automatizace zálohování databáze MySQL. Plány automatizace nemusí být denní, ale mohou být také týdenní a měsíční.


  1. Ormlite nebo sqlite Který z nich je dobrý pro Android?

  2. Trvale nastavit cestu schématu Postgresql

  3. 10 tipů pro Microsoft Access pro vytváření vybraných dotazů

  4. Transactionscope vyvolání výjimky tato platforma nepodporuje distribuované transakce při otevírání objektu připojení