Skip to content

Instantly share code, notes, and snippets.

@s00d
Last active March 29, 2023 09:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s00d/d1580892a4593c6f1ecf43145b7ec347 to your computer and use it in GitHub Desktop.
Save s00d/d1580892a4593c6f1ecf43145b7ec347 to your computer and use it in GitHub Desktop.
split mysql dump by tables
chmod +x split_dump.sh

./split_dump.sh dump.sql tables

# compress after split
./compress.sh tables
#!/bin/bash
# Задаем путь к папке, которую нужно архивировать
source_dir=${1:-"./tables"}
# Задаем путь к папке, в которую будут сохранены архивы
target_dir=${2:-"./archives"}
# Переходим в папку источника
cd "$source_dir" || exit
mkdir -p "$target_dir"
# Итерируемся по всем файлам в папке
for file in *; do
# Игнорируем каталоги
if [[ -d $file ]]; then
continue
fi
# Создаем имя архива на основе имени файла
archive_name="${file%.*}.zip"
# Создаем архив с максимальным уровнем компрессии, разбиваем его на чанки по 250 МБ и выводим индикатор прогресса в процентах с именем файла
pv -N "$file" "$file" | zip -q -9 -r -s 250m "$target_dir/$archive_name" -
# Подсчитываем размер исходного файла и сжатого архива
original_size=$(du -h "$file" | cut -f1)
compressed_size=$(du -h "$target_dir/$archive_name" | cut -f1)
# Вычисляем процент сжатия и выводим его на экран
compressed_percentage=$(echo "scale=2; (1-($compressed_size/$original_size))*100" | bc)
echo "Архив $archive_name создан. Размер исходного файла: $original_size. Размер архива: $compressed_size ($compressed_percentage% сжатия)"
done
#!/bin/bash
# Задаем значения по умолчанию для параметров
input_file=${1:-"db.sql"}
output_dir=${2:-"tables"}
# Создаем каталог вывода, если он не существует
mkdir -p "$output_dir"
# Задаем имя лог-файла
log_file="log.txt"
# Очищаем лог-файл перед выполнением скрипта
> "$log_file"
pv "$input_file" | awk -F'[`]' '/DROP TABLE IF EXISTS/{i++;filename="'$output_dir'/"$2".sql";flag=1};flag==1{print > filename};/UNLOCK TABLES/{flag=0};{print "Processed: " NR " lines"}' 2>&1 | tee -a "$log_file" > /dev/null
echo "Script finished. Check the log file $log_file for details."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment