1- #! /usr/ bin/env bash
1+ #! /bin/sh
22
33# === CONFIG ===
44DIR_PWD=$( pwd)
@@ -7,9 +7,19 @@ MYCNF='/etc/mysql/debian.cnf'
77MYDATA=' /var/lib/mysql'
88
99# === FUNCTIONS ===
10+ database_exists ()
11+ {
12+ RESULT=` mysqlshow --defaults-extra-file=$MYCNF $@ | grep -v Wildcard | grep -o $@ `
13+ if [ " $RESULT " == " $@ " ]; then
14+ echo YES
15+ else
16+ echo NO
17+ fi
18+ }
19+
1020f_log ()
1121{
12- logger " $ RESTORE : $@ "
22+ logger " RESTORE: $@ "
1323}
1424
1525usage ()
@@ -21,6 +31,7 @@ This script restore databases.
2131
2232OPTIONS:
2333 -e Exclude databases
34+ -s Selected databases
2435 -c Check innochecksum of table after import
2536EOF
2637}
@@ -44,14 +55,8 @@ restore()
4455 exit 1
4556 fi
4657
47- f_log " Create databases"
48- for i in $( ls -1 $DIR_PWD /* /__create.sql) ; do
49- if [ -f " $i " ]; then
50- mysql --defaults-extra-file=$MYCNF < $i 2> /dev/null
51- fi
52- done
53-
54- for i in ` ls -1 -d $DIR_PWD /* /` ; do
58+ for i in $( ls -1 -d $DIR_PWD /* ) ; do
59+
5560 BDD=$( basename $i )
5661
5762 for skip in " ${DATABASES_SKIP[@]} " ; do
@@ -62,88 +67,115 @@ restore()
6267 fi
6368 done
6469
65- f_log " Import tables into $BDD "
70+ for select in " ${DATABASES_SELECTED[@]} " ; do
71+ if [ $BDD != $select ]; then
72+ f_log " Skip database $BDD "
73+ unset BDD
74+ break
75+ fi
76+ done
77+
78+ if [ $BDD ]; then
6679
67- if [ $BDD ]; then
68- for TABLE in ` ls -1 $i | grep -v __ | awk -F. ' {print $1}' | sort | uniq` ; do
80+ if [ -f $DIR_PWD /$BDD /__create.sql ]; then
81+ f_log " Create database $BDD "
82+ mysql --defaults-extra-file=$MYCNF < $DIR_PWD /$BDD /__create.sql 2> /dev/null
83+ fi
6984
70- f_log " Create table: $TABLE "
71- mysql --defaults-extra-file=$MYCNF $BDD -e " SET foreign_key_checks = 0;
72- DROP TABLE IF EXISTS $TABLE ;
73- SOURCE $DIR_PWD /$BDD /$TABLE .sql;
74- SET foreign_key_checks = 1;"
75-
76- if [ -f " $DIR_PWD /$BDD /$TABLE .txt.bz2" ]; then
77- f_log " < $TABLE "
78- if [ -f " $DIR_PWD /$BDD /$TABLE .txt" ]; then
79- rm $DIR_PWD /$BDD /$TABLE .txt
80- fi
81- bunzip2 $DIR_PWD /$BDD /$TABLE .txt.bz2
82- fi
83-
84- if [ -f " $DIR_PWD /$BDD /$TABLE .txt" ]; then
85- f_log " + $TABLE "
85+ if [ $( database_exists $BDD ) != " YES" ]; then
86+ f_log " Error: Database $BDD dose not exists" ;
87+ else
88+
89+ tables=$( ls -1 $i | grep -v __ | awk -F. ' {print $1}' | sort | uniq)
90+
91+ f_log " Create tables in $BDD "
92+ for TABLE in $tables ; do
93+ f_log " Create table: $BDD /$TABLE "
8694 mysql --defaults-extra-file=$MYCNF $BDD -e " SET foreign_key_checks = 0;
87- LOAD DATA INFILE ' $DIR_PWD / $BDD / $ TABLE.txt'
88- INTO TABLE $ TABLE ;
95+ DROP TABLE IF EXISTS $ TABLE;
96+ SOURCE $DIR_PWD / $BDD / $ TABLE.sql ;
8997 SET foreign_key_checks = 1;"
90-
91- if [ ! -f " $DIR_PWD /$BDD /$TABLE .txt.bz2" ]; then
92- f_log " > $TABLE "
93- bzip2 $DIR_PWD /$BDD /$TABLE .txt
98+ done
99+
100+ f_log " Import data into $BDD "
101+ for TABLE in $tables ; do
102+ f_log " Import data into $BDD /$TABLE "
103+
104+ if [ -f " $DIR_PWD /$BDD /$TABLE .txt.bz2" ]; then
105+ f_log " < $TABLE "
106+ if [ -f " $DIR_PWD /$BDD /$TABLE .txt" ]; then
107+ rm $DIR_PWD /$BDD /$TABLE .txt
108+ fi
109+ bunzip2 $DIR_PWD /$BDD /$TABLE .txt.bz2
94110 fi
95- fi
96-
97- if [ $check ]; then
98- # Check INNODB table
99- if [ -f " $MYDATA /$BDD /$TABLE .ibd" ]; then
100- if [ ! ` innochecksum $MYDATA /$BDD /$TABLE .ibd` ]; then
101- f_log " $TABLE [OK]"
102- else
103- f_log " $TABLE [ERR]"
111+
112+ if [ -f " $DIR_PWD /$BDD /$TABLE .txt" ]; then
113+ f_log " + $TABLE "
114+ mysql --defaults-extra-file=$MYCNF $BDD -e " SET foreign_key_checks = 0;
115+ LOAD DATA INFILE '$DIR_PWD /$BDD /$TABLE .txt'
116+ INTO TABLE $TABLE ;
117+ SET foreign_key_checks = 1;"
118+
119+ if [ ! -f " $DIR_PWD /$BDD /$TABLE .txt.bz2" ]; then
120+ f_log " > $TABLE "
121+ bzip2 $DIR_PWD /$BDD /$TABLE .txt
104122 fi
105123 fi
106- fi
107-
108- done
109-
110- f_log " Import routines into $BDD "
111- if [ -f " $DIR_PWD /$BDD /__routines.sql" ]; then
112- mysql --defaults-extra-file=$MYCNF $BDD < $DIR_PWD /$BDD /__routines.sql 2> /dev/null
124+
125+ if [ $DATABASES_TABLE_CHECK ]; then
126+ # Check INNODB table
127+ if [ -f " $MYDATA /$BDD /$TABLE .ibd" ]; then
128+ if [ ! $( innochecksum $MYDATA /$BDD /$TABLE .ibd) ]; then
129+ f_log " $TABLE [OK]"
130+ else
131+ f_log " $TABLE [ERR]"
132+ fi
133+ fi
134+ fi
135+ done
136+
137+ if [ -f " $DIR_PWD /$BDD /__routines.sql" ]; then
138+ f_log " Import routines into $BDD "
139+ mysql --defaults-extra-file=$MYCNF $BDD < $DIR_PWD /$BDD /__routines.sql 2> /dev/null
140+ fi
141+
142+ if [ -f " $DIR_PWD /$BDD /__views.sql" ]; then
143+ f_log " Import views into $BDD "
144+ mysql --defaults-extra-file=$MYCNF $BDD < $DIR_PWD /$BDD /__views.sql 2> /dev/null
145+ fi
146+
113147 fi
114-
115- f_log " Import views into $BDD "
116- if [ -f " $DIR_PWD /$BDD /__views.sql" ]; then
117- mysql --defaults-extra-file=$MYCNF $BDD < $DIR_PWD /$BDD /__views.sql 2> /dev/null
118- fi
119-
120148 fi
121149 done
122150
151+ f_log " Flush privileges;"
123152 mysql --defaults-extra-file=$MYCNF -e " flush privileges;"
124153
125154 f_log " ** END **"
126155}
127156
128157# === EXECUTE ===
129- while getopts " :e:c:" opt;
158+ while getopts " :e:c:s: " opt;
130159do
131160 case ${opt} in
132161 e)
133162 exclude=${OPTARG}
134163 IFS=, read -r -a DATABASES_SKIP <<< " $exclude"
135164 ;;
165+ s)
166+ selected=${OPTARG}
167+ IFS=, read -r -a DATABASES_SELECTED <<< " $selected"
168+ ;;
136169 c)
137- check =1
170+ DATABASES_TABLE_CHECK =1
138171 ;;
139172 * )
140173 usage
141174 exit 1
142175 ;;
143176 esac
144177done
145-
146- shift " $(( OPTIND - 1 )) "
178+ # shift "$((OPTIND - 1))"
147179
148180# === AUTORUN ===
149181restore
0 commit comments