Skip to content

Commit afc4946

Browse files
author
Marius Burkard
committed
Merge branch '5867-mysql-backups-are-not-generating-on-3-2-multi-server-setup' into 'develop'
Resolve "MySQL backups are not generating on 3.2 & multi server setup" Closes #5866 and #5867 See merge request ispconfig/ispconfig3!1323
2 parents b443431 + fd95b9b commit afc4946

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

install/lib/installer_base.lib.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,14 @@ public function grant_master_database_rights($verbose = false) {
666666
$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
667667
}
668668

669+
$query = "GRANT SELECT ON ?? TO ?@?";
670+
if ($verbose){
671+
echo $query ."\n";
672+
}
673+
if(!$this->dbmaster->query($query, $value['db'] . '.web_database', $value['user'], $host)) {
674+
$this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
675+
}
676+
669677
$query = "GRANT SELECT ON ?? TO ?@?";
670678
if ($verbose){
671679
echo $query ."\n";

interface/lib/classes/plugin_backuplist.inc.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,22 @@ protected function makeBackup(&$message, &$error, $wb)
5656
$sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = ? AND action_param = ?";
5757
$tmp = $app->db->queryOneRecord($sql, $action_type, $domain_id);
5858
if ($tmp['number'] == 0) {
59-
$server_id = $this->form->dataRecord['server_id'];
59+
if($action_type === 'backup_database') {
60+
// get all server ids of databases for this domain
61+
$sql = 'SELECT `server_id` FROM `web_database` WHERE `parent_domain_id` = ?';
62+
$result = $app->db->query($sql, $domain_id);
63+
while(($cur = $result->get())) {
64+
$server_id = $cur['server_id'];
65+
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')";
66+
$app->db->query($sql, $server_id, $action_type, $domain_id);
67+
}
68+
$result->free();
69+
} else {
70+
$server_id = $this->form->dataRecord['server_id'];
71+
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')";
72+
$app->db->query($sql, $server_id, $action_type, $domain_id);
73+
}
6074
$message .= $wb['backup_info_txt'];
61-
$sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')";
62-
$app->db->query($sql, $server_id, $action_type, $domain_id);
6375
} else {
6476
$error .= $wb['backup_pending_txt'];
6577
}
@@ -193,10 +205,10 @@ function onShow() {
193205
$rec['backup_encrypted'] = empty($rec['backup_password']) ? $wb["no_txt"] : $wb["yes_txt"];
194206
$backup_manual_prefix = 'manual-';
195207
$rec['backup_job'] = (substr($rec['filename'], 0, strlen($backup_manual_prefix)) == $backup_manual_prefix) ? $wb["backup_job_manual_txt"] : $wb["backup_job_auto_txt"];
196-
208+
197209
$rec['download_available'] = true;
198210
if($rec['server_id'] != $web['server_id']) $rec['download_available'] = false;
199-
211+
200212
if($rec['filesize'] > 0){
201213
$rec['filesize'] = $app->functions->currency_format($rec['filesize']/(1024*1024), 'client').' MB';
202214
}

server/lib/classes/backup.inc.php

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,7 +1145,7 @@ protected static function make_database_backup($web_domain, $backup_job)
11451145
if (empty($backup_job))
11461146
$backup_job = "auto";
11471147

1148-
$records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id);
1148+
$records = $app->dbmaster->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id);
11491149
if (empty($records)){
11501150
$app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_DEBUG);
11511151
return true;
@@ -1396,17 +1396,17 @@ protected static function prepare_backup_dir($server_id, $domain_data)
13961396
*/
13971397
public static function run_backup($domain_id, $type, $backup_job, $mount = true)
13981398
{
1399-
global $app;
1399+
global $app, $conf;
14001400

14011401
$domain_id = intval($domain_id);
14021402

14031403
$sql = "SELECT * FROM web_domain WHERE (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND domain_id = ?";
1404-
$rec = $app->db->queryOneRecord($sql, $domain_id);
1404+
$rec = $app->dbmaster->queryOneRecord($sql, $domain_id);
14051405
if (empty($rec)) {
14061406
$app->log('Failed to make backup of type ' . $type . ', because no information present about requested domain id ' . $domain_id, LOGLEVEL_ERROR);
14071407
return false;
14081408
}
1409-
$server_id = intval($rec['server_id']);
1409+
$server_id = intval($conf['server_id']);
14101410

14111411
if ($mount && !self::mount_backup_dir($server_id)) {
14121412
$app->log('Failed to make backup of type ' . $type . ' for domain id ' . $domain_id . ', because failed to mount backup directory', LOGLEVEL_ERROR);
@@ -1419,6 +1419,7 @@ public static function run_backup($domain_id, $type, $backup_job, $mount = true)
14191419
$ok = self::make_web_backup($rec, $backup_job);
14201420
break;
14211421
case 'mysql':
1422+
$rec['server_id'] = $server_id;
14221423
$ok = self::make_database_backup($rec, $backup_job);
14231424
break;
14241425
default:
@@ -1443,7 +1444,7 @@ public static function run_all_backups($server_id, $backup_job = "auto")
14431444
$server_id = intval($server_id);
14441445

14451446
$sql = "SELECT * FROM web_domain WHERE server_id = ? AND (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND active = 'y' AND backup_interval != 'none' AND backup_interval != ''";
1446-
$domains = $app->db->queryAllRecords($sql, $server_id);
1447+
$domains = $app->dbmaster->queryAllRecords($sql, $server_id);
14471448

14481449
if (!self::mount_backup_dir($server_id)) {
14491450
$app->log('Failed to run regular backups routine because failed to mount backup directory', LOGLEVEL_ERROR);
@@ -1456,7 +1457,15 @@ public static function run_all_backups($server_id, $backup_job = "auto")
14561457
foreach ($domains as $domain) {
14571458
if (($domain['backup_interval'] == 'daily' or ($domain['backup_interval'] == 'weekly' && $date_of_week == 0) or ($domain['backup_interval'] == 'monthly' && $date_of_month == '01'))) {
14581459
self::run_backup($domain['domain_id'], 'web', $backup_job, false);
1459-
self::run_backup($domain['domain_id'], 'mysql', $backup_job, false);
1460+
}
1461+
}
1462+
1463+
$sql = "SELECT DISTINCT d.*, db.server_id as `server_id` FROM web_database as db INNER JOIN web_domain as d ON (d.domain_id = db.parent_domain_id) WHERE db.server_id = ? AND db.active = 'y' AND d.backup_interval != 'none' AND d.backup_interval != ''";
1464+
$databases = $app->dbmaster->queryAllRecords($sql, $server_id);
1465+
1466+
foreach ($databases as $database) {
1467+
if (($database['backup_interval'] == 'daily' or ($database['backup_interval'] == 'weekly' && $date_of_week == 0) or ($database['backup_interval'] == 'monthly' && $date_of_month == '01'))) {
1468+
self::run_backup($database['domain_id'], 'mysql', $backup_job, false);
14601469
}
14611470
}
14621471
self::unmount_backup_dir($server_id);

0 commit comments

Comments
 (0)