是否可以从 BLACKHOLE 表中恢复数据?

Kar*_*ick 8 mysql storage-engine mysql-5.5

我已经使用引擎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)
Run Code Online (Sandbox Code Playgroud)

Rol*_*DBA 13

你说

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

谁告诉你应该告诉你像@jynus 评论的那样启用二进制日志。

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

示例 #1:星形拓扑

有些采用星型拓扑将数据写入 MySQL Replication Master。Master只有BLACKHOLE表。所有的 Slaves 都有 InnoDB 或 MyISAM。这样,如果 Master 被黑客入侵,就没有本地数据。这样的主机称为分发主机。

示例#2:单从,多主

这涉及使用三台服务器设置循环复制。两个 Master 混合了 BLACKHOLE 表,一个 Slave 带有所有真实的表。这种技术早于多源复制。

示例 #3:提高写入性能

我知道有一个虚拟主机客户因为一张桌子上的性能问题而去了 Percona。由于客户端有多个从站的 MySQL 复制,Percona 将问题表转换为 BLACKHOLE。这提高了 Master 上的写入性能。数据必须从奴隶读取。

我曾经在一篇记录审计信息的帖子中提出了这个建议(Performance of a Trigger vs Stored Procedure in MySQL

结语

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

  • 从什么时候开始这个问题涉及事实和技术细节?:) (6认同)
  • 我们可以成为技术人员(甚至,也许,书呆子),而不是螺旋桨式的傻瓜,这不是很好吗!+1 (2认同)
  • 当然,如果启用了二进制日志记录......如果日志没有被清除,那么数据*实际上*就在那里,并且*有*可能通过从另一个系统上的正确点重放它们来恢复它。 (2认同)

归档时间:

查看次数:

1363 次

最近记录:

11 年,1 月 前