我在多主复制设置中配置了两个MySQL服务器。每个人都是奴隶,掌握着另一个人。我的应用程序要求在后台运行一些大型查询,这些查询的结果将用于填充表。我想,我可以在一台服务器上运行这些大型查询,而应用程序前端则使用另一台服务器。这样,在服务器运行这些查询时,应用程序不会变慢。
这些查询非常大INSERT .... SELECT
。通过我的复制设置,似乎当一个服务器完成查询时,而不是仅仅将INSERT发送到从服务器,它使从服务器运行原始的大型INSERT / SELECT。
这真的发生了吗?或者有没有办法看到从主服务器发送到从服务器的命令,以验证这是行为?我能告诉的唯一方法是CPU负载。
奴隶是否有办法仅从INSERT中获取生成的INSERT ...在主服务器上运行SELECT?
答案 0 :(得分:5)
这实际发生了吗?
可能。
或者有没有办法查看从主服务器发送给从服务器的命令以验证这是行为?
嗯,你可以 deconstruct the binlog,但我希望在replication format options上阅读会减少令人头疼的问题。
您可能处于基于语句的模式,这是年龄的默认值。如果那些INSERT INTO ... SELECT
语句很痛苦,您希望处于基于行的模式或混合模式。这些选项仅在MySQL 5.1或更高版本中可用。
答案 1 :(得分:0)
运行实际查询。 INSERT ... SELECT的唯一方法是自己分解它们。运行select,将结果存储在内存中,然后进行批量插入。