Нарезка дампа c mysql-базами на отдельные базы или таблицы: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Rain (обсуждение | вклад) |
Rain (обсуждение | вклад) (Ы) |
||
Строка 5: | Строка 5: | ||
---- | ---- | ||
<source lang=bash> | <source lang=bash> | ||
#!/bin/bash | #!/bin/bash | ||
# By Rain ;) | # By Rain ;) | ||
Строка 11: | Строка 11: | ||
# Изменен 2008-04-17: добавлено описание | # Изменен 2008-04-17: добавлено описание | ||
# Изменен 2008-04-18: добавлено удаление "USE DATABASE" в начале дампов | # Изменен 2008-04-18: добавлено удаление "USE DATABASE" в начале дампов | ||
# Изменен 2009-06-08: переписал с использованием awk | |||
# | |||
# Проверка передачи переменных (да-да, примитивно, но надо ж ему хоть что-то проверять? :)) | # Проверка передачи переменных (да-да, примитивно, но надо ж ему хоть что-то проверять? :)) | ||
[ -z "$2" ] && echo "Error: directory is not set" && exit 1 | [ -z "$2" ] && echo "Error: directory is not set" && exit 1 | ||
[ ! -d "$2" ] && echo "Error: $2 not a directory" && exit 1 | [ ! -d "$2" ] && echo "Error: $2 not a directory" && exit 1 | ||
# Весь процесс | |||
# | awk '/^CREATE DATABASE/{nodb+=1; print "Processing DB "nodb"..."}; {print >> "'$2'/"nodb".sql"}' "${1}" | ||
echo -e "Renaming dumps..." | |||
ls -1 ${2}/*.sql | | |||
while read file | |||
do | |||
dumpname="$(head -n1 "${file}" | sed -re "s/^CREATE DATABASE|[\` ;]//g" -e "s@/\\*[\!a-zA-Z0-9_ ]*\*\/@@g")" | |||
sed -i -n '/^CREATE DATABASE/,/^USE/!p' "${file}" | |||
# Конечно, вряд ли окажутся 2 базы с одним именем, но кто знает... | |||
[ ! -e "${file%/*}/${dumpname}.sql" ] && mv "${file}" "${file%/*}/${dumpname}.sql" | |||
done | |||
echo "All done" | |||
</source> | </source> | ||
---- | ---- | ||
[[Category:Sed]][[Category:MySQL]][[Category:Bash-скрипт]][[Category:Скрипт]] | [[Category:Sed]][[Category:MySQL]][[Category:Bash-скрипт]][[Category:Скрипт]] |
Версия 20:11, 8 июня 2009
Cкрипт предназначен для разрезания MySQL-дампа с несколькими базами на отдельные базы. Файлы именуются по принципу название_базы.номер_в_общем_дампе.sql
- Использование
- ./db_split.sh файл_дампа.sql каталог_куда_складывать_дампы
#!/bin/bash
# By Rain ;)
# Создан 2008-04-01
# Изменен 2008-04-17: добавлено описание
# Изменен 2008-04-18: добавлено удаление "USE DATABASE" в начале дампов
# Изменен 2009-06-08: переписал с использованием awk
# Проверка передачи переменных (да-да, примитивно, но надо ж ему хоть что-то проверять? :))
[ -z "$2" ] && echo "Error: directory is not set" && exit 1
[ ! -d "$2" ] && echo "Error: $2 not a directory" && exit 1
# Весь процесс
awk '/^CREATE DATABASE/{nodb+=1; print "Processing DB "nodb"..."}; {print >> "'$2'/"nodb".sql"}' "${1}"
echo -e "Renaming dumps..."
ls -1 ${2}/*.sql |
while read file
do
dumpname="$(head -n1 "${file}" | sed -re "s/^CREATE DATABASE|[\` ;]//g" -e "s@/\\*[\!a-zA-Z0-9_ ]*\*\/@@g")"
sed -i -n '/^CREATE DATABASE/,/^USE/!p' "${file}"
# Конечно, вряд ли окажутся 2 базы с одним именем, но кто знает...
[ ! -e "${file%/*}/${dumpname}.sql" ] && mv "${file}" "${file%/*}/${dumpname}.sql"
done
echo "All done"