Mysql
 sql >> Database >  >> RDS >> Mysql

Best practice di mysqldump:Parte 2 – Guida alle migrazioni

Nella seconda e ultima parte delle nostre best practices di mysqldump parleremo di come gestire la migrazione e l'importazione per gli oggetti di programma memorizzati e le viste dal tuo database MySQL. Per ulteriori informazioni sui prerequisiti per un'operazione di dump e ripristino di successo per database MySQL di grandi dimensioni, dai un'occhiata alla prima parte di questa serie di blog in 2 parti.

Importazione di stored procedure, funzioni e trigger

Per impostazione predefinita, mysqldump importa viste e trigger. Tuttavia non importa procedure, funzioni ed eventi. Per importare procedure e funzioni, le --routines deve essere specificata l'opzione e, per importare eventi, il --events l'opzione deve essere specificata.

1. Importazione di trigger

Mysqldump tenterà di eseguire il dump di tutti i trigger nel database per impostazione predefinita. Per poter scaricare i triggers di una tabella , devi avere il TRIGGER privilegio per la tavola. Se l'utente dump non dispone di questo privilegio, i trigger verranno ignorati e mysqldump non genererà alcun errore. Quindi non sorprenderti se non vedi alcun trigger importato nel tuo database di destinazione.

2. Importazione di eventi

Per importare eventi, devi specificare --events opzione mentre si richiama l'utilità mysqldump. Questa opzione richiede il EVENT privilegi per quei database. Anche in questo caso, mysqldump salterà silenziosamente gli eventi se l'utente dump non dispone di questi privilegi, anche se hai specificato l'opzione –event durante il richiamo di mysqldump.

3. Importazione di funzioni e stored procedure

Per importare le routine, devi specificare --routines opzione mentre si richiama l'utilità mysqldump. Questa opzione richiede la global select privilegi. Anche in questo caso, mysqldump salterà silenziosamente funzioni e procedure se l'utente dump non ha questi privilegi, anche se hai specificato --routines opzione quando si richiama mysqldump.

3.1 Importazione di funzioni non deterministiche

Un programma memorizzato che modifica i dati è detto non deterministico se non produce risultati ripetibili. Esempio di funzione rand(). È particolarmente difficile utilizzare tali funzioni in configurazioni replicate, poiché possono generare dati diversi sull'origine e sulla replica. Per controllare tali possibilità, MySQL impone alcune restrizioni alla creazione di funzioni se i log binari sono abilitati.

Per impostazione predefinita, per un CREATE FUNCTION dichiarazione da accettare, almeno una tra DETERMINISTIC , NO SQL o READS SQL DATA deve essere specificato in modo esplicito. In caso contrario si verifica un errore:

ERROR 1418 (HY000) at line 181: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_funable)

Quindi, se la tua funzione non è dichiarata come deterministica sull'origine e la registrazione binaria è abilitata sulla tua destinazione, vedrai l'errore sopra riportato durante il ripristino del dump. Quindi è importante capire in anticipo la natura deterministica delle tue funzioni. Se sei sicuro che le tue funzioni siano deterministiche, devi attivare log_bin_trust_function_creators configurazione sulla destinazione prima dell'operazione di ripristino. Se abilitato, MySQL consente la creazione di tali funzioni anche quando è abilitato il logging binario.

Best practice per mysqldump:Parte 2 - Guida alla migrazioneFai clic per twittare

4. SQL SECURITY caratteristica delle routine e delle viste memorizzate.

MySQL consente una SQL SECURITY contesto da specificare durante la creazione dei programmi o viste del negozio. Il SQL SECURITY la caratteristica può essere specificata come DEFINER o INVOKER . Se il SQL_SECURITY il contesto è DEFINER , la routine viene eseguita utilizzando i privilegi dell'account denominato nella routine DEFINER clausola. Se il contesto è INVOKER , la routine viene eseguita utilizzando i privilegi dell'utente che la invoca. Il valore predefinito è DEFINER .

Se stai ripristinando le routine o le viste memorizzate, devi assicurarti che l'account utente del definitore esista sul tuo database di destinazione con le autorizzazioni appropriate. In caso contrario, si verificheranno errori durante il ripristino.

Dimostriamolo con un esempio relativo alle visualizzazioni.

Supponiamo che le viste V1 e V2 siano definite come di seguito:

CREATE definer=admin@'%' VIEW mydb.V1 AS SELECT * FROM solution_table;
CREATE definer=admin@'%' VIEW mydb.V2 AS SELECT * FROM V1 where num1=10;

Nota che le viste vengono scaricate per impostazione predefinita da mysqldump e se non hai l'utente 'admin' sulla tua destinazione, riscontrerai il seguente errore durante l'operazione di ripristino:

Command failed with error - ERROR 1449 (HY000) at line 206 in file: '/mysql_data/mysqldump/sqldump_1582457155758.sql': The user specified as a definer ('admin'@'%') does not exist.

Si noti che non è solo sufficiente per assicurarsi che l'utente esista, ma che l'utente deve disporre dei privilegi appropriati per eseguire le viste. Ad esempio se l'utente admin@'%' esiste sulla destinazione, ma non ha SELECT privilegi sul database mydb, vedrai un messaggio di errore:

'/mysql_data/mysqldump/sqldump_1582456858033.sql':View 'mydb.V2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them.

Interessato a una soluzione MySQL completamente gestita?

Per saperne di più su come un provider DBaaS come ScaleGrid può aiutarti a gestire i tuoi database MySQL, dai un'occhiata alla nostra pagina MySQL. Scopri come ScaleGrid ti consente di concentrarti maggiormente sullo sviluppo del tuo prodotto e meno sulla gestione dei database.

Riepilogo

In questa serie di blog in 2 parti, abbiamo trattato importanti prerequisiti che devi gestire per garantire la corretta migrazione dei tuoi dati e dei programmi archiviati. L'hosting ScaleGrid MySQL gestisce queste linee guida per fornire un'esperienza fluida durante l'importazione dei dati nella piattaforma ScaleGrid. Condividi con noi la tua esperienza e le best practice che adotti per le migrazioni dei dati MySQL!