Mysql
 sql >> база данни >  >> RDS >> Mysql

Най-добри практики на mysqldump:Част 2 – Ръководство за миграции

Във втората и последна част от нашите най-добри практики за mysqldump ще говорим за това как да се справяме с миграцията и импортирането на съхранени програмни обекти и изгледи от вашата MySQL база данни. За да прочетете повече за предпоставките за успешна операция за изхвърляне и възстановяване на големи MySQL бази данни, вижте първата част от тази поредица от 2 части от блогове.

Импортиране на вашите съхранени процедури, функции и тригери

По подразбиране mysqldump импортира изгледи и задействания. Той обаче не импортира процедури, функции и събития. За импортиране на процедури и функции, --routines трябва да се посочи опцията, а за импортиране на събития --events опцията трябва да бъде посочена.

1. Импортиране на тригери

Mysqldump ще се опита да изхвърли всички тригери във вашата база данни по подразбиране. За да можете да изхвърляте triggers на таблица , трябва да имате TRIGGER привилегия за масата. Ако потребителят на dump няма тази привилегия, тригерите ще бъдат пропуснати и mysqldump няма да изведе грешка. Така че не се изненадвайте, ако не видите никакви задействания, импортирани във вашата дестинационна база данни.

2. Импортиране на събития

За да импортирате събития, трябва да посочите --events опция, докато извиквате помощната програма mysqldump. Тази опция изисква EVENT привилегии за тези бази данни. Отново, mysqldump безшумно ще пропусне събития, ако потребителят на dump няма тези привилегии, дори ако сте посочили опция –event при извикване на mysqldump.

3. Импортиране на функции и съхранена процедура

За да импортирате рутинни програми, трябва да посочите --routines опция, докато извиквате помощната програма mysqldump. Тази опция изисква global select привилегии. Дори в този случай mysqldump тихо ще пропусне функции и процедури, ако потребителят на dump няма тези привилегии, дори ако сте посочили --routines опция при извикване на mysqldump.

3.1 Импортиране на недетерминирани функции

Съхранена програма, която променя данните, се нарича недетерминирана, ако не дава повторяеми резултати. Примерна функция rand(). Особено предизвикателство е да се използват такива функции в репликирани настройки, тъй като те могат да доведат до различни данни за източник и реплика. За да контролира подобни възможности, MySQL налага определени ограничения върху създаването на функции, ако двоичните регистрационни файлове са разрешени.

По подразбиране за CREATE FUNCTION изявление, което трябва да бъде прието, поне едно от DETERMINISTIC , NO SQL , или READS SQL DATA трябва да се посочи изрично. В противен случай възниква грешка:

ГРЕШКА 1418 (HY000) на ред 181:Тази функция няма ДЕТЕРМИНИСТИЧЕН, НЯМА SQL или ЧЕТЕ SQL ДАННИ в своята декларация и двоичното регистриране е активирано (може би * можете* да използвате по-малко безопасния log_bin_trust_funable)

Така че, ако вашата функция не е декларирана като детерминирана в източника и двоичното регистриране е разрешено на вашата дестинация, ще видите горната грешка по време на възстановяването на дъмп. Следователно е важно предварително да разберете детерминистичния характер на вашите функции. Ако сте сигурни, че вашите функции са детерминирани, трябва да включите log_bin_trust_function_creators конфигурация на вашата дестинация преди операцията по възстановяване. Когато е активиран, MySQL позволява създаването на такива функции, дори когато двоичното регистриране е активирано.

Най-добра практика за mysqldump:Част 2 – Ръководство за миграция Щракнете за туит

4. SQL SECURITY характеристика на съхранените подпрограми и изгледи.

MySQL позволява SQL SECURITY контекст, който трябва да бъде посочен при създаване на програми или изгледи на магазина. SQL SECURITY характеристиката може да бъде зададена като DEFINER или INVOKER . Ако SQL_SECURITY контекстът е DEFINER , рутината се изпълнява с помощта на привилегиите на акаунта, посочен в подпрограмата DEFINER клауза. Ако контекстът е INVOKER , рутина се изпълнява, използвайки привилегиите на потребителя, който я извиква. Стойността по подразбиране е DEFINER .

Ако възстановявате съхранени подпрограми или изгледи, трябва да се уверите, че дефиниращият потребителски акаунт съществува във вашата дестинационна база данни с подходящи разрешения. В противен случай ще срещнете неуспехи по време на възстановяване.

Нека демонстрираме това с пример, свързан с изгледи.

Да предположим, че имате изгледи V1 и V2, както е показано по-долу:

CREATE definer=admin@'%' VIEW mydb.V1 КАТО SELECT * FROM solution_table;CREATE definer=admin@'%' VIEW mydb.V2 AS SELECT * FROM V1, където num1=10;

Обърнете внимание, че изгледите се изхвърлят по подразбиране от mysqldump и ако нямате потребителския 'admin' на вашата дестинация, ще срещнете следната грешка по време на операцията по възстановяване:

Командата неуспешна с грешка - ГРЕШКА 1449 (HY000) на ред 206 във файл:'/mysql_data/mysqldump/sqldump_1582457155758.sql':Потребителят, посочен като дефинер ('admin'@'%'), не съществува. /предварително> 

Обърнете внимание, че не е достатъчно само да се гарантира, че потребителят съществува, но потребителят трябва да има подходящи привилегии, за да изпълнява изгледите. Например, ако потребителят admin@'%' съществува на местоназначението, но няма SELECT привилегии в базата данни mydb, ще видите съобщение за грешка:

'/mysql_data/mysqldump/sqldump_1582456858033.sql':Изгледът 'mydb.V2' препраща към невалидни таблици или колони или функция(и) или дефинитор/извикване на изглед нямат права за използването им. 

Интересувате ли се от напълно управлявано MySQL решение?

За да научите повече за това как доставчик на DBaaS като ScaleGrid може да ви помогне да управлявате вашите MySQL бази данни, вижте нашата страница MySQL. Вижте как ScaleGrid може да ви позволи да се съсредоточите повече върху разработването на вашия продукт и по-малко върху управлението на бази данни.

Резюме

В тази поредица от блогове от 2 части разгледахме важни предпоставки, с които трябва да се справите, за да осигурите успешна миграция на вашите данни и съхранени програми. ScaleGrid MySQL хостинг се справя с тези насоки, за да осигури гладко изживяване, докато импортирате вашите данни в платформата ScaleGrid. Моля, споделете с нас своя опит и най-добри практики, които приемате за мигриране на данни на MySQL!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Поддръжка на естествен JSON в MYSQL 5.7:какви са предимствата и недостатъците на типа данни JSON в MYSQL?

  2. MySql получава записи или данни ежедневно, седмично, месечно и годишно

  3. Как мога да върна изхода на централната таблица в MySQL?

  4. Предупреждение:mysql_connect():[2002] Няма такъв файл или директория (опитва се да се свърже чрез unix:///tmp/mysql.sock) в

  5. Получаване на времева разлика между две времена в PHP