Como posso dividir o backup do servidor do phpmyadmin em backups de banco de dados?

3

Eu tenho um grande arquivo .sql que eu criei com o phpmyadmin para fazer backup dos meus bancos de dados de desenvolvimento. Existe alguma maneira de dividir este grande backup em vários arquivos, cada arquivo para um banco de dados separado? o arquivo é muito grande para lidar manualmente com

    
por yaser 15.06.2012 / 11:03

3 respostas

1

Verifique aqui, talvez ele ajude você a link

Mas se você puder conectar-se remotamente ao banco de dados ou até mesmo ter acesso ao shell, você deve usar o mysqldump para fazer backup por banco de dados ou até mesmo por tabela.

este script id id que fará isso por você:


#!/bin/bash
dbuser=
dbpass=
backupdir=
$mysql -e "show databases" --user=$dbuser --password=$dbpass | $grep -v "Database" | while read dbase
    do
            $mkdir -p $backupdir/$dbase/
            $mysqldump  -c -u $dbuser --password=$dbpass $dbase > $backupdir/$dbase/full-$dbase.sql 

            #if dont want to dump one table per sql file then erase next 4 lines then it will dump one database per sql file   
            $mysql -e "show tables" --user=$dbuser --password=$dbpass $dbase | $grep -v "Tables_in_" | while read dbtable
                do
                      $mysqldump -c -u $dbuser --password=$dbpass $dbase $dbtable > $backupdir/$dbase/$dbtable.sql
                done
    done

Você deve alterar / colocar o dbpass dbpass e o backupdir e o script deve fazer o despejo completo de cada banco de dados no servidor (um banco de dados por arquivo sql ee cada tabela no banco de dados por arquivo sql). Este exemplo deve ser executado no servidor, mas com pequena modificação você pode usá-lo para fazer o despejo remotamente.

    
por 15.06.2012 / 11:35
0

Se você quer apenas dividir o arquivo para desenvolvimento, não para a restauração - deve haver um script / ferramenta para dividir o arquivo .sql, mas nunca visto - talvez alguém publique.

Se você estiver restaurando o backup:

Com arquivos grandes - você sempre pode ter esse problema. Você não pode ter certeza de que todos os DBs são pequenos. o suficiente para importar dados depois

Se o servidor estiver em suas mãos - importe-o do console do mysql: link

O phpMyAdmin também pode manipular arquivos grandes, mas a limitação do servidor web e do php deve ser configurada para valores mais altos. Além disso, o phpMyAdmin suporta gzip e bzip2, comprime com o bzip2 e tenta novamente.

Por enquanto, você pode tentar importar um arquivo grande do console e, em seguida, re-exportar todos os db's separadamente com o mysqldump: link

    
por 15.06.2012 / 11:14
0

Este é o script que eu escrevi para dividir o backup do servidor do phpmyadmin em arquivos de banco de dados individuais:

#!/usr/bin/php
<?php
define('SOURCE_FILE', './localhost.sql');
define('TARGET_DIR', './DBs');

$fhs = fopen(SOURCE_FILE, 'r') or die("e-1!\n"); # source handler
$fht = null; # file handler for database files
$header = ''; # phpmyadmin settings at the begining of the file

while (($str = fgets($fhs)) !== false) {
    if(preg_match('@^CREATE DATABASE '(.*?)'@', $str, $matches)) {
        @fclose($fht);
        $fht = fopen(TARGET_DIR . '/' . $matches[1] . '.sql', 'w') or die("e-2: {$matches[1]}!\n");
        echo "Database: {$matches[1]}\n";
        fwrite($fht, $header);
    }

    if($fht)
        fwrite($fht, $str);
    else
        $header .= $str;
}

echo (feof($fhs)) ? 'All Done :)' : 'e-3: unexpected end!', "\n";

@fclose($fht);
@fclose($fhs);

?>
    
por 31.07.2012 / 15:17