我有一个从属数据库,它的名称与生产数据库的名称不同。(我们正在使用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`,
我可以修复这个问题而不用从生产设备转储到从设备吗?
答案1
看起来你遇到了 mysql 错误:http://bugs.mysql.com/bug.php?id=40345 考虑将 mysql 升级到最新的 5.1.X 版本。
答案2
我遇到的问题的根源在于replicate-rewrite-db
使用的选项。复制会保留视图中的数据库名称,因此复制到具有不同名称的数据库会导致此问题。
我们已经取消了使用该replicate-rewrite-db
选项,因为出于这个和其他原因,我们确定这replicate-rewrite-db
是一个杰比CDMYS选项(仅仅因为你可以,并不意味着你应该这样做)。