Подтвердить что ты не робот

Как я могу использовать mysqldump для репликации представлений между учетными записями?

Я использую mysqldump для репликации базы данных между учетными записями на конкретной машине. Все работает просто отлично, за исключением случаев, когда мы переходим к нашим определенным представлениям. Поскольку дамп содержит строку, подобную следующей...

/*!50013 DEFINER=`user_a`@`localhost` SQL SECURITY DEFINER */

... при загрузке дампа в mysql на user_b мы получаем сообщение об ошибке:

ERROR 1227 (42000) at line 657: Access denied; you need the SUPER privilege for this operation

Излишне говорить, что у меня нет привилегии SUPER для этого экземпляра mysql. Есть ли способ убедить mysqldump сбрасывать представления в пользовательском агностическом режиме? Я не могу найти что-либо в руководстве по этому вопросу. Должен ли я фактически анализировать файл дампа для замены имен пользователей? Или я что-то упускаю?

4b9b3361

Ответ 1

та же проблема. Я решил так:

mysqldump -uuser1 -ppassword1 database1 > backup.sql

sed '/^\/\*\!50013 DEFINER/d' backup.sql > backup_without_50013.sql

mysql -u user2 -ppassword2 -D database2 < backup_without_50013.sql

Интересной является команда sed, которая здесь удаляет все строки, начинающиеся с /*! 50013.

Heidy

Ответ 2

Вам нужно будет обработать файл резервной копии и изменить DEFINER:

DEFINER = user_a @localhost

Мне нравится менять его на:

DEFINER = CURRENT_USER

Затем он будет автоматически связан с учетной записью, которая загружает его.

Ответ 3

Предложения SQL SECURITY определяют, какую учетную запись MySQL использовать при проверке прав доступа для представления (как вы, вероятно, выяснили).

При создании представления вы можете определить несколько параметров безопасности для этого вида. Вы можете прочитать здесь здесь, но по существу доступ по умолчанию ограничен "определителем" представления, то есть пользователем, который его создал.

Ответ 4

Запустите mysqldump с опцией "--skip-triggers"