9

我目前在一家拥有运行 mysql/php 的网站的公司工作(所有表也使用 MISAM 表类型)。

我们想实现复制,但我在 mysql 文档和 Internet 上的其他地方读到,这将在写入二进制日志(从属 dbs 最终从中读取)时锁定表。

这些锁是否会在写入量很大的实时站点上引起问题?另外,有没有一种方法可以在不必锁定表的情况下启用复制?

4

3 回答 3

6

如果将表类型更改为 innodb,则会使用行级锁定。此外,您的复制将更加稳定,因为更新将是事务性的。MyISAM 复制是一个长期的痛苦。

确保您的服务器版本匹配,并且始终确保在关闭从属服务器之前关闭主服务器。您可以在关闭从属服务器后立即重新启动主服务器,但您必须将其关闭。

此外,请确保为 InnoDB 使用适当的自动扩展选项。而且,当您使用它时,您可能希望从 float 和 double 迁移到“十进制”(这意味着 mysql 5.1)。这将为您节省一些复制方面的麻烦。

这可能比你要求的多一点。享受。

Ps,是的,myisam 锁可能会导致问题。此外,innodb 比 myisam 慢,除非 myisam 阻止大量选择。

于 2008-10-23T06:45:23.370 回答
4

以我的经验 DBAing 一个写入繁重的站点,编写二进制日志不会增加master 上的锁定或性能问题。如果您想对其进行基准测试,只需打开二进制日志即可。我真的不认为表被锁定以将查询写入二进制日志。

但是,从属设备上的表锁定是另一回事。复制是串行的:每个查询在从属运行下一个查询之前运行完成。如此长的更新将导致复制暂时落后。如果您的应用程序打算使用复制进行横向扩展,它需要知道如何适应这种情况。

于 2008-10-28T05:44:51.750 回答
0

myisam 表类型的解决方案并不是“更好”。但是,您可以忍受它。

您能做的最好的事情是确保您的从属服务器和主服务器在相同的硬件上运行(FPU 差异会导致复制错误),以及确保您在 MySQL 服务器上运行相同的版本号。

以下链接回答您的问题。具体来说,如果没有删除操作,MyISAM 表中的锁阻塞写入的机会较小。因此,其中没有删除孔的表将在复制设置中执行得更快。

http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html

您可以通过在计划的停机时间(尤其是在大量删除之后)定期进行 DBA 导出/导入来减轻“漏洞”的影响。此外,请确保您的从数据库不会在主数据库仍在运行的情况下关闭。这将为您节省很多很多问题。

于 2008-10-24T02:34:17.447 回答