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

Jak zálohovat šifrovanou databázi pomocí serveru Percona pro MySQL 8.0

Je téměř zaručeno, že v určitém okamžiku dojde k přerušení výroby. Víme to, takže plánujeme zálohy, vytváříme záložní databáze pro obnovu, převádíme jednotlivé instance na clustery.

Připouštíme-li potřebu správného scénáře obnovy, musíme analyzovat možnou časovou osu katastrofy a scénáře selhání a implementovat kroky k uvedení vaší databáze do provozu. Spuštění plánovaného výpadku může pomoci připravit, diagnostikovat a zotavit se z dalšího. Aby organizace zmírnily dopad prostojů, potřebují vhodný plán obnovy, který by zahrnoval všechny faktory potřebné k uvedení služby do života.

Správa zálohování není tak mírná jako pouhé naplánování úlohy zálohování. Je třeba vzít v úvahu mnoho faktorů, jako je uchovávání, ukládání, ověřování a také to, zda jsou zálohy, které pořizujete, fyzické nebo logické a co lze snadno přehlédnout zabezpečení.

Mnoho organizací mění svůj přístup k zálohování a snaží se mít kombinaci záloh obrazu serveru (snímků), logických a fyzických záloh uložených na více místech. Je to proto, abychom se vyhnuli místním nebo regionálním katastrofám, které by vymazaly naše databáze a zálohy uložené ve stejném datovém centru.

Chceme to zabezpečit. Data a zálohy by měly být šifrovány. Ale existuje mnoho důsledků, když jsou obě možnosti na místě. V tomto článku se podíváme na postupy zálohování, když se zabýváme šifrovanými databázemi.

Šifrování v klidu pro Percona Server pro MySQL 8.0

Od verze MySQL 5.7.11 začala komunitní verze MySQL podporovat šifrování tabulkového prostoru InnoDB. Říká se tomu Transparent Tablespace Encryption nebo také Encryption-at-Rest.

Hlavním rozdílem oproti podnikové verzi je způsob uložení klíčů – klíče nejsou umístěny v zabezpečeném trezoru, což je vyžadováno pro dodržování předpisů. Totéž platí pro Percona Server, od verze 5.7.11 je možné šifrovat tabulkový prostor InnoDB. V Percona Server 8.0 byla výrazně rozšířena podpora pro šifrování binárních protokolů. Přidána verze 8.0 

(podle dokumentu k vydání Percona 8.0):

  • Dočasné šifrování souborů
  • InnoDB Undo Tablespace Encryption
  • InnoDB System Tablespace Encryption (InnoDB System Tablespace Encryption)
  • default_table_encryption  =OFF/ON (General Tablespace Encryption)
  • table_encryption_privilege_check =OFF/ON (Ověření nastavení šifrování)
  • InnoDB redo log encryption (pouze pro šifrování hlavního klíče) (Redo Log Encryption)
  • Šifrování sloučených souborů InnoDB (ověření nastavení šifrování)
  • Percona Parallel doublewrite buffer šifrování (InnoDB Tablespace Encryption)

Pro zájemce o migraci z verze MySQL Enterprise na Percona –  Je také možné integrovat se serverem Hashicorp Vault prostřednictvím pluginu keyring_vault, který odpovídá funkcím dostupným v edici Oracle MySQL Enterprise.

Šifrování dat v klidu vyžaduje plugin pro svazek klíčů. Zde jsou dvě možnosti:

  • keyring_file – plochý soubor se šifrovacím klíčem
  • Plugin Keyring Vault  – služba

Jak povolit šifrování tabulkového prostoru

Chcete-li povolit šifrování, spusťte databázi pomocí možnosti --early-plugin-load:

buď ručně:

$ mysqld --early-plugin-load="keyring_file=keyring_file.so"

nebo úpravou konfiguračního souboru:

[mysqld]

early-plugin-load=keyring_file.so

Po spuštění Percona Server 8.0 lze šifrovat dva typy tabulkových prostorů. Obecný tabulkový prostor a systémový tabulkový prostor. SYS tablespace je řízen parametrem innodb_sys_tablespace_encrypt. Ve výchozím nastavení není tabulkový prostor sys zašifrován, a pokud jej již máte, není možné jej převést do zašifrovaného stavu, je třeba vytvořit novou instanci (spusťte instanci s volbou --bootstrap).

