programming:php:split-large-mysql-dump
Разделение больших MySQL дампов
Есть файл с большим количеством INSERT
INSERT INTO `dt_codes` VALUES ... INSERT INTO `dt_codes` VALUES ... INSERT INTO `dt_codes` VALUES ...
Создается он вот такой командой:
mysqldump -uUSER -pPASS --databases DATABASE_NAME --tables TABLE_NAME \ --extended-insert = FALSE > dump.sql
<?php set_time_limit(600); /* Number of 'insert' statements per file */ $max_lines_per_split = 50000; $dump_file = "dump.sql"; $split_file = "dump-split-%d.sql"; $dump_directory = "./sql-dump/"; $line_count = 0; $file_count = 1; $total_lines = 0; $handle = @fopen($dump_file, "r"); $buffer = ""; if ($handle) { while(($line = fgets($handle)) !== false) { /* Only read 'insert' statements */ if(!preg_match("/insert/i", $line)) continue; $buffer .= $line; $line_count++; /* Copy buffer to the split file */ if($line_count >= $max_lines_per_split) { $file_name = $dump_directory . sprintf($split_file, $file_count); $out_write = @fopen($file_name, "w+"); fputs($out_write, $buffer); fclose($out_write); $buffer = ''; $line_count = 0; $file_count++; } } if($buffer) { /* Write out the remaining buffer */ $file_name = $dump_directory . sprintf($split_file, $file_count); $out_write = @fopen($file_name, "w+"); fputs($out_write, $buffer); fclose($out_write); } fclose($handle); echo "done."; }
Разрезаем дамп на мелкие файлы и архивируем:
gzip dump-split-*
programming/php/split-large-mysql-dump.txt · Последнее изменение: 2017/03/27 11:26 — artur