diff --git a/mysql-test/suite/innodb/t/MDEV-27927.opt b/mysql-test/suite/innodb/t/MDEV-27927.opt
new file mode 100644
index 00000000000..4e93702a302
--- /dev/null
+++ b/mysql-test/suite/innodb/t/MDEV-27927.opt
@@ -0,0 +1 @@
+--innodb-force-recovery=2 --innodb-adaptive-hash-index=1
diff --git a/mysql-test/suite/innodb/t/MDEV-27927.test b/mysql-test/suite/innodb/t/MDEV-27927.test
new file mode 100644
index 00000000000..c13487d1b93
--- /dev/null
+++ b/mysql-test/suite/innodb/t/MDEV-27927.test
@@ -0,0 +1,64 @@
+--source include/have_innodb.inc
+--source include/have_debug_sync.inc
+--source include/count_sessions.inc
+
+CREATE TABLE t (var BIGINT(64) UNSIGNED NOT NULL PRIMARY KEY,
+                val BIGINT(64) UNSIGNED NOT NULL) ENGINE=InnoDB;
+INSERT INTO t VALUES (0,0), (10, 0), (20, 0), (30, 0), (40, 0),
+                     (50, 0), (60, 0), (70, 0), (80, 0), (90, 0),
+                     (100, 0), (110, 0), (120, 0), (130, 0), (140, 0),
+                     (150, 0), (160, 0);
+
+--connection default
+BEGIN;
+# To cause AHI search we need:
+# - info->last_hash_succ must be set, see btr_search_info_update() for details;
+# - block->index must be built, see on what condition
+#   btr_search_build_page_hash_index() is called.
+--echo # Execute some SELECT's to build AHI for the table
+--disable_query_log
+--disable_result_log
+--let $i=8
+while ($i) {
+eval SELECT val FROM t as t$i WHERE var=0;
+eval SELECT val FROM t as t$i WHERE var=10;
+eval SELECT val FROM t as t$i WHERE var=20;
+eval SELECT val FROM t as t$i WHERE var=30;
+eval SELECT val FROM t as t$i WHERE var=40;
+eval SELECT val FROM t as t$i WHERE var=50;
+eval SELECT val FROM t as t$i WHERE var=60;
+eval SELECT val FROM t as t$i WHERE var=70;
+eval SELECT val FROM t as t$i WHERE var=80;
+eval SELECT val FROM t as t$i WHERE var=90;
+eval SELECT val FROM t as t$i WHERE var=100;
+eval SELECT val FROM t as t$i WHERE var=110;
+eval SELECT val FROM t as t$i WHERE var=120;
+eval SELECT val FROM t as t$i WHERE var=130;
+eval SELECT val FROM t as t$i WHERE var=140;
+eval SELECT val FROM t as t$i WHERE var=150;
+eval SELECT val FROM t as t$i WHERE var=160;
+--dec $i
+}
+--enable_query_log
+--enable_result_log
+
+SELECT val FROM t WHERE var=10;
+
+SET DEBUG_SYNC="row_search_mvcc_ahi_found SIGNAL ahi_found WAIT_FOR cont";
+--send SELECT val FROM t WHERE var=10;
+
+--connect (update,localhost,root)
+SET DEBUG_SYNC="now WAIT_FOR ahi_found";
+UPDATE t SET val = 10 WHERE var = 10;
+SET DEBUG_SYNC="now SIGNAL cont";
+--disconnect update
+
+--connection default
+# Must return 0 as the previous SELECT returned 0, but returns 10 if the bug
+# is not fixed.
+--reap
+COMMIT;
+
+SET DEBUG_SYNC="RESET";
+DROP TABLE t;
+--source include/wait_until_count_sessions.inc
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index 781769dbf04..dd9bd0a002f 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -4526,6 +4526,7 @@ row_search_mvcc(
 					}
 				}
 
+				DEBUG_SYNC_C("row_search_mvcc_ahi_found");
 				if (!row_sel_store_mysql_rec(
 					    buf, prebuilt,
 					    rec, NULL, false, index,
