如何在 Galera 集群中使用 MySQL 个临时表?
How to work with MySQL temp tables in a Galera Cluster?
我正在将我的应用程序从一个 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);
错误信息是:
Error: 1146 Table 'test.tmp' doesn't exist
CREATE TEMPORARY TABLE
创建一个 table 仅对创建它的会话可见。没有其他连接可以看到它。
- 单个连接保持连接到一个节点。
考虑到这两个因素,这样的 table 是否被复制并不重要。
ROW
基于复制是 Galera 的要求。
MyISAM
table 未复制。
有了这两个额外的项目符号项,TEMPORARY TABLE
是 ENGINE=MyISAM
(或 MEMORY
)甚至都没有关系。
回到你的问题。 db_query
和 execute_stmt
是做什么的?
- 他们也连接到服务器吗?不好。您的程序只有一个连接。
- 他们在到达 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);
错误信息是:
Error: 1146 Table 'test.tmp' doesn't exist
CREATE TEMPORARY TABLE
创建一个 table 仅对创建它的会话可见。没有其他连接可以看到它。- 单个连接保持连接到一个节点。
考虑到这两个因素,这样的 table 是否被复制并不重要。
ROW
基于复制是 Galera 的要求。MyISAM
table 未复制。
有了这两个额外的项目符号项,TEMPORARY TABLE
是 ENGINE=MyISAM
(或 MEMORY
)甚至都没有关系。
回到你的问题。 db_query
和 execute_stmt
是做什么的?
- 他们也连接到服务器吗?不好。您的程序只有一个连接。
- 他们在到达 Galera 节点之前是否经过某种形式的代理?切换节点对它不好