Browse Source

Repair database is a separate command

Bob Mottram 9 years ago
parent
commit
abdc9b593f
3 changed files with 91 additions and 50 deletions
  1. BIN
      man/freedombone-repair-database.1.gz
  2. 7
    50
      src/freedombone
  3. 84
    0
      src/freedombone-repair-database

BIN
man/freedombone-repair-database.1.gz View File


+ 7
- 50
src/freedombone View File

@@ -5569,61 +5569,18 @@ function backup_databases_script_header {
5569 5569
 }
5570 5570
 
5571 5571
 function repair_databases_script {
5572
+  if [ -f /etc/cron.hourly/repair ]; then
5573
+      sed -i "s|/usr/bin/repairdatabase|${PROJECT_NAME}-repair-database}|g" /etc/cron.hourly/repair
5574
+  fi
5575
+
5572 5576
   if grep -Fxq "repair_databases_script" $COMPLETION_FILE; then
5573 5577
       return
5574 5578
   fi
5579
+
5575 5580
   if [ ! -f $DATABASE_PASSWORD_FILE ]; then
5576 5581
       return
5577 5582
   fi
5578 5583
 
5579
-  echo '#!/bin/bash' > /usr/bin/repairdatabase
5580
-  echo '' >> /usr/bin/repairdatabase
5581
-  echo 'DATABASE=$1' >> /usr/bin/repairdatabase
5582
-  echo "EMAIL=$MY_EMAIL_ADDRESS" >> /usr/bin/repairdatabase
5583
-  echo "BACKUP_TYPE='daily'" >> /usr/bin/repairdatabase
5584
-  echo '' >> /usr/bin/repairdatabase
5585
-  echo 'if [ $2 ]; then' >> /usr/bin/repairdatabase
5586
-  echo '    BACKUP_TYPE=$2' >> /usr/bin/repairdatabase
5587
-  echo 'fi' >> /usr/bin/repairdatabase
5588
-  echo '' >> /usr/bin/repairdatabase
5589
-  echo -n 'MYSQL_ROOT_PASSWORD=$(cat ' >> /usr/bin/repairdatabase
5590
-  echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/repairdatabase
5591
-  echo 'TEMPFILE=/root/repairdatabase_$DATABASE' >> /usr/bin/repairdatabase
5592
-  echo '' >> /usr/bin/repairdatabase
5593
-  echo 'umask 0077' >> /usr/bin/repairdatabase
5594
-  echo '' >> /usr/bin/repairdatabase
5595
-  echo '# check the database' >> /usr/bin/repairdatabase
5596
-  echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
5597
-  echo '' >> /usr/bin/repairdatabase
5598
-  echo '# Attempt to repair the database if it contains errors' >> /usr/bin/repairdatabase
5599
-  echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
5600
-  echo '    mysqlcheck -u root --password=$MYSQL_ROOT_PASSWORD --auto-repair $DATABASE' >> /usr/bin/repairdatabase
5601
-  echo 'else' >> /usr/bin/repairdatabase
5602
-  echo '    # No errors were found, so exit' >> /usr/bin/repairdatabase
5603
-  echo '    rm -f $TEMPFILE' >> /usr/bin/repairdatabase
5604
-  echo '    exit 0' >> /usr/bin/repairdatabase
5605
-  echo 'fi' >> /usr/bin/repairdatabase
5606
-  echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
5607
-  echo '' >> /usr/bin/repairdatabase
5608
-  echo '# Check the database again' >> /usr/bin/repairdatabase
5609
-  echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
5610
-  echo '' >> /usr/bin/repairdatabase
5611
-  echo '# If it still contains errors then restore from backup' >> /usr/bin/repairdatabase
5612
-  echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
5613
-  echo '    mysql -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE -o < /var/backups/${DATABASE}_${BACKUP_TYPE}.sql' >> /usr/bin/repairdatabase
5614
-  echo '' >> /usr/bin/repairdatabase
5615
-  echo '    # Send a warning email' >> /usr/bin/repairdatabase
5616
-  echo '    echo "$DATABASE database corruption could not be repaired. Restored from backup." | mail -s "Freedombone database maintenance" $EMAIL' >> /usr/bin/repairdatabase
5617
-  echo '    rm -f $TEMPFILE' >> /usr/bin/repairdatabase
5618
-  echo '' >> /usr/bin/repairdatabase
5619
-  echo '    exit 1' >> /usr/bin/repairdatabase
5620
-  echo 'fi' >> /usr/bin/repairdatabase
5621
-  echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
5622
-  echo '' >> /usr/bin/repairdatabase
5623
-  echo 'exit 0' >> /usr/bin/repairdatabase
5624
-  chmod 600 /usr/bin/repairdatabase
5625
-  chmod +x /usr/bin/repairdatabase
5626
-
5627 5584
   echo '#!/bin/bash' > /etc/cron.hourly/repair
5628 5585
   echo '' >> /etc/cron.hourly/repair
5629 5586
   chmod 600 /etc/cron.hourly/repair
@@ -7516,7 +7473,7 @@ quit" > $INSTALL_DIR/batch.sql
7516 7473
   echo '  cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
7517 7474
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
7518 7475
 
7519
-  echo '/usr/bin/repairdatabase gnusocial' >> /etc/cron.hourly/repair
7476
+  echo "${PROJECT_NAME}-repair-database gnusocial" >> /etc/cron.hourly/repair
7520 7477
 
7521 7478
   nginx_ensite $MICROBLOG_DOMAIN_NAME
7522 7479
   service php5-fpm restart
@@ -7838,7 +7795,7 @@ quit" > $INSTALL_DIR/batch.sql
7838 7795
   echo '  cp -f /var/backups/hubzilla_weekly.sql /var/backups/hubzilla_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
7839 7796
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
7840 7797
 
7841
-  echo '/usr/bin/repairdatabase hubzilla' >> /etc/cron.hourly/repair
7798
+  echo "${PROJECT_NAME}-repair-database hubzilla" >> /etc/cron.hourly/repair
7842 7799
 
7843 7800
   chown -R www-data:www-data /var/www/$HUBZILLA_DOMAIN_NAME/htdocs
7844 7801
 

+ 84
- 0
src/freedombone-repair-database View File

@@ -0,0 +1,84 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Checks and repairs a given database
12
+
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2015 Bob Mottram <bob@robotics.uk.to>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
+# GNU General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU General Public License
29
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
30
+
31
+PROJECT_NAME='freedombone'
32
+COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
33
+CONFIG_FILE=$HOME/${PROJECT_NAME}.cfg
34
+
35
+export TEXTDOMAIN=${PROJECT_NAME}-repair-databases
36
+export TEXTDOMAINDIR="/usr/share/locale"
37
+
38
+# The database to be repaired
39
+DATABASE=$1
40
+
41
+ADMIN_USERNAME=$(cat $COMPLETION_FILE | grep "Admin user" | -nawk -F ':' '{print $2}')
42
+ADMIN_EMAIL_ADDRESS=${ADMIN_USERNAME}@${HOSTNAME}
43
+
44
+# Frequency - daily/weekly
45
+BACKUP_TYPE='daily'
46
+
47
+MYSQL_ROOT_PASSWORD=$(cat /root/dbpass)
48
+TEMPFILE=/root/repairdatabase_$DATABASE
49
+
50
+umask 0077
51
+
52
+if [ $2 ]; then
53
+    BACKUP_TYPE=$2
54
+fi
55
+
56
+# check the database
57
+mysqlcheck -c -u root --password="$MYSQL_ROOT_PASSWORD" $DATABASE > $TEMPFILE
58
+
59
+# Attempt to repair the database if it contains errors
60
+if grep -q "Error" "$TEMPFILE"; then
61
+    mysqlcheck -u root --password="$MYSQL_ROOT_PASSWORD" --auto-repair $DATABASE
62
+else
63
+    # No errors were found, so exit
64
+    rm -f $TEMPFILE
65
+    exit 0
66
+fi
67
+rm -f $TEMPFILE
68
+
69
+# Check the database again
70
+mysqlcheck -c -u root --password="$MYSQL_ROOT_PASSWORD" $DATABASE > $TEMPFILE
71
+
72
+# If it still contains errors then restore from backup
73
+if grep -q "Error" "$TEMPFILE"; then
74
+    mysql -u root --password="$MYSQL_ROOT_PASSWORD" $DATABASE -o < /var/backups/${DATABASE}_${BACKUP_TYPE}.sql
75
+
76
+    # Send a warning email
77
+    echo $"$DATABASE database corruption could not be repaired. Restored from backup." | mail -s $"${PROJECT_NAME} database maintenance" $ADMIN_EMAIL_ADDRESS
78
+    rm -f $TEMPFILE
79
+
80
+    exit 1
81
+fi
82
+rm -f $TEMPFILE
83
+
84
+exit 0