У меня есть подчиненная база данных, которая носит другое имя, чем ее производственный аналог. (Мы используем replicate-rewrite-db
вариант.)
Когда я запускаю mysqldump с ведомого устройства (что я делаю для создания копий для разработчиков), к двум представлениям базы данных прикреплено имя базы данных. Я не могу использовать файл дампа для создания другой копии, не редактируя ее вручную.
Если я запустил тот же 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`,
Можно это исправить без сброса с прода на раб?
Корень проблемы, с которой я столкнулся, был из-за replicate-rewrite-db
вариант в использовании. Репликация сохраняет имя базы данных внутри представлений, поэтому репликация в базу данных с другим именем вызывает эту проблему.
С тех пор мы отказались от использования replicate-rewrite-db
вариант, определив по этой и другим причинам, что replicate-rewrite-db
это JBYCDMYS вариант (просто потому, что вы можете, не означает, что вы должны).
Похоже, вы столкнулись с ошибкой mysql: http://bugs.mysql.com/bug.php?id=40345 Рассмотрите возможность обновления mysql до последней версии 5.1.X.