summaryrefslogtreecommitdiffstats
path: root/inc
diff options
context:
space:
mode:
authorSimon Rettberg2025-04-22 15:25:50 +0200
committerSimon Rettberg2025-04-22 15:25:50 +0200
commite8642bec05bacb47bc63ce6523ab2e7ff45f4926 (patch)
tree69f01271ffec6efaf089ea25ad23bcd6efc61273 /inc
parent[statistics/minilinux] Allow conditional initrd delivery (diff)
downloadslx-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')
-rw-r--r--inc/database.inc.php30
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) {