Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   mysql резка (https://forum.antichat.xyz/showthread.php?t=123733)

C.C.C.P 05.06.2009 11:23

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 поставь, или файлы текст.редактором открывай ;)

C.C.C.P 05.06.2009 11:49

Для чего? мне их потом лить через dumper...

aka PSIH 05.06.2009 11:56

у тебя скрипт создает не архив .gz, а просто файл с расширением .gz. поэтому архиватор и пишет что архив поврежден..

C.C.C.P 05.06.2009 12:05

А как сделать что бы архив .gz? или может уже есть готовые скрипты для резки? подкинте ссылки:)

FireFenix 05.06.2009 12:39

phpmyadmin может загружать по частям файл, задавая смещение + поддерживает сжатие.

C.C.C.P 05.06.2009 12:56

Мне не загружать части, а разбить одну БД на несколько частей

aka PSIH 05.06.2009 13:05

зачем тебе её разбивать? имхо разбивать только вручную, т.к скрипты разобьют дамп криво(запрос на несколько частей поделят), потом при импорте ошибки будут...

p.s: пока ты тут ответов ждешь уже можно было все вручную разбить, и запаковать в .gz как тебе надо...
p.s2: если у тебя с импортом больших файлов проблеммы посмотри, sypex dumper и это

C.C.C.P 05.06.2009 13:10

Цитата:

Сообщение от aka PSIH
зачем тебе её разбивать? имхо разбивать только вручную, т.к скрипты разобьют дамп криво(запрос на несколько частей поделят), потом при импорте ошибки будут...

p.s: пока ты тут ответов ждешь уже можно было все вручную разбить, и запаковать в .gz как тебе надо...
p.s2: если у тебя с импортом больших файлов проблеммы посмотри, sypex dumper и это

Пробовал ей, 140 мб и все дальше говорит не возможно соединится с удаленным URL
Если увеличить
Цитата:

$linespersession = 3000; // Lines to be executed per one import session
то выдает ошибку... где то на 70 мб и дальше не идет...


А вручную 70 тыс строк... это сложно...даже до конца страницы дойдти проблема минут 5 думает

FireFenix 05.06.2009 13:34

Цитата:

Сообщение от C.C.C.P
Файлы режуться, но после этого не открываются поврежденный архив....

Мой вариант твоего скрипта.

Для текстовых файлов.

PHP код:

<?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 код:

<?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 строка


Время: 13:44