是否可以从BLACKHOLE表中恢复数据?[关闭]


8

我已经使用引擎BLACKHOLE创建了表, 基本上,BLACKHOLE存储引擎充当了“黑洞”,该黑洞可以接受数据,但会将其丢弃而不进行存储。检索总是返回空结果。

听说我们可以通过使用存储引擎为innodb或myisam的新表创建与旧表相同的新表来检索数据。但是我也尝试过,但是无法获得结果。任何人都可以帮助我解决此问题。

mysql> CREATE TABLE test1(i INT, c CHAR(10)) ENGINE = BLACKHOLE;
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO test1 VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test1;
Empty set (0.00 sec)

mysql>  CREATE TABLE test_recovery as select * from test1;
Query OK, 0 rows affected (0.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE test_recovery ENGINE = innodb;
Query OK, 0 rows affected (0.25 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> SELECT * FROM test_recovery;
Empty set (0.00 sec)

4
没有东西可以从黑洞中出来,甚至没有光。这就是为什么以这种方式命名它们的原因。
ypercubeᵀᴹ

2
@ypercube霍金辐射怎么样?那么使用bin日志进行时间点恢复又如何呢?
jynus 2014年

4
那MySQLWormhole引擎呢?这样一来,您就可以回到过去,并在数据进入MySQLBlackhole 之前检索数据!
Vérace

6
您在Unix上运行吗?该数据可能是的/ dev / null的
Philᵀᴹ

5
这个问题似乎离题,因为这是不可能的。正如用户和文档所述,“ BLACKHOLE存储引擎充当“黑洞”,它接受数据但将其丢弃并不存储。检索总是返回空结果”
billinkc 2014年

Answers:


13

你说

听说我们可以通过使用存储引擎为innodb或myisam的新表创建与旧表相同的新表来检索数据

告诉您的人应该告诉您启用@jynus评论的二进制日志。

BLACKHOLE存储引擎根本不会存储数据。它是一种非常细致的设置中使用的特殊存储引擎。

范例#1:星形拓扑

有些具有星型拓扑结构,可将数据写入MySQL复制主机。该主表只有BLACKHOLE表。所有从站都有InnoDB或MyISAM。这样,如果主服务器遭到黑客入侵,则不会有本地数据。这样的母版被称为分发母版。

例2:单从机,多主机

这涉及使用三台服务器设置循环复制。两个主控混合了BLACKHOLE表和一个从属与所有实际表。此技术早于多源复制。

例3:提高写入性能

我知道一个Web Hosting Client在一张桌子上因性能问题而去了Percona。由于客户端具有带有多个从属的MySQL复制,因此Percona将问题表转换为BLACKHOLE。这提高了在主服务器上的写入性能。数据必须从从站读取。

我曾经在用于记录审核信息的帖子中建议过这一点(MySQL中的触发器与存储过程的性能

结语

虽然有些评论让我想起了StarTrek DS9,但BLACKHOLE存储引擎的名字却是这样说的:没有数据存储!如果启用了二进制日志,那将是您获得数据的唯一机会。


6
从什么时候开始这个问题涉及事实和技术?:)
Philᵀᴹ

2
我们可以成为技术专家(甚至是书呆子),而不必成为螺旋桨领导的矮人,这不是很好吗!+1
Vérace

2
当然,如果启用binlogging ......数据实际都在那里如果日志中没有被清除,并有由只是另一个系统上点右键重放来恢复它的可能性。
Michael-sqlbot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.