· 9 years ago · Jun 28, 2017, 01:34 PM
1#!/bin/bash
2
3# Логин и пароль Ð´Ð»Ñ Ð´Ð¾Ñтупа к БД (локал)
4readonly mysqlUser=root
5readonly mysqlPassword=test
6
7# папка Ñ Ð´Ð°Ð¼Ð¿Ð°Ð¼Ð¸
8readonly dbDumpsDir=db_dumps
9
10# поддерживаемые ÑервиÑÑ‹
11readonly services=(crm sms client staff cl wallet email scoring pdl equifax)
12# имена БД mysql Ð´Ð»Ñ ÑервиÑов
13declare -A servicesDB=([crm]=gfk [sms]=gfk_sms [cl]=gfk_cl [wallet]=gfk_wallet [email]=gfk_email [scoring]=gfk_scoring [equifax]=gfk_equifax)
14
15# echoINF выводит информационное Ñообщение
16# Ñообщение находитÑÑ Ð² параметре $1
17function echoINF {
18 local stamp="$(date +%H:%M:%S\ %d.%m.%Y)"
19 echo -e "[INF] [$stamp] :: $1"
20 return 0
21}
22
23# echoERR выводит Ñообщение об ошибке
24# Ñообщение находитÑÑ Ð² параметре $1
25function echoERR {
26 local stamp="$(date +%H:%M:%S\ %d.%m.%Y)"
27 echo -e "[ERR] [$stamp] :: $1"
28 return 0
29}
30
31# applyDbDump оÑущеÑтвлÑет дейÑтвие Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из ÑервиÑов, переданных во внешнюю функцию
32function applyDbDump {
33 for db in "${servicesDB}"; do
34
35 #cd $dbDumpsDir
36
37 echoINF "Applying dump for $db ..."
38
39 local FileName=`find $dbDumpsDir -name '*$db*'`
40 local dumpFileName=$dbDumpsDir/$FileName
41 echoINF "Path to file $dumpFileName ..."
42 mysql -u $mysqlUser -p$mysqlPassword -D $db -e 'DROP DATABASE IF EXISTS '$db
43 mysql -u $mysqlUser -p$mysqlPassword -e 'CREATE DATABASE '$db' CHARSET=utf8'
44
45 if [ ! -f $dumpFileName ]; then
46 echoERR "File $dumpFileName does not exists"
47 continue
48 fi
49
50 # вывод прогреÑÑ-бара, разархивирование дампа, применение дампа
51 pv -i 0.1 -p -t -e $dumpFileName | gunzip | mysql -u $mysqlUser -p$mysqlPassword $db
52
53 if [ "$db" == "crm" ]; then
54 # Пару таблиц из БД gfk не дампим на продакшене что бы размер файла был меньше
55 # Ðто SQL-команды Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñтруктуры БД Ð´Ð»Ñ Ñтих таблиц
56 sqlCreateStaffAccessLog='CREATE TABLE `staff_access_log` (`id` int(11) NOT NULL AUTO_INCREMENT,`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`staff_id` int(11) NOT NULL,`url` varchar(2048) NOT NULL,`ip` varchar(100) NOT NULL,`post` text NOT NULL,PRIMARY KEY (`id`),KEY `staff_id` (`staff_id`),CONSTRAINT `staff_log_fk` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6317422 DEFAULT CHARSET=utf8'
57 sqlCreateMailHistory='CREATE TABLE `mail_history` (`id` int(11) NOT NULL AUTO_INCREMENT, `client_id` int(11) DEFAULT NULL, `staff_id` int(11) DEFAULT NULL, `text` text NOT NULL, `creation_date` datetime NOT NULL, `status` int(11) NOT NULL, `email` varchar(100) NOT NULL, `header` varchar(100) DEFAULT NULL, `send_date` timestamp NULL DEFAULT NULL, `attach` varchar(1) NOT NULL DEFAULT ''0'', `type` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `mail_history_fk_1` (`client_id`), KEY `mail_history_fk_2` (`staff_id`), CONSTRAINT `mail_history_fk_1` FOREIGN KEY (`client_id`) REFERENCES `client` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE, CONSTRAINT `mail_history_fk_2` FOREIGN KEY (`staff_id`) REFERENCES `staff` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=65413 DEFAULT CHARSET=utf8'
58 mysql -u $mysqlUser -p$mysqlPassword -D $db -e "$sqlCreateStaffAccessLog"
59 mysql -u $mysqlUser -p$mysqlPassword -D $db -e "$sqlCreateMailHistory"
60 fi
61 done
62}
63
64applyDbDump