summaryrefslogtreecommitdiff
path: root/innobase/fil
diff options
context:
space:
mode:
authorunknown <heikki@hundin.mysql.fi>2004-06-02 08:44:08 +0300
committerunknown <heikki@hundin.mysql.fi>2004-06-02 08:44:08 +0300
commitaec8ccf27a9ab9e68b92d221243e86260bbb3c8e (patch)
treedaf2ee6a6b90bbdce493f78e5ba8cffb654897dc /innobase/fil
parent39c7065faeb934df3bdd6b4e91a644c7ae12ad1c (diff)
downloadmariadb-git-aec8ccf27a9ab9e68b92d221243e86260bbb3c8e.tar.gz
fil0fil.c:
Stop InnoDB crash recovery if an .ibd file for a table exists in a database directory, but we cannot access it. innobase/fil/fil0fil.c: Stop InnoDB crash recovery if an .ibd file for a table exists in a database directory, but we cannot access it.
Diffstat (limited to 'innobase/fil')
-rw-r--r--innobase/fil/fil0fil.c49
1 files changed, 45 insertions, 4 deletions
diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c
index 3b033655856..539e6aa8687 100644
--- a/innobase/fil/fil0fil.c
+++ b/innobase/fil/fil0fil.c
@@ -2572,11 +2572,30 @@ fil_load_single_table_tablespace(
fprintf(stderr,
"InnoDB: Error: could not open single-table tablespace file\n"
-"InnoDB: %s!\n", filepath);
+"InnoDB: %s!\n"
+"InnoDB: We do no continue crash recovery, because the table will become\n"
+"InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.\n"
+"InnoDB: To fix the problem and start mysqld:\n"
+"InnoDB: 1) If there is a permission problem in the file and mysqld cannot\n"
+"InnoDB: open the file, you should modify the permissions.\n"
+"InnoDB: 2) If the table is not needed, or you can restore it from a backup,\n"
+"InnoDB: then you can remove the .ibd file, and InnoDB will do a normal\n"
+"InnoDB: crash recovery and ignore that table.\n"
+"InnoDB: 3) If the file system or the disk is broken, and you cannot remove\n"
+"InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf\n"
+"InnoDB: and force InnoDB to continue crash recovery here.\n", filepath);
ut_free(filepath);
- return;
+ if (srv_force_recovery > 0) {
+ fprintf(stderr,
+"InnoDB: innodb_force_recovery was set to %lu. Continuing crash recovery\n"
+"InnoDB: even though we cannot access the .ibd file of this table.\n",
+ srv_force_recovery);
+ return;
+ }
+
+ exit(1);
}
success = os_file_get_size(file, &size_low, &size_high);
@@ -2587,14 +2606,36 @@ fil_load_single_table_tablespace(
fprintf(stderr,
"InnoDB: Error: could not measure the size of single-table tablespace file\n"
-"InnoDB: %s!\n", filepath);
+"InnoDB: %s!\n"
+"InnoDB: We do no continue crash recovery, because the table will become\n"
+"InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.\n"
+"InnoDB: To fix the problem and start mysqld:\n"
+"InnoDB: 1) If there is a permission problem in the file and mysqld cannot\n"
+"InnoDB: access the file, you should modify the permissions.\n"
+"InnoDB: 2) If the table is not needed, or you can restore it from a backup,\n"
+"InnoDB: then you can remove the .ibd file, and InnoDB will do a normal\n"
+"InnoDB: crash recovery and ignore that table.\n"
+"InnoDB: 3) If the file system or the disk is broken, and you cannot remove\n"
+"InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf\n"
+"InnoDB: and force InnoDB to continue crash recovery here.\n", filepath);
os_file_close(file);
ut_free(filepath);
- return;
+ if (srv_force_recovery > 0) {
+ fprintf(stderr,
+"InnoDB: innodb_force_recovery was set to %lu. Continuing crash recovery\n"
+"InnoDB: even though we cannot access the .ibd file of this table.\n",
+ srv_force_recovery);
+ return;
+ }
+
+ exit(1);
}
+ /* TODO: What to do in other cases where we cannot access an .ibd
+ file during a crash recovery? */
+
/* Every .ibd file is created >= 4 pages in size. Smaller files
cannot be ok. */