chmod +x split_dump.sh
./split_dump.sh dump.sql tables
# compress after split
./compress.sh tables
Last active
March 29, 2023 09:34
-
-
Save s00d/d1580892a4593c6f1ecf43145b7ec347 to your computer and use it in GitHub Desktop.
split mysql dump by tables
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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