2015-09-05 42 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做什麼?

  • 難道他們也連接到服務器?不好。您的程序只有一個連接。
  • 他們去通過某種形式的代理的獲得到加萊拉節點之前?它不適合作爲交換節點。