1
0
Fork 0
MySQLDumper/library/Msd/Dump.php

206 Zeilen
6.0 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']
)
);
}
}
}