Mysql 复制从属锁定

Mysql 复制从属锁定,mysql,locking,replication,Mysql,Locking,Replication,我有一个主mysql服务器和两个从服务器作为备份 其中一个从机配备了固态存储器,因此大量用于报告 生成的一些数据需要一些时间(在某些情况下大约需要半个小时到一个小时),并使用和生成分配的数据(以两个GIG的顺序,这使我对使用事务犹豫不决)。报告表只是整个数据库的一小部分,因此完全关闭复制是不可能的 目前的问题是,在生成数据的同时生成的报告显然是不完整和错误的 锁定主服务器和报表服务器上的表的最佳方法是什么 “LOCK TABLES”语句会被复制到从属表中吗?或者我最好的做法是在临时表中生成数据,

我有一个主mysql服务器和两个从服务器作为备份

其中一个从机配备了固态存储器,因此大量用于报告

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

目前的问题是,在生成数据的同时生成的报告显然是不完整和错误的

  • 锁定主服务器和报表服务器上的表的最佳方法是什么
  • “LOCK TABLES”语句会被复制到从属表中吗?或者我最好的做法是在临时表中生成数据,然后在一次插入中将它们复制到最终的表中。。。SELECT语句
  • 试试下面的方法

    您可以尝试以下方法:

    步骤01)在主机上,运行以下命令

    FLUSH TABLES WITH READ LOCK; SELECT CONNECTION_ID(); SELECT SLEEP(300);
    
    步骤02)
    在两个从机(或仅报告从机)上显示从机状态\G

    步骤03)重复步骤02,直到

    • 继电器\u日志\u空间停止变化
    • 继电器\u日志\u位置停止更改
    • 主控台后面的秒数为0
    此时,由于两个从属服务器都没有收到任何要处理的新SQL,因此您已经在与主服务器相同的时间点有效地冻结了从属服务器上的MySQL

    步骤04)在从属设备(或仅报告从属设备)上,运行
    STOP Slave

    步骤05)在主机上,(如果连接_ID()返回789)运行
    mysql>KILL 789在另一个mysql会话中

    步骤06)运行您的报告

    步骤07)运行
    启动从机

    更新日期:美国东部时间2012-06-05 15:15
    因为在一个特定的模式中,为了几个表的缘故,这似乎有点过于繁重,所以最简单的方法就是运行
    STOP SLAVE
    在从服务器上执行报告。

    这似乎有点过于苛刻,我可能应该提到我只对锁定一个特定架构中的几个表感兴趣。使用“SHOW OPEN tables”命令进行一些简单检查似乎表明当前的LOCK tables命令没有从主服务器复制到从服务器。连接到两台服务器并分别锁定表将锁定复制线程,因此这是不可能的,因此答案似乎必须是在单独的表中创建数据集,并截断原始表/在事务中复制新数据。