Как я могу использовать mysqldump для репликации просмотров между учетными записями? - PullRequest
19 голосов
/ 30 сентября 2008

Я использую 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 сделать дампы представления независимыми от пользователя? Я не могу найти ничего в руководстве по этому вопросу. Должен ли я на самом деле анализировать дамп-файл, чтобы заменить имена пользователей? Или я что-то упустил?

Ответы [ 4 ]

27 голосов
/ 24 ноября 2008

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

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

12 голосов
/ 19 декабря 2009

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

DEFINER = user_a @ localhost

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

DEFINER = CURRENT_USER

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

2 голосов
/ 30 сентября 2008

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

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

0 голосов
/ 17 ноября 2009

Выполнить mysqldump с опцией "--skip-triggers"

...