dbBackupRestore

Выкладываем свои наработки
Ответить
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

dbBackupRestore

Сообщение kosenka »

Наваял тут расширение для бэкапа и восстановления БД, а так же для optimize/repair таблиц.
Как пользоваться:
1) распаковываем архив в папку [webroot]/protected/extensions и нас должно получиться следующее: [webroot]/protected/extensions/dbBackupRestore/
2) создаем экшн:

Код: Выделить всё

public function actionDbBackupRestore()
{
        $dbBackup=Yii::createComponent('application.extensions.dbBackupRestore.EdbBackupRestore');
        if($_POST)
        {
                switch($_GET['act'])
                {
                        case "dboption": { $dbBackup->dboption($_POST['whattodo'],$_POST['tables']); $this->redirect(Yii::app()->request->getUrlReferrer()); break; }
                        case "backup"  : { $dbBackup->backup(); break; }
                        case "restore" : { $dbBackup->restore(); break; }
                        default        : { $this->redirect(Yii::app()->request->getUrlReferrer()); break; }
                }
        }
        else
        {
                $r=$dbBackup->run();
                $this->render('index',array('content'=>$r));
        }
}
 
и в принципе все.
За основу взял похожий функционал из DLE.
В качестве бэкапера/восстановителя используется dumper.php (Sypex Dumper Lite version 1.0.8b).

По умолчанию, бэкапы создаются в папке [webroot]/protected/_backup/ , но это можно изменить, надо только только сделать так:

Код: Выделить всё

$dbBackup=Yii::createComponent('application.extensions.dbBackupRestore.EdbBackupRestore');
$dbBackup->backupPath="backup/";
 
Просьба протестировать на больших базах, так как у меня под рукой база только в 63кб.
Вложения
dbBackupRestore.rar
(12.04 КБ) 348 скачиваний
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: dbBackupRestore

Сообщение samdark »

Почему не 2.0.6 Beta? Он вроде работает быстрее и более независим от интерфейса.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: dbBackupRestore

Сообщение kosenka »

Sam Dark писал(а):Почему не 2.0.6 Beta? Он вроде работает быстрее и более независим от интерфейса.
2.0.6 сильно разросся, а 1.0.8 под рукой был, да и занимает всего 33кб.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: dbBackupRestore

Сообщение samdark »

Размеры — это не очень хороший фактор для решения в пользу какой-либо библиотеки. В Sypex Dumper главное — скорость, стабильность и возможности, а не размер.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: dbBackupRestore

Сообщение kosenka »

Sam Dark писал(а):Размеры — это не очень хороший фактор для решения в пользу какой-либо библиотеки. В Sypex Dumper главное — скорость, стабильность и возможности, а не размер.
Согласен, спорить не буду.

...ушел разбираться с 2.0.8
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: dbBackupRestore

Сообщение Ekstazi »

Есть свой, самописный код импорта/экспорта даных из/в БД(mysql). Могу поделиться. Версия правда альфа, но, вполне рабочий, и большие дампы осиливал.
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: dbBackupRestore

Сообщение kosenka »

Sam Dark писал(а):Размеры — это не очень хороший фактор для решения в пользу какой-либо библиотеки. В Sypex Dumper главное — скорость, стабильность и возможности, а не размер.
Посмотрел я этот sypex dumper 2.0.6, написал расширение для интеграции его в yii-проект в качестве виджета, но.... лучше этот sypex dumper 2.0.6 использовать отдельно, потому как если его использовать в качестве виджета, то возникает много мелких проблем.

p.s. sypex dumper 1.0.8 ничуть не хуже 2.0.6
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: dbBackupRestore

Сообщение kosenka »

Ekstazi писал(а):Есть свой, самописный код импорта/экспорта даных из/в БД(mysql). Могу поделиться. Версия правда альфа, но, вполне рабочий, и большие дампы осиливал.
Конечно выкладывай. У пользователя будет выбор, что использовать для бэкапа/восстановления БД.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: dbBackupRestore

Сообщение Ekstazi »

Код импорта, было бы неплохо оформить все в виде класса:

Код: Выделить всё

        $dump=file_get_contents($config['dirs']['images'].'dump.sql');
        $q='';
        $state=0;
        for($i=0;$i<strlen($dump);$i++){
            switch($dump{$i}){
                case '"':
                    if($state==0) $state=1;
                    elseif($state==1) $state=0;
                    break;
                case "'":
                    if($state==0) $state=2;
                    elseif($state==2) $state=0;
                    break;
                case "`":
                    if($state==0) $state=3;
                    elseif($state==3) $state=0;
                    break;
                case ";":
                    if($state==0) {
//                        echo $q."\n;\n";
                        $this->db->query($q);
                        $q='';
                        $state=4;
                    }
                    break;
            }
            if($state==4) $state=0;else $q.=$dump{$i};
        }
 
Код экспорта:

Код: Выделить всё

    function sql_encode($str){
        $str=str_replace(array("\t","\r","\n","\\","\"","'"),array('\t','\r','\n','\\','\"',"\'"),$str);
        return $str;
    }
    
    $dump="set names utf8;\n";
    
    foreach($sql_struct as $tbl_name=>$crt_str){
        $dump.="DROP TABLE IF EXISTS `".$tbl_name."`;\n";
        $dump.=$crt_str."\n";
        $dump.="LOCK TABLES `".$tbl_name."` WRITE;\n";
        $this->db->query('LOCK TABLES `'.$tbl_name.'` READ');
        $res=$this->db->query('select * from `'.$tbl_name.'`');
        $insert_str='insert into `'.$tbl_name.'` values ';
        while($item=$this->db->fetch($res)){
            foreach($item as $k=>$v){
                $item->$k=sql_encode($v);
            }
            $dump.=$insert_str.'("'.implode('","',(array)$item).'");'."\n";
        }
        $dump.="UNLOCK TABLES;\n";
        $this->db->query('UNLOCK TABLES');
    }
 
где в $sql_struct хранится структура каждой из таблиц в виде:
имя таблицы=>ркзультат работы show create table <Имя таблицы>

P.S.:Все никак не хватает времени доработать, а то сейчас только кодировка utf8 поддердивается
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: dbBackupRestore

Сообщение Ekstazi »

Неплохо бы еще было добавить транзакцию, если кто возьмется доработать, буду благодарен и помогу с идеями/советами. А может и сам доработаю со временем
Аватара пользователя
howard
Сообщения: 528
Зарегистрирован: 2012.11.16, 18:55
Откуда: Україна, Вінниця

Re: dbBackupRestore

Сообщение howard »

то, что нужно, спасибо!
Агрегатор цен на услуги хостинга - https://hostcost.net
Аватара пользователя
howard
Сообщения: 528
Зарегистрирован: 2012.11.16, 18:55
Откуда: Україна, Вінниця

Re: dbBackupRestore

Сообщение howard »

Никто не допиливал расширение? Под php 5.5 уже не работает.
Агрегатор цен на услуги хостинга - https://hostcost.net
Ответить