MySQL复制 - 单个与多个数据库,许多数据库或许多表

问题描述 投票:0回答:2

我在Mysql 5.6.27上进行复制时遇到了一些问题。

最好是在多个数据库之间拆分所有表,或者更好的方法是使用内部有很多表的单个数据库(从复制角度来看)还是没关系?

例如,如果我将表格(+ - 100个表格,其中一些表格+ - 50万条记录)分开,例如它会有用吗? 5个数据库还是没关系?

我的主人也有几个内核,每个内核都大量使用(每个内核使用+ - 80%的资源)但是在Slave上我有类似的硬件,但只使用了1个内核(+ -80%),其他的则使用只有10%。

非常感谢任何建议问候,S

mysql replication master-slave master slave
2个回答
1
投票

这在大多数情况下并不重要。

MySQL默认运行一个工作线程来重放复制事件。因此,在这种模式下,它永远不会使用多个CPU内核。

可以选择启用多个工作线程,并且可以在这些线程中并行重放每个数据库中的更改。但是线程可以独立运行,因此如果要求数据库彼此同步更新,则不应启用此选项。如果您正在尝试决定是否将表存储在不同的数据库中,我认为它们在逻辑上彼此相关,并且它们应保持同步更新。

出于某些其他原因,您可以选择将表存储在单独的数据库中:

  • 使备份和还原每个数据库中的所有表更容易
  • 可以更轻松地为每个数据库中的所有表分配权限
  • 允许相同的表名存在于多个数据库中

但是对于查询性能或复制,使用多个数据库没有其他好处。它只是表和约束的一种命名空间。


0
投票

关于CPU注释,这实际上是正常的(取决于您设置的复制类型)。通常,复制的不是您使用的“查询”,而只是更改。例如,在您运行的主服务器上:

update users set city = 'New York' limit 100

Master做的是找到100行,然后进行更新......这需要CPU。主人(真正简化)发送给奴隶:

Change Row ID: 123 city = 'New York' Change Row ID: 124 city = 'New York' Change Row ID: 125 city = 'New York' 等......等等......

所以Slave使用相当少的CPU,因为它没有“找到”需要更新的行,而是只更新Master用键指示的行。

© www.soinside.com 2019 - 2024. All rights reserved.