Obecný tabulkový prostor podporuje šifrování buď všech tabulek v tabulkovém prostoru, nebo žádné. Není možné spustit šifrování ve smíšeném režimu. Chcete-li vytvořit tabulkový prostor se šifrováním, použijte příznak ENCRYPTION='Y/N'.

Příklad:

mysql> CREATE TABLESPACE severalnines ADD DATAFILE 'severalnines.ibd' ENCRYPTION='Y';

Zálohování šifrované databáze

Když přidáváte šifrované tabulkové prostory, je nutné zahrnout soubor keyring do příkazu xtrabackup. Chcete-li to provést, musíte zadat cestu k souboru svazku klíčů jako hodnotu volby --keyring-file-data.

$ xtrabackup --backup --target-dir=/u01/mysql/data/backup/ --user=root --keyring-file-data=/u01/secure_location/keyring_file

Ujistěte se, že jste soubor klíčenek uložili na bezpečné místo. Také se ujistěte, že máte vždy zálohu souboru. Xtrabackup nezkopíruje soubor svazku klíčů do záložního adresáře. Chcete-li připravit zálohu, musíte si sami vytvořit kopii souboru svazku klíčů.

Příprava zálohy

Jakmile máme záložní soubor, měli bychom jej připravit na obnovu. Zde je také potřeba zadat klíč-file-data.

$ xtrabackup --prepare --target-dir=/u01/mysql/data/backup/ --keyring-file-data=/u01/secure_location/keyring_file

Záloha je nyní připravena a lze ji obnovit pomocí volby --copy-back. V případě, že se klíčenka otočila, budete muset obnovit klíčenku (která byla použita k vytvoření a přípravě zálohy).

Abychom mohli připravit zálohu xtrabackup, budeme potřebovat přístup ke svazku klíčů. Xtrabackup nekomunikuje přímo se serverem MySQL a během přípravy nečte výchozí konfigurační soubor my.cnf, zadejte nastavení svazku klíčů pomocí příkazového řádku:

$ xtrabackup --prepare --target-dir=/data/backup --keyring-vault-config=/etc/vault.cnf

Záloha je nyní připravena a lze ji obnovit pomocí volby --copy-back:

$ xtrabackup --copy-back --target-dir=/u01/backup/ --datadir=/u01/mysql/data/

Provádění přírůstkových záloh

Proces pořizování přírůstkových záloh pomocí šifrování tabulkového prostoru InnoDB je podobný pořizování stejných přírůstkových záloh s nešifrovaným tabulkovým prostorem.

Chcete-li vytvořit přírůstkovou zálohu, začněte s plnou zálohou. Binární soubor xtrabackup zapíše soubor s názvem xtrabackup_checkpoints do cílového adresáře zálohy. Tento soubor obsahuje řádek zobrazující to_lsn, což je LSN databáze na konci zálohy.

Nejprve musíte vytvořit plnou zálohu pomocí následujícího příkazu:

$ xtrabackup --backup --target-dir=/data/backups/base --keyring-file-data=/var/lib/mysql-keyring/keyring

Nyní, když máte plnou zálohu, můžete na ní vytvořit přírůstkovou zálohu. Použijte například následující příkaz:

$ xtrabackup --backup --target-dir=/data/backups/inc1 \

--incremental-basedir=/data/backups/base \

--keyring-file-data=/var/lib/mysql-keyring/keyring

Adresář /data/backups/inc1/ by nyní měl obsahovat rozdílové soubory, jako například ibdata1.delta a test/table1.ibd.delta.

Význam by měl být zřejmý. Nyní je možné použít tento adresář jako základ pro další přírůstkovou zálohu:

$ xtrabackup --backup --target-dir=/data/backups/inc2 \

--incremental-basedir=/data/backups/inc1 \

--keyring-file-data=/var/lib/mysql-keyring/keyring

Příprava přírůstkových záloh

Proces zálohování databáze je zatím podobný běžnému zálohování, s výjimkou příznaku, kde jsme zadali umístění souboru klíčenky.

Bohužel krok --prepare pro přírůstkové zálohy není stejný jako pro normální zálohy.

