diff options
| author | Simon Rettberg | 2025-04-22 15:25:50 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2025-04-22 15:25:50 +0200 |
| commit | e8642bec05bacb47bc63ce6523ab2e7ff45f4926 (patch) | |
| tree | 69f01271ffec6efaf089ea25ad23bcd6efc61273 /inc/database.inc.php | |
| parent | [statistics/minilinux] Allow conditional initrd delivery (diff) | |
| download | slx-admin-e8642bec05bacb47bc63ce6523ab2e7ff45f4926.tar.gz slx-admin-e8642bec05bacb47bc63ce6523ab2e7ff45f4926.tar.xz slx-admin-e8642bec05bacb47bc63ce6523ab2e7ff45f4926.zip | |
[inc/Database] Wait for db server on connection error
Diffstat (limited to 'inc/database.inc.php')
| -rw-r--r-- | inc/database.inc.php | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/inc/database.inc.php b/inc/database.inc.php index 83720baa..f928b7f5 100644 --- a/inc/database.inc.php +++ b/inc/database.inc.php @@ -31,15 +31,27 @@ class Database if (self::$dbh !== false) return true; self::$returnErrors = $returnErrors; - try { - self::$dbh = new PDO(CONFIG_SQL_DSN, CONFIG_SQL_USER, CONFIG_SQL_PASS, [ - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::ATTR_EMULATE_PREPARES => true, - PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', // Somehow needed, even if charset=utf8mb4 is in DSN? - ]); - } catch (PDOException $e) { - if (self::$returnErrors) - return false; + for ($try = 0; $try < 10; ++$try) { + try { + self::$dbh = new PDO(CONFIG_SQL_DSN, CONFIG_SQL_USER, CONFIG_SQL_PASS, [ + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => true, + PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', + // Somehow needed, even if charset=utf8mb4 is in DSN? + ]); + break; + } catch (PDOException $e) { + if (self::$returnErrors) + return false; + if (strpos($e->getMessage(), '2002') !== false) { + // Code 2002 is "could not connect", mysql might be restarting + sleep(1); + continue; + } + break; + } + } + if (self::$dbh === false) { ErrorHandler::traceError('Connecting to the local database failed: ' . $e->getMessage()); } if (CONFIG_DEBUG) { |
