mysqldump完全忽略temporary table,因其仅存在于当前会话、不写入binlog、不在information_schema.tables中注册;“备份”需转存为普通表、导出csv或保存建表逻辑。

mysqldump 为什么完全忽略 TEMPORARY TABLE
因为临时表只存在于当前会话,不写入 binlog,也不在数据字典中注册——mysqldump 扫描的是 information_schema.tables,而临时表根本不会出现在这里。即使你执行了 CREATE TEMPORARY TABLE t1 AS SELECT ...,SHOW TABLES 也看不到它,mysqldump 自然跳过。
临时表数据“备份”的三种可行路径
所谓“备份临时表”,本质是把它的内容或生成逻辑固化下来。直接导出结构+数据或重放 SQL 是主流做法:
- 用
CREATE TABLE ... AS SELECT把数据转存到普通表(注意 GTID 限制,见下一条) - 用
SELECT ... INTO OUTFILE导出 CSV,再用LOAD DATA INFILE恢复(需secure_file_priv允许路径) - 只保存建表语句本身,比如
CREATE TEMPORARY TABLE tmp_user AS SELECT id, name FROM users WHERE status=1—— 只要源表还在,随时可重建
GTID 环境下 CREATE TABLE AS SELECT 失败怎么办
MySQL 5.7.6+ 默认开启 enforce_gtid_consistency=ON,直接执行 CREATE TABLE t_backup AS SELECT * FROM temp_table 会报错:Statement violates GTID consistency: CREATE TABLE SELECT。这不是 bug,而是强制事务安全的设计。
正确解法是拆成两步:
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
-
CREATE TABLE t_backup LIKE temp_table(仅复制结构,不触碰数据,GTID 安全) -
INSERT INTO t_backup SELECT * FROM temp_table(单独 INSERT,可被记录进 binlog)
不要尝试关 enforce_gtid_consistency 或 gtid_mode:操作复杂、主从不一致风险高,且多数生产环境禁止降级 GTID 配置。
恢复时别指望“自动重建”,必须手动执行
临时表永远不会随 mysqld 重启或备份恢复而存在。哪怕你把整个数据库还原了,temp_table 依然为空——它压根没被备份进去。恢复流程只能是:
- 先连上新会话
- 运行原始的
CREATE TEMPORARY TABLE ...语句,或 - 先建普通备份表,再用
CREATE TEMPORARY TABLE ... SELECT * FROM backup_table
最容易被忽略的一点:临时表名冲突。如果同名普通表存在,CREATE TEMPORARY TABLE same_name 会隐式遮蔽它,但这个遮蔽只对当前会话有效;一旦会话断开,普通表就重新可见——别误以为“覆盖”了原表。










