如何跨多个服务器对 Mysql 进行分区?

Posted

技术标签:

【中文标题】如何跨多个服务器对 Mysql 进行分区?【英文标题】:How to partition Mysql across MULTIPLE SERVERS? 【发布时间】:2010-12-09 07:32:12 【问题描述】:

我知道水平分区...你可以创建很多表。

如何使用多台服务器做到这一点? 这将允许 mysql 进行扩展。

在 X 服务器上创建 X 表?

有没有人愿意解释一下,或者有一个很好的初学者教程(循序渐进)教你如何跨多个服务器进行分区?

【问题讨论】:

如果人们在点击“关闭”时留下评论就好了。恕我直言,这个问题非常适合 Stackoverlow。 【参考方案1】:

使用 MySQL,人们通常会执行所谓的基于应用程序的分片

简而言之,您将在多个数据库服务器上拥有相同的数据库结构。但它不会包含相同的数据。

例如:

Users 1 - 10000: server A
Users 10001 - 20000: server B

分片(当然)不是一种备份技术,它旨在跨集群分布读取和写入。

例如,用于分片的技术是 MySQL-Proxy。这不是 HScale 发明的,它或多或少是一个简单的 LUA 脚本,它将读取和写入分配到不同的后端服务器。 MySQL forge 上应该有很多例子。

另一个工具(基于 MySQL 代理)是SpockProxy。完全针对分片量身定制。他们还摆脱了 Lua,并致力于各种事情以使其比代理更快。到目前为止,我只测试了 SpockProxy,但从未在生产环境中运行过它。

现在除了这些代理之外,您还可以对自己进行分片。必需是主表,例如:

-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------

然后构建您对服务器的读写操作。不是很漂亮,但很管用。下一个障碍是让它变得更加容错。因此,例如,server1server2server3 每个都应该是一个小集群。

最后但并非最不重要的一点是,Digg 的IDDB 是另一个有趣的跨服务器分区数据和索引的方法。我不确定他们是否曾经发布过它的代码,但他们的博客文章详细介绍了它的作用。

如果这有帮助,请告诉我!

【讨论】:

在我什至不知道它叫什么或者我的其他选择是什么之前,这就是我最终要做的事情。我需要一个快速的解决方案,这是有道理的。所以我有一半的客户在一台服务器上,另一半在另一台服务器上。它的问题是现在很难获得所有数据放在一起的统计数据,或者编写一个可以管理两个服务器上的数据的管理站点。【参考方案2】:

但是您需要记住,如果您出于某些原因想要将此解决方案带到云上并使其成为多租户,那么上述配置可能会变得更具挑战性。想想这个——

    您登录系统并根据用户组织表选择数据库(数据库交换) 这将是您现在正在与它自己的奴隶交谈的新主表 但上述第 2 点现在也需要分片,因为您要确保向外扩展不会成为瓶颈。

所以现在的问题是,您可能需要考虑如何在主从类型的环境中进行这种分片,其中从属通常用于读取,而主用于写入。

干杯! 加里

【讨论】:

【参考方案3】:

这里是 HSCALE 0.1 公告中写的:

现在我们需要分开 巨大的桌子,但后来我们想要 将分区分布在多个 MySQL 服务器实例要有真实的 横向扩展。最难的部分 将处理交易 我们必须在哪里使用分布式 交易 (XA) 或不允许 涉及分区的事务 不同的主机...

看看这个项目:http://sourceforge.net/projects/hscale/也许它会适合你。

【讨论】:

以上是关于如何跨多个服务器对 Mysql 进行分区?的主要内容,如果未能解决你的问题,请参考以下文章

mysql表分区使用及详细介绍

MySQL数据库跨分区迁移

如何跨多个模式从表中删除分区?

MySQL对数据表已有表进行分区表

如何在同一台服务器上跨多个域维护 PHP 会话?

BigQuery - 跨多个表读取时选择分区键