diff --git a/storage/innobase/dict/dict0boot.cc b/storage/innobase/dict/dict0boot.cc index 573357b54ee..0dff05567d7 100644 --- a/storage/innobase/dict/dict0boot.cc +++ b/storage/innobase/dict/dict0boot.cc @@ -458,12 +458,22 @@ dict_boot(void) if (err == DB_SUCCESS) { if (srv_read_only_mode && !ibuf_is_empty()) { - ib_logf(IB_LOG_LEVEL_ERROR, - "Change buffer must be empty when --innodb-read-only " - "is set!"); + if (srv_force_recovery < SRV_FORCE_NO_IBUF_MERGE) { + ib_logf(IB_LOG_LEVEL_ERROR, + "Change buffer must be empty when --innodb-read-only " + "is set! " + "You can try to recover the database with innodb_force_recovery=5"); - err = DB_ERROR; - } else { + err = DB_ERROR; + } else { + ib_logf(IB_LOG_LEVEL_WARN, + "Change buffer not empty when --innodb-read-only " + "is set! but srv_force_recovery = %d, ignoring.", + srv_force_recovery); + } + } + + if (err == DB_SUCCESS) { /* Load definitions of other indexes on system tables */ dict_load_sys_table(dict_sys->sys_tables); diff --git a/storage/xtradb/dict/dict0boot.cc b/storage/xtradb/dict/dict0boot.cc index 0a21264e23d..59f210fcab9 100644 --- a/storage/xtradb/dict/dict0boot.cc +++ b/storage/xtradb/dict/dict0boot.cc @@ -464,12 +464,22 @@ dict_boot(void) if (err == DB_SUCCESS) { if (srv_read_only_mode && !ibuf_is_empty()) { - ib_logf(IB_LOG_LEVEL_ERROR, - "Change buffer must be empty when --innodb-read-only " - "is set!"); + if (srv_force_recovery < SRV_FORCE_NO_IBUF_MERGE) { + ib_logf(IB_LOG_LEVEL_ERROR, + "Change buffer must be empty when --innodb-read-only " + "is set!" + "You can try to recover the database with innodb_force_recovery=5"); - err = DB_ERROR; - } else { + err = DB_ERROR; + } else { + ib_logf(IB_LOG_LEVEL_WARN, + "Change buffer not empty when --innodb-read-only " + "is set! but srv_force_recovery = %d, ignoring.", + srv_force_recovery); + } + } + + if (err == DB_SUCCESS) { /* Load definitions of other indexes on system tables */ dict_load_sys_table(dict_sys->sys_tables);