Skip to content

Commit 670e2ca

Browse files
committed
Update some fixes
1 parent 0147bdb commit 670e2ca

File tree

2 files changed

+119
-80
lines changed

2 files changed

+119
-80
lines changed

backup.sh

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env bash
1+
#!/bin/sh
22

33
# === CONFIG ===
44
BCKDIR='/var/backups/mysql'
@@ -59,37 +59,41 @@ backup()
5959

6060
query="SHOW databases;"
6161
local skip=(
62-
'information_schema'
63-
'performance_schema'
64-
'mysql'
62+
'information_schema'
63+
'performance_schema'
6564
)
6665
array_skip=( ${skip[@]} ${DATABASES_SKIP[@]} )
6766
skip_reg=`array_join "${array_skip[@]}"`
6867
f_log "Skip databases: $skip_reg"
69-
70-
for BDD in `mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e "$query" | egrep -v "$skip_reg"`; do
7168

72-
f_log "* Processing BDD $BDD"
69+
for BDD in $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e "$query" | egrep -v "$skip_reg"); do
7370

7471
mkdir -p $DST/$BDD 2>/dev/null 1>&2
7572
chown mysql:mysql $DST/$BDD
7673

7774
query="SHOW CREATE DATABASE \`$BDD\`;"
78-
mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e "$query" | awk -F"\t" '{ print $2 }' > $DST/$BDD/__create.sql
79-
f_log " > Export create"
75+
mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e "$query" | \
76+
awk -F"\t" '{ print $2 }' > $DST/$BDD/__create.sql
77+
if [ -f $DST/$BDD/__create.sql ]; then
78+
f_log " > Export create"
79+
fi
8080

8181
query="SHOW FULL TABLES WHERE Table_type = 'VIEW';"
82-
for viewName in `mysql --defaults-extra-file=$MYCNF $BDD -N -e "$query" | sed 's/|//' | awk '{print $1}'`
83-
do
82+
for viewName in $(mysql --defaults-extra-file=$MYCNF $BDD -N -e "$query" | sed 's/|//' | awk '{print $1}'); do
8483
mysqldump --defaults-file=$MYCNF $BDD $viewName >> $DST/$BDD/__views.sql
8584
done
86-
f_log " > Exports views"
85+
if [ -f $DST/$BDD/__views.sql ]; then
86+
f_log " > Exports views"
87+
fi
8788

88-
mysqldump --defaults-file=$MYCNF --routines --no-create-info --no-data --no-create-db --skip-opt $BDD | sed -e 's/DEFINER=[^*]*\*/\*/' > $DST/$BDD/__routines.sql
89-
f_log " > Exports Routines"
89+
mysqldump --defaults-file=$MYCNF --routines --no-create-info --no-data --no-create-db --skip-opt $BDD | \
90+
sed -e 's/DEFINER=[^*]*\*/\*/' > $DST/$BDD/__routines.sql
91+
if [ -f $DST/$BDD/__routines.sql ]; then
92+
f_log " > Exports Routines"
93+
fi
9094

9195
query="SHOW TABLES;"
92-
for TABLE in `mysql --defaults-extra-file=$MYCNF --skip-column-names -B $BDD -e "$query" | grep -v slow_log | grep -v general_log`; do
96+
for TABLE in $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B $BDD -e "$query" | grep -v slow_log | grep -v general_log); do
9397
f_log " ** Dump $BDD.$TABLE"
9498

9599
mysqldump --defaults-file=$MYCNF -T $DST/$BDD/ $BDD $TABLE
@@ -104,6 +108,9 @@ backup()
104108

105109
if [ -f "$DST/$BDD/$TABLE.txt" ]; then
106110
f_log " ** bzip2 $BDD/$TABLE.txt in background"
111+
if [ -f "$DST/$BDD/$TABLE.txt.bz2" ]; then
112+
rm $DST/$BDD/$TABLE.txt.bz2
113+
fi
107114
bzip2 $DST/$BDD/$TABLE.txt &
108115
else
109116
f_log " ** WARNING : $DST/$BDD/$TABLE.txt not found"
@@ -116,15 +123,15 @@ backup()
116123
f_log "** END **"
117124
}
118125

119-
while getopts ":e:r:" opt;
126+
while getopts ":e:r:s" opt;
120127
do
121128
case ${opt} in
122-
e)
129+
e)
123130
exclude=${OPTARG}
124131
IFS=, read -r -a DATABASES_SKIP <<< "$exclude"
125132
;;
126-
*)
127-
usage
133+
*)
134+
usag
128135
exit 1
129136
;;
130137
esac

restore.sh

Lines changed: 93 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env bash
1+
#!/bin/sh
22

33
# === CONFIG ===
44
DIR_PWD=$(pwd)
@@ -7,9 +7,19 @@ MYCNF='/etc/mysql/debian.cnf'
77
MYDATA='/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+
1020
f_log()
1121
{
12-
logger "$RESTORE: $@"
22+
logger "RESTORE: $@"
1323
}
1424

1525
usage()
@@ -21,6 +31,7 @@ This script restore databases.
2131
2232
OPTIONS:
2333
-e Exclude databases
34+
-s Selected databases
2435
-c Check innochecksum of table after import
2536
EOF
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;
130159
do
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
144177
done
145-
146-
shift "$((OPTIND - 1))"
178+
#shift "$((OPTIND - 1))"
147179

148180
# === AUTORUN ===
149181
restore

0 commit comments

Comments
 (0)