Просмотр полной версии : mysql резка
Нужно разрезать базу на несколько частей, подскажите какие нибудь проги или скрипты,
пробовал
<?php
set_time_limit(0);
$file_in = ''; #входной файл
$file_out_n = '0'; #выходной файл имя
$file_out_ras = 'gz'; #выходной файл расширение
$strok = 1000; #колличество строк в одном выходном файле
$count_out = 0; #счетчик выходных файлов начинать с этого числа
if(file_exists($file_in)) $content = file($file_in); else exit('Не найден входной файл '.$file_in);
$k=0;
$add = '';
for($i=0, $count=count($content); $i < $count; $i++){
if($i == $strok * ($k + 1) || $i==$count-1){
if($i==$count-1) $add=$add.$content[$i];
$fp = fopen($file_out_n.$k.'.'.$file_out_ras, 'w');
fputs($fp, $add);
fclose($fp);
$add='';
$k++;
}
$add=$add.$content[$i];
}
echo 'Работа завершена. Создано '.$k.' файлов';
?>
Файлы режуться, но после этого не открываются поврежденный архив....
aka PSIH
05.06.2009, 11:48
Файлы режуться, но после этого не открываются поврежденный архив....
$file_out_ras = 'gz'; #выходной файл расширение
txt поставь, или файлы текст.редактором открывай ;)
Для чего? мне их потом лить через dumper...
aka PSIH
05.06.2009, 11:56
у тебя скрипт создает не архив .gz, а просто файл с расширением .gz. поэтому архиватор и пишет что архив поврежден..
А как сделать что бы архив .gz? или может уже есть готовые скрипты для резки? подкинте ссылки:)
FireFenix
05.06.2009, 12:39
phpmyadmin может загружать по частям файл, задавая смещение + поддерживает сжатие.
Мне не загружать части, а разбить одну БД на несколько частей
aka PSIH
05.06.2009, 13:05
зачем тебе её разбивать? имхо разбивать только вручную, т.к скрипты разобьют дамп криво(запрос на несколько частей поделят), потом при импорте ошибки будут...
p.s: пока ты тут ответов ждешь уже можно было все вручную разбить, и запаковать в .gz как тебе надо...
p.s2: если у тебя с импортом больших файлов проблеммы посмотри, sypex dumper и это (http://zweroboy.net/script/bigdump.html)
зачем тебе её разбивать? имхо разбивать только вручную, т.к скрипты разобьют дамп криво(запрос на несколько частей поделят), потом при импорте ошибки будут...
p.s: пока ты тут ответов ждешь уже можно было все вручную разбить, и запаковать в .gz как тебе надо...
p.s2: если у тебя с импортом больших файлов проблеммы посмотри, sypex dumper и это (http://zweroboy.net/script/bigdump.html)
Пробовал ей, 140 мб и все дальше говорит не возможно соединится с удаленным URL
Если увеличить
$linespersession = 3000; // Lines to be executed per one import session
то выдает ошибку... где то на 70 мб и дальше не идет...
А вручную 70 тыс строк... это сложно...даже до конца страницы дойдти проблема минут 5 думает
FireFenix
05.06.2009, 13:34
Файлы режуться, но после этого не открываются поврежденный архив....
Мой вариант твоего скрипта.
Для текстовых файлов.
<?php
set_time_limit(0);
$file_in = 'file.sql'; #входной файл
$file_out['name'] = 'file_'; #выходной файл имя
$file_out['ext'] = '.sql'; #выходной файл расширение
$count = 10000; #колличество строк в одном выходном файле
if(file_exists($file_in))
{
$content = file($file_in);
} else {
die('Не найден входной файл ' . $file_in);
}
echo('Всего - ' . count($content) . ' строк');
for ($c = 0; $c < (count($content) / $count); $c++)
{
$file = fopen($file_out['name'] . $c . $file_out['ext'], 'w');
for($i = 0; $i < $count; $i++)
{
fprintf($file, '%s', $content[$c * $count + $i]);
}
fclose($file);
}
echo('<hr>' . $c . ' файлов создано<br>Работа завершена.');
?>
Для gz файлов.
<?php
set_time_limit(0);
$file_in = 'file.gz'; #входной файл
$file_out['name'] = 'file_'; #выходной файл имя
$file_out['ext'] = '.gz'; #выходной файл расширение
$count = 10000; #колличество строк в одном выходном файле
if(file_exists($file_in))
{
$content = gzfile($file_in);
} else {
die('Не найден входной файл ' . $file_in);
}
echo('Всего - ' . count($content) . ' строк');
for ($c = 0; $c < (count($content) / $count); $c++)
{
$file = gzopen($file_out['name'] . $c . $file_out['ext'], 'w');
for($i = 0; $i < $count; $i++)
{
gzwrite($file, $content[$c * $count + $i]);
}
gzclose($file);
}
echo('<hr>' . $c . ' файлов создано<br>Работа завершена.');
?>
P.S. Хорошо отформатированный код - залог хорошей отладки и больше шансов, что кто-то его посмотрит
P.S.S Как показала практика - результат всёравно нужно будет допиливать, или добавлять ещё условия разбиения, или формирование всех запросов 1 запрос = 1 строка
file_00 проходит file_01 неуказана кодировка....
file_00 выглядет так... file_01 сразу дамп идет
CREATE TABLE `dle_post` ( `id` int(11) NOT NULL auto_increment, `autor` varchar(40) NOT NULL default '', `date` datetime NOT NULL default '0000-00-00 00:00:00', `short_story` text NOT NULL, `full_story` text NOT NULL, `xfields` text NOT NULL, `title` varchar(255) NOT NULL default '', `descr` varchar(200) NOT NULL default '', `keywords` text NOT NULL, `category` varchar(200) NOT NULL default '0', `alt_name` varchar(200) NOT NULL default '', `comm_num` smallint(5) unsigned NOT NULL default '0', `allow_comm` tinyint(1) NOT NULL default '1', `allow_main` tinyint(1) unsigned NOT NULL default '1', `allow_rate` tinyint(1) unsigned NOT NULL default '1', `approve` tinyint(1) NOT NULL default '0', `fixed` tinyint(1) NOT NULL default '0', `rating` smallint(5) NOT NULL default '0', `allow_br` tinyint(1) NOT NULL default '1', `vote_num` smallint(5) unsigned NOT NULL default '0', `news_read` mediumint(8) NOT NULL default '0', `votes` tinyint(1) NOT NULL default '0', `access` varchar(150) NOT NULL default '', `expires` date NOT NULL default '0000-00-00', `is_icq_razdacha` int(10) default '0', `symbol` char(3) NOT NULL default '', `flag` tinyint(1) NOT NULL default '0', `editdate` varchar(15) NOT NULL default '', `editor` varchar(40) NOT NULL default '', `reason` varchar(255) NOT NULL default '', `view_edit` tinyint(1) NOT NULL default '0', `tags` varchar(255) NOT NULL default '', PRIMARY KEY (`id`), KEY `autor` (`autor`), KEY `alt_name` (`alt_name`), KEY `category` (`category`), KEY `approve` (`approve`), KEY `allow_main` (`allow_main`), KEY `date` (`date`), KEY `symbol` (`symbol`), KEY `comm_num` (`comm_num`), KEY `tags` (`tags`), FULLTEXT KEY `short_story` (`short_story`,`full_story`,`xfields`,`title`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=130534 ;
Дальше сам дамп...
Как сделать что бы в file_01 была нормальная кодировка, пробовал просто прибавить в начало строку
ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=130534 ;
не работает(((
FireFenix
05.06.2009, 16:03
file_00 проходит file_01 неуказана кодировка....
file_00 выглядет так... file_01 сразу дамп идет
Как сделать что бы в file_01 была нормальная кодировка, пробовал просто прибавить в начало строку
не работает(((
Как я уже гвоорил:
P.S.S Как показала практика - результат всёравно нужно будет допиливать, или добавлять ещё условия разбиения, или формирование всех запросов 1 запрос = 1 строка
1) Чтобы все запросы были корректы, они должны быть однострочными (т.е. 1 запрос = 1 строка)
2) Кодировка в основном зависит от используемого средства для загрузки дампа и кодировки файла.
Для принудельной установки кодировки используй https://forum.antichat.ru/showpost.php?p=1310245&postcount=642
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot