14

我有一个带有 MyISAM 表的 Mysql 主从复制。所有更新都在主设备上完成,选择在主设备或从设备上完成。

当我们进行某些更新时,似乎我们可能需要手动锁定一些表。虽然此写锁定在表上,但锁定的表上不会发生任何选择。但是关于奴隶呢?锁是否传播出去?

假设我有 table_A 和 table_B。我在 master 上的 table_A 和 table_B 上启动锁定并开始执行更新。这时候没有其他连接可以从master上读取table_A和table_B?但是,如果此时另一个连接试图从从站读取表,他们可以这样做吗?

4

2 回答 2

3

MySQL 复制的所有内容都可以在二进制日志中找到。

您可以运行以下命令来查看详细信息。

show global variables like 'log_bin%';

log_bin_basename 将告诉您带有基本文件名的二进制日志的路径。

并运行

show binary logs

查找服务器上当前存在的二进制文件。

mysqlbinlog您可以通过将命令与文件名一起使用或show binlog events ...从 MySQL CLI运行来检查写入文件的实际命令 。

另外,检查您使用的是什么 binlog_format。

基本上 - 表的锁定不会直接传播到从属服务器,但当时,乳清将执行执行的更新,如果需要,它们将执行更新表的锁定。

于 2015-04-26T16:08:19.577 回答
1

据我所知,写锁不会传播到二进制日志中,您可以通过快速测试并查看二进制日志来验证这一点。如果您还想避免 master 上的问题并且由于某种原因无法迁移到 InnoDB,请考虑将 GET_LOCK() 之类的东西集成到您的应用程序中,而不是完全锁定表。MyISAM 在并发方面相当不确定。

于 2015-05-03T01:24:37.940 回答