如何在Galera集群中使用MySQL临时表?

时间:2015-09-05 11:34:42

标签: mysql database-replication galera

我正在将我的应用程序从一个MySQL服务器扩展到一个3节点的MySQL Galera Gluster。显然临时表不会被复制。

此问题是否有共同的解决方法?

我目前的代码如下:

        $stmt = "
            CREATE TEMPORARY TABLE tmp (`city_id` MEDIUMINT( 8 ) UNSIGNED NOT NULL ,INDEX ( `city_id` ) )
        ";          
        db_query($stmt);
        # travel tips
        $stmt = "
            INSERT INTO tmp
            SELECT city_id
            FROM $DB.$T33 g
            WHERE g.country_code = '$country[code]'
            GROUP BY city_id
        ";          
        execute_stmt($stmt, $link); 

错误消息是:

  

错误:1146表'test.tmp'不存在

1 个答案:

答案 0 :(得分:4)

  • CREATE TEMPORARY TABLE创建一个只对创建它的会话可见的表。没有其他连接可以看到它。
  • 单个连接保持连接到一个节点。

考虑到这两个因素,这个表是否被复制并不重要。

    基于
  • ROW的复制是Galera的要求。
  • MyISAM表格未被复制。

如果TEMPORARY TABLEENGINE=MyISAM(或MEMORY),则使用这两个额外的项目符号无关紧要。

回到你的问题。 db_queryexecute_stmt做了什么?

  • 他们还连接到服务器吗?不好。您的计划只有一个连接。
  • 在到达Galera节点之前,他们是否经过某种形式的代理?它切换节点并不好。