V normálních zálohách se provádějí dva typy operací, aby byla databáze konzistentní:potvrzené transakce se přehrají ze souboru protokolu s datovými soubory a nepotvrzené transakce se vrátí zpět. Při přípravě zálohy musíte přeskočit vrácení nepotvrzených transakcí, protože transakce, které nebyly v době zálohování potvrzeny, mohou probíhat a je pravděpodobné, že budou potvrzeny v další přírůstkové záloze. Měli byste použít možnost --apply-log-only, abyste zabránili fázi vrácení zpět.

Pokud nepoužijete možnost --apply-log-only, abyste zabránili fázi vrácení zpět, budou vaše přírůstkové zálohy k ničemu. Poté, co byly transakce vráceny zpět, nelze použít další přírůstkové zálohy.

Počínaje úplnou zálohou, kterou jste vytvořili, ji můžete připravit a poté na ni použít přírůstkové rozdíly. Připomeňme, že máte následující zálohy:

/data/backups/base

/data/backups/inc1

/data/backups/inc2

Chcete-li připravit základní zálohu, musíte spustit --připravit jako obvykle, ale zabránit fázi vrácení:

$ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --keyring-file-data=/var/lib/mysql-keyring/keyring

Chcete-li použít první přírůstkovou zálohu na plnou zálohu, měli byste použít následující příkaz:

$ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \

--incremental-dir=/data/backups/inc1 \

--keyring-file-data=/var/lib/mysql-keyring/keyring

pokud byl svazek klíčů otočen mezi základní a přírůstkovou zálohu, budete muset použít svazek klíčů, který se používal při pořízení první přírůstkové zálohy.

Příprava druhé přírůstkové zálohy je podobný proces

$ xtrabackup --prepare --target-dir=/data/backups/base \

--incremental-dir=/data/backups/inc2 \

--keyring-file-data=/var/lib/mysql-keyring/keyring

Poznámka; --apply-log-only by měl být použit při slučování všech přírůstků kromě posledního. To je důvod, proč předchozí řádek neobsahuje možnost --apply-log-only. I kdyby bylo v posledním kroku použito --apply-log-only, záloha by byla stále konzistentní, ale v takovém případě by server provedl fázi vrácení.
Posledním krokem je obnovení pomocí --copy-back volba. V případě, že byla klíčenka otočena, budete muset obnovit klíčenku, která byla použita k vytvoření a přípravě zálohy.

I když popsaná metoda obnovení funguje, vyžaduje přístup ke stejnému svazku klíčů, který používá server. Nemusí to být možné, pokud je záloha připravena na jiném serveru nebo mnohem později, když jsou klíče ve svazku klíčů vyčištěny, nebo v případě poruchy, kdy server trezoru svazku klíčů není vůbec dostupný.

Volba --transition-key= by měla být použita k tomu, aby xtrabackup mohl zpracovat zálohu bez přístupu k serveru úschovny klíčů. V tomto případě xtrabackup odvozuje šifrovací klíč AES ze zadané přístupové fráze a použije jej k šifrování klíčů tabulkových prostorů tabulkových prostorů, které jsou zálohovány.

Vytvoření zálohy s přístupovou frází

Následující příklad ukazuje, jak lze v tomto případě vytvořit zálohu:

$ xtrabackup --backup --user=root -p --target-dir=/data/backup \

--transition-key=MySecetKey

Obnovení zálohy pomocí vygenerovaného klíče

Při obnově zálohy budete muset vygenerovat nový hlavní klíč. Zde je příklad souboru keyring_file:

$ xtrabackup --copy-back --target-dir=/data/backup --datadir=/data/mysql \

--transition-key=MySecetKey --generate-new-master-key \

--keyring-file-data=/var/lib/mysql-keyring/keyring

V případě keyring_vault to bude vypadat takto:

$ xtrabackup --copy-back --target-dir=/data/backup --datadir=/data/mysql \

--transition-key=MySecetKey --generate-new-master-key \

--keyring-vault-config=/etc/vault.cnf

  1. Chyba PDB Unplug ORA-17528

  2. Oprava:„přední přesnost intervalu je příliš malá“ v databázi Oracle

  3. Data Analytics vs. Data Science:Jaký je rozdíl?

  4. Jak nainstalovat databázi Oracle na Windows