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í.
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.
|
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!