复制从属锁定

时间:2012-06-05 16:03:13

标签: mysql locking replication

我有一个主要的mysql服务器和2个从属服务器作为备份。

其中一个奴隶已配备固态存储,因此被大量用于报告。

生成的一些数据需要一些时间(在某些情况下大约半小时到一小时)并且使用并生成分配数据(按照几个演出的顺序,这使我对使用事务犹豫不决)。报告表只是整个数据库的一小部分,因此完全关闭复制有点不可能。

手头的问题是生成数据时生成的报告显然是不完整和错误的。

  1. 在主服务器和报告服务器上锁定表的最佳方法是什么?
  2. 是否将“LOCK TABLES”语句复制到从属语句中,或者我最好的做法是在临时表中生成数据,然后在一个INSERT ... SELECT语句中将它们复制到最终表。

1 个答案:

答案 0 :(得分:2)

尝试以下

您可以尝试以下方法:

步骤01)在主人身上,运行此

FLUSH TABLES WITH READ LOCK; SELECT CONNECTION_ID(); SELECT SLEEP(300);

步骤02)SHOW SLAVE STATUS\G在两个从属(或仅报告从属)上

步骤03)重复步骤02直到

  • Relay_Log_Space停止更改
  • Relay_Log_Pos停止更改
  • Seconds_Behind_Master为0

此时,由于两个Slaves都没有收到任何要处理的新SQL,因此您可以在与主服务器相同的时间点上有效地冻结Slaves上的MySQL

步骤04)在Slaves(或仅报告Slave)上,运行STOP SLAVE;

步骤05)在Master上,(如果CONNECTION_ID()返回789)在另一个mysql会话中运行mysql> KILL 789;

步骤06)运行报告

步骤07)在奴隶(或仅报告奴隶)上运行START SLAVE;

更新2012-06-05 15:15 EDT

由于一个特定模式中的几个表似乎有点沉重,所以最简单的方法就是在Slave上运行STOP SLAVE;来进行报告。