diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index dc1bf7c17c35e66d0b1e239a2dbc2b53479c378a..8ed64d05d06c31203f10a0314bd27a21ff4adca3 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -666,6 +666,14 @@ class installer_base { $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); } + $query = "GRANT SELECT ON ?? TO ?@?"; + if ($verbose){ + echo $query ."\n"; + } + if(!$this->dbmaster->query($query, $value['db'] . '.web_database', $value['user'], $host)) { + $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage); + } + $query = "GRANT SELECT ON ?? TO ?@?"; if ($verbose){ echo $query ."\n"; diff --git a/interface/lib/classes/plugin_backuplist.inc.php b/interface/lib/classes/plugin_backuplist.inc.php index 9e21dc6ba6a59b5eef2d77af2e242a00378bbf4e..81fe1daae7d2b960f3d93a5c5cdfaf80108918e0 100644 --- a/interface/lib/classes/plugin_backuplist.inc.php +++ b/interface/lib/classes/plugin_backuplist.inc.php @@ -56,10 +56,22 @@ class plugin_backuplist extends plugin_base { $sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = ? AND action_param = ?"; $tmp = $app->db->queryOneRecord($sql, $action_type, $domain_id); if ($tmp['number'] == 0) { - $server_id = $this->form->dataRecord['server_id']; + if($action_type === 'backup_database') { + // get all server ids of databases for this domain + $sql = 'SELECT `server_id` FROM `web_database` WHERE `parent_domain_id` = ?'; + $result = $app->db->query($sql, $domain_id); + while(($cur = $result->get())) { + $server_id = $cur['server_id']; + $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')"; + $app->db->query($sql, $server_id, $action_type, $domain_id); + } + $result->free(); + } else { + $server_id = $this->form->dataRecord['server_id']; + $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')"; + $app->db->query($sql, $server_id, $action_type, $domain_id); + } $message .= $wb['backup_info_txt']; - $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) VALUES (?, UNIX_TIMESTAMP(), ?, ?, 'pending', '')"; - $app->db->query($sql, $server_id, $action_type, $domain_id); } else { $error .= $wb['backup_pending_txt']; } @@ -193,10 +205,10 @@ class plugin_backuplist extends plugin_base { $rec['backup_encrypted'] = empty($rec['backup_password']) ? $wb["no_txt"] : $wb["yes_txt"]; $backup_manual_prefix = 'manual-'; $rec['backup_job'] = (substr($rec['filename'], 0, strlen($backup_manual_prefix)) == $backup_manual_prefix) ? $wb["backup_job_manual_txt"] : $wb["backup_job_auto_txt"]; - + $rec['download_available'] = true; if($rec['server_id'] != $web['server_id']) $rec['download_available'] = false; - + if($rec['filesize'] > 0){ $rec['filesize'] = $app->functions->currency_format($rec['filesize']/(1024*1024), 'client').' MB'; } diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php index 23d6171f4fc22de3fd7ff37660d0eb7e6a71fd6a..e7333356b49a90801706e77b0fac4c959515ad42 100644 --- a/server/lib/classes/backup.inc.php +++ b/server/lib/classes/backup.inc.php @@ -1145,7 +1145,7 @@ class backup if (empty($backup_job)) $backup_job = "auto"; - $records = $app->db->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id); + $records = $app->dbmaster->queryAllRecords("SELECT * FROM web_database WHERE server_id = ? AND parent_domain_id = ?", $server_id, $domain_id); if (empty($records)){ $app->log('Skipping database backup for domain ' . $web_domain['domain_id'] . ', because no related databases found.', LOGLEVEL_DEBUG); return true; @@ -1396,17 +1396,17 @@ class backup */ public static function run_backup($domain_id, $type, $backup_job, $mount = true) { - global $app; + global $app, $conf; $domain_id = intval($domain_id); $sql = "SELECT * FROM web_domain WHERE (type = 'vhost' OR type = 'vhostsubdomain' OR type = 'vhostalias') AND domain_id = ?"; - $rec = $app->db->queryOneRecord($sql, $domain_id); + $rec = $app->dbmaster->queryOneRecord($sql, $domain_id); if (empty($rec)) { $app->log('Failed to make backup of type ' . $type . ', because no information present about requested domain id ' . $domain_id, LOGLEVEL_ERROR); return false; } - $server_id = intval($rec['server_id']); + $server_id = intval($conf['server_id']); if ($mount && !self::mount_backup_dir($server_id)) { $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 @@ class backup $ok = self::make_web_backup($rec, $backup_job); break; case 'mysql': + $rec['server_id'] = $server_id; $ok = self::make_database_backup($rec, $backup_job); break; default: @@ -1443,7 +1444,7 @@ class backup $server_id = intval($server_id); $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 != ''"; - $domains = $app->db->queryAllRecords($sql, $server_id); + $domains = $app->dbmaster->queryAllRecords($sql, $server_id); if (!self::mount_backup_dir($server_id)) { $app->log('Failed to run regular backups routine because failed to mount backup directory', LOGLEVEL_ERROR); @@ -1456,7 +1457,15 @@ class backup foreach ($domains as $domain) { if (($domain['backup_interval'] == 'daily' or ($domain['backup_interval'] == 'weekly' && $date_of_week == 0) or ($domain['backup_interval'] == 'monthly' && $date_of_month == '01'))) { self::run_backup($domain['domain_id'], 'web', $backup_job, false); - self::run_backup($domain['domain_id'], 'mysql', $backup_job, false); + } + } + + $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 != ''"; + $databases = $app->dbmaster->queryAllRecords($sql, $server_id); + + foreach ($databases as $database) { + if (($database['backup_interval'] == 'daily' or ($database['backup_interval'] == 'weekly' && $date_of_week == 0) or ($database['backup_interval'] == 'monthly' && $date_of_month == '01'))) { + self::run_backup($database['domain_id'], 'mysql', $backup_job, false); } } self::unmount_backup_dir($server_id);