所以,我的问题很有趣:我们想从一台服务器迁移到另一台服务器。我们进行了主从复制,但我的老板提出了一次迁移一个数据库的想法。
因此他让我在新服务器上设置另一个 MySQL 实例,让从服务器几乎保持原样,并逐步将新实例设为新主服务器,一次一个数据库。这可行吗,也就是说,我可以将数据库“x”从旧主服务器转移到新主服务器,然后告诉从服务器从现在开始在新主服务器上同步“x”吗?
我读过这个旧帖子(Mysql 复制-每个数据库都有线程吗?) 当时这是不可能的。现在可以做到吗?
谢谢!
卢卡斯·布拉彻。
答案1
是的,你可以这样做。MySQL 的复制功能允许你指定要复制哪些模式[1],或不复制哪些模式,请查看 replicate_wild_do_table 参数。
但是,这样做也很愚蠢,因为每次迁移都需要一些停机时间以确保没有数据丢失,而且我也想不出不简单地复制所有数据库的好理由。
[1] 从属服务器仍将获取完整的 binlog,但仅执行与过滤器匹配的语句
答案2
你可以做这样的事,但却没有任何好处。
您不能做的是“告诉从服务器同步‘x’”。复制不是这样工作的。复制只是从您告诉它的位置开始重播主服务器上的事件。因此,您需要确保在一致的时间点从主服务器获取数据快照,并在开始复制之前将该数据复制到从服务器。
从主服务器到从服务器一次只处理一个数据库并没有什么实际优势。事实上,更加困难。
设置从属服务器的最简单方法是对主服务器进行完整备份,利用记录 binlog 位置,然后将该备份恢复到从属服务器,并从记录的 binlog 位置开始复制。
但让我们退一步来看看你真的尝试做:
您想要迁移到新的服务器,并让从属服务器一次成为一个数据库的“主服务器”。
这很简单。
这是你的复制:Master -> Slave
您将从属服务器设置为主服务器的完整副本,并复制更改以使它们保持同步。
从服务器现在成为主服务器意味着什么?这只意味着您告诉应用程序使用从服务器进行所有读写操作。就是这样。一旦设置了复制,就无需进行其他 mysql 更改。
将奴隶提升为主人是仅应用程序配置更改 (在您的情况下,您有一个主 mysql 服务器,其中一个从服务器进行复制。)
因此,如果您可以更改应用程序配置,以便对每个尝试使用的数据库使用不同的 mysql 数据库,那么您就可以一次迁移一个数据库。
简单的。
答案3
不可以——MySQL 复制是全有或全无的。您不能将一个 MySQL 服务器设置为两个独立主服务器的从属服务器。