diff --git a/lib/MogileFS/Config.pm b/lib/MogileFS/Config.pm
index 1861910..c960ef8 100644
--- a/lib/MogileFS/Config.pm
+++ b/lib/MogileFS/Config.pm
@@ -213,6 +213,29 @@ sub config {
 }
 
 sub check_database {
+    my $class = shift;
+    my $sto = $class->check_database_connection;
+    $class->check_database_schema;
+    $sto->pre_daemonize_checks;
+}
+
+sub check_database_forever {
+    my $class = shift;
+    my $sto;
+    while () {
+        $sto = eval { $class->check_database_connection };
+        last if $sto;
+        warn <<EOF;
+Cannot connect to MogileFS database, try again later...
+Details: err=$@
+EOF
+        sleep 5; # XXX configurable?
+    }
+    $class->check_database_schema;
+    $sto->pre_daemonize_checks;
+}
+
+sub check_database_connection {
     my $sto = eval { Mgd::get_store() };
     unless ($sto && $sto->ping) {
         die qq{
@@ -226,15 +249,16 @@ run 'mogdbsetup'.
 Details: [sto=$sto, err=$@]
 }
     }
+    $sto;
+}
 
+sub check_database_schema {
     my $sversion = MogileFS::Config->server_setting('schema_version') || 0;
     my $expect_ver = MogileFS::Store->latest_schema_version;
     unless ($sversion == $expect_ver || MogileFS::Config->config('no_schema_check')) {
         die "Server's database schema version of $sversion doesn't match expected value of $expect_ver.  Halting.\n\n".
             "Please run mogdbsetup to upgrade your schema.\n";
     }
-
-    $sto->pre_daemonize_checks;
 }
 
 # set_server_setting( key, value )
diff --git a/lib/MogileFS/Server.pm b/lib/MogileFS/Server.pm
index 60b4340..ab020b2 100644
--- a/lib/MogileFS/Server.pm
+++ b/lib/MogileFS/Server.pm
@@ -96,7 +96,7 @@ sub run {
     die "mogilefsd cannot be run as root\n"
         if $< == 0 && MogileFS->config('user') ne "root";
 
-    MogileFS::Config->check_database;
+    MogileFS::Config->check_database_forever; # XXX configurable use of check_database vs. check_database_forever?
     daemonize() if MogileFS->config("daemonize");
 
     MogileFS::ProcManager->set_min_workers('queryworker' => MogileFS->config('query_jobs'));