2

我正在将我的应用程序从一台 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”不存在

4

1 回答 1

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

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

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

TEMPORARY TABLE有了这两个额外的项目符号项,即使是ENGINE=MyISAM(或)也没关系MEMORY

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

  • 他们也连接到服务器吗?不好。您的程序只有一个连接。
  • 他们在到达 Galera 节点之前是否经过某种形式的代理?切换节点不好。
于 2015-09-05T15:03:45.243 回答