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

Doporučené postupy mysqldump:Část 2 – Průvodce migrací

Ve druhé a poslední části našich doporučených postupů mysqldump budeme hovořit o tom, jak zvládnout migraci a import uložených programových objektů a pohledů z vaší databáze MySQL. Chcete-li si přečíst více o předpokladech pro úspěšnou operaci výpisu a obnovení pro velké databáze MySQL, podívejte se na první část této dvoudílné série blogů.

Import uložených procedur, funkcí a spouštěčů

Ve výchozím nastavení mysqldump importuje pohledy a spouštěče. Neimportuje však procedury, funkce a události. Chcete-li importovat procedury a funkce, --routines měla by být zadána volba a pro import událostí --events měla by být specifikována.

1. Import spouštěčů

Mysqldump se ve výchozím nastavení pokusí vypsat všechny spouštěče ve vaší databázi. Aby bylo možné vypsat triggers tabulky , musíte mít TRIGGER výsada pro stůl. Pokud uživatel výpisu nemá toto oprávnění, spouštěče budou přeskočeny a mysqldump nevyvolá žádnou chybu. Nebuďte tedy překvapeni, když nevidíte žádné spouštěče importované do vaší cílové databáze.

2. Import událostí

Chcete-li importovat události, musíte zadat --events možnost při vyvolání obslužného programu mysqldump. Tato možnost vyžaduje EVENT oprávnění pro tyto databáze. Znovu, mysqldump bude tiše přeskakovat události, pokud uživatel výpisu nemá tato oprávnění, i když jste zadali možnost –event při vyvolání mysqldump.

3. Import funkcí a uložené procedury

Chcete-li importovat rutiny, musíte zadat --routines možnost při vyvolání obslužného programu mysqldump. Tato možnost vyžaduje global select privilegia. I v tomto případě mysqldump tiše přeskočí funkce a procedury, pokud uživatel výpisu nemá tato oprávnění, i když jste zadali --routines možnost při vyvolání mysqldump.

3.1 Import nedeterministických funkcí

Uložený program, který upravuje data, se nazývá nedeterministický, pokud neposkytuje opakovatelné výsledky. Příklad funkce rand(). Je obzvláště náročné používat takové funkce v replikovaných nastaveních, protože mohou vést k různým datům o zdroji a replice. Aby bylo možné tyto možnosti ovládat, ukládá MySQL určitá omezení na vytváření funkcí, pokud jsou povoleny binární protokoly.

Ve výchozím nastavení pro CREATE FUNCTION prohlášení, které má být přijato, alespoň jeden z DETERMINISTIC , NO SQL nebo READS SQL DATA musí být výslovně specifikováno. Jinak dojde k chybě:

CHYBA 1418 (HY000) na řádku 181:Tato funkce nemá ve své deklaraci žádná z DETERMINISTICKÝCH, ŽÁDNÁ SQL nebo ČTENÁ DATA SQL a je povoleno binární protokolování (možná* budete chtít použít méně bezpečný log_bin_trust_funable)

Pokud tedy vaše funkce není ve zdroji deklarována jako deterministická a ve vašem cíli je povoleno binární protokolování, během obnovy výpisu se zobrazí výše uvedená chyba. Proto je důležité předem pochopit deterministickou povahu vašich funkcí. Pokud jste si jisti, že jsou vaše funkce deterministické, musíte zapnout log_bin_trust_function_creators konfiguraci v cíli před operací obnovy. Je-li povoleno, MySQL umožňuje vytváření takových funkcí, i když je povoleno binární protokolování.

Nejlepší postup pro mysqldump:Část 2 – Průvodce migrací Kliknutím na Tweet

4. SQL SECURITY charakteristika uložených rutin a pohledů.

MySQL umožňuje SQL SECURITY kontext, který bude specifikován při vytváření programů nebo pohledů úložiště. SQL SECURITY charakteristika může být specifikována jako DEFINER nebo INVOKER . Pokud SQL_SECURITY kontext je DEFINER , rutina se spustí s použitím oprávnění účtu uvedeného v rutině DEFINER doložka. Pokud je kontext INVOKER , se rutina spustí s použitím oprávnění uživatele, který ji vyvolává. Výchozí hodnota je DEFINER .

Pokud obnovujete uložené rutiny nebo pohledy, musíte zajistit, aby v cílové databázi existoval uživatelský účet definujícího s příslušnými oprávněními. V opačném případě se během obnovy setkáte se selháním.

Ukažme si to na příkladu souvisejícím se zobrazeními.

Předpokládejme, že máte pohledy V1 a V2 definované takto:

CREATE definer=admin@'%' ZOBRAZIT mydb.V1 JAKO VÝBĚR * Z tabulky_řešení;CREATE definer=admin@'%' ZOBRAZIT mydb.V2 JAKO VÝBĚR * Z V1 kde num1=10;

Všimněte si, že pohledy jsou ve výchozím nastavení pomocí mysqldump vypisovány a pokud v cílovém umístění nemáte uživatele 'admin', během operace obnovy se setkáte s níže uvedenou chybou:

Příkaz se nezdařil s chybou – ERROR 1449 (HY000) na řádku 206 v souboru:'/mysql_data/mysqldump/sqldump_1582457155758.sql':Uživatel zadaný jako definující ('admin'@'%') neexistuje. 

Všimněte si, že nestačí pouze zajistit existenci uživatele, ale že uživatel potřebuje mít příslušná oprávnění ke spouštění pohledů. Například pokud uživatel admin@'%' existuje v cíli, ale nemá SELECT oprávnění k databázi mydb, zobrazí se chybová zpráva:

'/mysql_data/mysqldump/sqldump_1582456858033.sql':Zobrazení 'mydb.V2' odkazuje na neplatné tabulky nebo sloupce nebo funkce nebo definující/vyvolavatel pohledu nemá práva je používat. 

Máte zájem o plně spravované řešení MySQL?

Chcete-li se dozvědět více o tom, jak vám poskytovatel DBaaS, jako je ScaleGrid, může pomoci spravovat vaše databáze MySQL, podívejte se na naši stránku MySQL. Podívejte se, jak vám ScaleGrid umožní soustředit se více na vývoj vašeho produktu a méně na správu databází.

Shrnutí

V této dvoudílné sérii blogů jsme se zabývali důležitými předpoklady, které musíte zvládnout, abyste zajistili úspěšnou migraci vašich dat a uložených programů. Hosting ScaleGrid MySQL zpracovává tyto pokyny, aby zajistil hladký průběh importu vašich dat na platformu ScaleGrid. Podělte se s námi o své zkušenosti a osvědčené postupy, které jste přijali pro migraci dat MySQL!


  1. Jak navrhnout systém připravený na lokalizaci

  2. Jaké jsou 10 nejlepších funkcí Microsoft Access?

  3. Jak převést řetězec na číselnou hodnotu v PostgreSQL

  4. Získání výjimky java.sql.SQLException:Operace není povolena po uzavření sady ResultSet