2015-09-05 44 views
1

我将我的应用程序从一台MySQL服务器扩展到3节点MySQL Galera Gluster。偶然临时表不会被复制。如何在Galera集群中使用MySQL临时表?

有没有一个常见的解决方法这个问题?

我当前的代码如下所示:

 $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); 

的错误信息是:

Error: 1146 Table 'test.tmp' doesn't exist

回答

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

考虑到这两点,这样的表是否被复制并不重要。

基于
  • ROW复制是莱拉的要求。
  • MyISAM表不被复制。

有了这两个额外子弹的物品,它甚至没有问题,如果在TEMPORARY TABLEENGINE=MyISAM(或MEMORY)。

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

  • 难道他们也连接到服务器?不好。您的程序只有一个连接。
  • 他们去通过某种形式的代理的获得到加莱拉节点之前?它不适合作为交换节点。