206 Zeilen
6 KiB
PHP
206 Zeilen
6 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* This file is part of MySQLDumper released under the GNU/GPL 2 license
|
||
|
* http://www.mysqldumper.net
|
||
|
*
|
||
|
* @package MySQLDumper
|
||
|
* @subpackage Dump
|
||
|
* @version SVN: $rev: 1207 $
|
||
|
* @author $Author$
|
||
|
*/
|
||
|
/**
|
||
|
* Dump Class
|
||
|
*
|
||
|
* Offers some methods to wrap some common SQL-commands
|
||
|
*
|
||
|
* @package MySQLDumper
|
||
|
* @subpackage Dump
|
||
|
*/
|
||
|
class Msd_Dump
|
||
|
{
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
* return void
|
||
|
*/
|
||
|
public function __construct()
|
||
|
{
|
||
|
$this->dbsToBackup = array();
|
||
|
$this->tableInfo = array();
|
||
|
$this->recordsTotal = 0;
|
||
|
$this->tablesTotal = 0;
|
||
|
$this->datasizeTotal = 0;
|
||
|
$this->dbActual = null;
|
||
|
$this->sumTotal = $this->_initSum();
|
||
|
$this->dbo = Msd_Db::getAdapter();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get databases to backup and calculate sum array
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
function prepareDumpProcess()
|
||
|
{
|
||
|
$taskList = Msd_TaskManager::getInstance('backupTasks', true);
|
||
|
$this->dbsToBackup = $this->_getDbsToBackup();
|
||
|
$dbNames=array_keys($this->dbsToBackup);
|
||
|
foreach ($dbNames as $dbName) {
|
||
|
$sumInfo = $this->_getDatabaseSums($dbName);
|
||
|
$this->_addDatabaseSums($sumInfo);
|
||
|
$this->buildTaskList($dbName, $taskList);
|
||
|
}
|
||
|
// set db to be dumped first -> start index is needed
|
||
|
$this->dbActual = $dbNames[0];
|
||
|
//Debug::out($taskList->getTasks());
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get list of databases that shold be dumped
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
private function _getDbsToBackup()
|
||
|
{
|
||
|
$config = Msd_Configuration::getInstance();
|
||
|
$databases = $config->get('dynamic.databases');
|
||
|
// first check if any db is marked to be dumped
|
||
|
$dbToDumpExists = false;
|
||
|
if (!empty($databases)) {
|
||
|
foreach ($databases as $dbName => $val) {
|
||
|
$this->databases[$dbName] = array();
|
||
|
if (isset($val['dump']) && $val['dump'] == 1) {
|
||
|
$this->dbsToBackup[$dbName] = $val;
|
||
|
$dbToDumpExists = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!$dbToDumpExists) {
|
||
|
// no db selected for dump -> set actual db to be dumped
|
||
|
$index = $config->get('dynamic.dbActual');
|
||
|
$this->dbsToBackup[$index] = array();
|
||
|
$this->dbsToBackup[$index]['dump'] = 1;
|
||
|
}
|
||
|
|
||
|
return $this->dbsToBackup;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get sum of tables, records and data size grouped by table type
|
||
|
*
|
||
|
* @param string $db The database to check
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
private function _getDatabaseSums($dbName)
|
||
|
{
|
||
|
$this->dbo->selectDb($dbName);
|
||
|
$metaInfo = $this->dbo->getTableStatus();
|
||
|
$sum = array();
|
||
|
foreach ($metaInfo as $index => $vals) {
|
||
|
if ($vals['TABLE_TYPE'] == 'BASE TABLE') {
|
||
|
$type = $vals['ENGINE'];
|
||
|
if (!isset($sum[$type])) {
|
||
|
$sum[$type] = $this->_initSum();
|
||
|
}
|
||
|
$sum[$type]['tablesTotal']++;
|
||
|
if (!in_array($type, array('VIEW', 'MEMORY'))) {
|
||
|
$sum[$type]['recordsTotal'] += $vals['TABLE_ROWS'];
|
||
|
$sum[$type]['datasizeTotal'] += $vals['DATA_LENGTH'];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!empty($sum)) {
|
||
|
ksort($sum);
|
||
|
}
|
||
|
return $sum;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add sums of a database to the total sum array $this->sumTotal
|
||
|
*
|
||
|
* @param $sum Array containing the sum values for a database
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
private function _addDatabaseSums($sum)
|
||
|
{
|
||
|
$types = array_keys($sum);
|
||
|
foreach ($types as $type) {
|
||
|
if (!isset($this->sumTotal['tables'][$type])) {
|
||
|
$this->sumTotal['tables'][$type] = $this->_initSum();
|
||
|
}
|
||
|
$this->sumTotal['tables'][$type] =$this->_sumAdd(
|
||
|
$this->sumTotal['tables'][$type], $sum[$type]
|
||
|
);
|
||
|
$this->sumTotal['tablesTotal'] += $sum[$type]['tablesTotal'];
|
||
|
$this->sumTotal['recordsTotal'] += $sum[$type]['recordsTotal'];
|
||
|
$this->sumTotal['datasizeTotal'] += $sum[$type]['datasizeTotal'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Init a sum array
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
private function _initSum()
|
||
|
{
|
||
|
$sum = array();
|
||
|
$sum['tablesTotal'] = 0;
|
||
|
$sum['recordsTotal'] = 0;
|
||
|
$sum['datasizeTotal'] = 0;
|
||
|
return $sum;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add a sum array
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
private function _sumAdd($baseArr, $addArr)
|
||
|
{
|
||
|
$baseArr['tablesTotal'] += $addArr['tablesTotal'];
|
||
|
$baseArr['recordsTotal'] += $addArr['recordsTotal'];
|
||
|
$baseArr['datasizeTotal'] += $addArr['datasizeTotal'];
|
||
|
return $baseArr;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add the task "get create table" for each table to the task list
|
||
|
*
|
||
|
* @param string $dbName Name of database
|
||
|
* @param Msd_TaskManager $tasks TaskManager instance
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function buildTaskList($dbName, Msd_TaskManager $taskList)
|
||
|
{
|
||
|
$tables = $this->dbo->getTableStatus(false, $dbName);
|
||
|
foreach ($tables as $table) {
|
||
|
// add create table
|
||
|
$taskList->addTask(
|
||
|
Msd_TaskManager::GET_CREATE_TABLE,
|
||
|
array('db' => $dbName,
|
||
|
'table' => $table['TABLE_NAME']
|
||
|
)
|
||
|
);
|
||
|
// add dump data
|
||
|
if ($table['TABLE_TYPE'] === 'BASE TABLE') {
|
||
|
$taskList->addTask(
|
||
|
Msd_TaskManager::BACKUP_TABLE_DATA,
|
||
|
array('db' => $dbName,
|
||
|
'table' => $table['TABLE_NAME']
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
// add keys and indexes
|
||
|
$taskList->addTask(
|
||
|
Msd_TaskManager::GET_ALTER_TABLE_ADD_KEYS,
|
||
|
array('db' => $dbName,
|
||
|
'table' => $table['TABLE_NAME']
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|