Как разделить резервную копию сервера phpmyadmin на резервную копию базы данных?
У меня есть большой файл.sql, который я создал с помощью phpmyadmin для резервного копирования моих баз данных разработки. Есть ли способ разбить эту большую резервную копию на несколько файлов, каждый файл для отдельной базы данных? файл слишком большой, чтобы иметь дело с ним вручную
3 ответа
Проверьте здесь, может быть, это поможет вам http://www.rusiczki.net/2007/01/24/sql-dump-file-splitter/
Но если вы можете удаленно подключиться к базе данных или даже иметь доступ к оболочке, вы должны использовать mysqldump для резервного копирования базы данных или даже таблицы.
этот простой скрипт, который сделает это за вас:
#!/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
Вы должны изменить / поставить dbuser dbpass и backupdir, и скрипт должен выполнить полный дамп каждой базы данных на сервере (одна база данных на файл sql и и каждая таблица в базе данных на файл sql). Этот пример должен быть выполнен на сервере, но с небольшой модификацией вы можете использовать его для удаленного выполнения дампа.
Это скрипт, который я написал, чтобы разделить резервную копию сервера phpmyadmin на отдельные файлы базы данных:
#!/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);
?>
Если вы просто хотите разделить файл для разработки, а не для восстановления - должен быть скрипт / инструмент для разбиения.sql файла, но никогда не увиденный - возможно, кто-то опубликует.
Если вы восстанавливаете резервную копию:
С большими файлами - у вас всегда может быть эта проблема. Вы не можете быть уверены, что все БД маленькие. достаточно, чтобы импортировать данные позже
Если сервер в ваших руках - импортируйте его из консоли mysql: http://dev.mysql.com/doc/refman/5.5/en/mysqlimport.html
phpMyAdmin также может обрабатывать большие файлы, но для веб-сервера и ограничения php должны быть установлены более высокие значения. Кроме того, phpMyAdmin поддерживает gzip и bzip2, сожмите с помощью bzip2 и попробуйте снова.
Сейчас вы можете попробовать импортировать большой файл из консоли, а затем повторно экспортировать все базы данных отдельно с помощью mysqldump: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html