MySQL slave присоединяет имя производственной базы данных к новым представлениям - PullRequest
2 голосов
/ 11 августа 2011

У меня есть ведомая база данных, имя которой отличается от ее производственного аналога.(Мы будем называть prod database и slave database_slave.)

Когда я запускаю mysqldump из slave (что я делаю для создания копий dev), к двум представлениям базы данных добавляется имя базы данныхим.Я не могу использовать файл дампа для создания другой копии, не редактируя ее вручную.

Если я запускаю тот же mysqldump из рабочей копии, все получается чистым.Так что по какой-то причине раб создал эти два представления неправильно.(Остальные четыре представления были созданы до того, как была установлена ​​репликация, что, как мне кажется, объясняет разницу. Я подтвердил, что репликация синхронизирована.)

Фрагмент mysqldump от ведомого устройства:

/*!50001 VIEW `database_slave`.`view_company` AS select `database`.`company`.`id` AS `id`,
         `database`.`company`.`name` AS `name`,`database`.`company`.`state` AS `state`,

Тот же фрагмент mysqldump, но с производства (красивый и чистый):

/*!50001 VIEW `view_company` AS select `company`.`id` AS `id`,
         `company`.`name` AS `name`,`company`.`state` AS `state`,

Можно ли это исправить, не выпуская дамп из prod в slave?

Мы используем replicate-rewrite-db опция.

Ответы [ 2 ]

1 голос
/ 11 августа 2011

При настройке репликации подчиненные базы данных (и все объекты базы данных) должны вызываться так же, как и на главном сервере.

0 голосов
/ 02 ноября 2011

В случае, если кто-нибудь придет искать это, я узнал, что представления mysql создаются с неповрежденным именем базы данных.Поэтому при использовании опции replicate-rewrite-db для присвоения ведомому устройству другого имени представления НЕ будут работать правильно.

Единственный способ, который я нашел, чтобы обойти это, - избегать использования флага replicate-rewrite-db.

...