Разбор Crab Mysqldump2Git
Различия
Здесь показаны различия между двумя версиями данной страницы.
правила_разработки:как_надо_делать:разбор_crab_mysqldump2git [09.02.2018 08:00] admin |
правила_разработки:как_надо_делать:разбор_crab_mysqldump2git [20.05.2019 15:18] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | Разбираем и правим до идеала, спрашиваем все, что непонятно \\ | ||
- | <code bash> | ||
- | #!/bin/bash | ||
- | |||
- | set -euEo pipefail | ||
- | echo "$0 $@ [$$] START" >&2 | ||
- | |||
- | if [ "${1:---help}" = "--help" ]; then | ||
- | echo "Example: backup: $0 --user=root --password=mypass --host=localhost DB_NAME BACKUP_DIR" | ||
- | echo 'Example: restore: git log; git checkout;' | ||
- | echo 'Example: restore: for f in *.sql.*; do cat $f >>new.sql; done;' | ||
- | echo 'Example: restore: /usr/bin/mysql -uroot -p123 < new.sql' | ||
- | exit 0 | ||
- | fi | ||
- | ### Подготовительная работа | ||
- | ### Подготавливаем глобальные переменные, что тождественно приватным property объекта self | ||
- | ### по сути понимаем что $USER Это | ||
- | USER="${1/--user=/}" | ||
- | PASSWORD="${2/--password=/}" | ||
- | DB_HOST="${3/--host=/}" | ||
- | DB_NAME="${4}" | ||
- | BACKUP_DIR="${5}" | ||
- | cd "$BACKUP_DIR" | ||
- | PREFIX="${DB_NAME}.sql" | ||
- | rm -f "$PREFIX.table."* | ||
- | |||
- | if [ ! -d .git ]; then | ||
- | git init . | ||
- | echo '*.sql' > .gitignore | ||
- | git add .gitignore | ||
- | git commit -m init | ||
- | fi | ||
- | |||
- | ### Описание пользовательских команд(методов) и функций | ||
- | mysql_dumpsplit(){ | ||
- | local table="" | ||
- | for table in "$PREFIX.table."*; do | ||
- | if [ $(stat -c %s "$table") -gt $((10*1024*1024)) ]; then | ||
- | split -a 4 -d -b 10M "$table" "$table.split." | ||
- | rm -f "$table"; | ||
- | fi | ||
- | done | ||
- | return 0 | ||
- | } | ||
- | |||
- | mysqldump --user="$USER" --host="$DB_HOST" --password="$PASSWORD" \ | ||
- | --opt -c --databases "$DB_NAME" \ | ||
- | --skip-quick \ | ||
- | --add-drop-table --add-drop-database --skip-extended-insert \ | ||
- | --create-options --single-transaction \ | ||
- | | csplit -n 4 -s -f"$PREFIX.table." - '/-- Table structure for table/' '{*}' | ||
- | |||
- | mysql_dumpsplit | ||
- | |||
- | git add . | ||
- | error=$( git commit -am $(date +%Y-%m-%d_%H-%M) 2>&1 ) \ | ||
- | || echo "$error" | grep -qm1 'nothing to commit' \ | ||
- | || { echo "$error"; exit 1; } | ||
- | git gc | ||
- | error=$( git push origin master 2>&1 )\ | ||
- | || echo "$error" | grep -qm1 'does not appear to be a git repositor' \ | ||
- | || { echo "$error"; exit 1; } | ||
- | |||
- | echo "$0 $@ [$$] SUCCESS" >&2 | ||
- | exit 0 | ||
- | </code> | ||
- | |||
- | {(rater>id=1|name=правила_разработки:как_надо_делать:разбор_crab_mysqldump2git|type=vote|trace=user|tracedetails=1)} | ||