Przeglądaj źródła

Perform periodic database repairs

Bob Mottram 10 lat temu
rodzic
commit
1a5ab4f94d
1 zmienionych plików z 60 dodań i 0 usunięć
  1. 60
    0
      install-freedombone.sh

+ 60
- 0
install-freedombone.sh Wyświetl plik

@@ -3263,6 +3263,60 @@ function backup_databases_script_header {
3263 3263
   fi
3264 3264
 }
3265 3265
 
3266
+function repair_databases_script {
3267
+  if grep -Fxq "repair_databases_script" $COMPLETION_FILE; then
3268
+      return
3269
+  fi
3270
+  echo '#!/bin/bash' > /usr/bin/repairdatabase
3271
+  echo '' >> /usr/bin/repairdatabase
3272
+  echo 'DATABASE=$1' >> /usr/bin/repairdatabase
3273
+  echo "EMAIL=$MY_USERNAME@$DOMAIN_NAME" >> /usr/bin/repairdatabase
3274
+  echo '' >> /usr/bin/repairdatabase
3275
+  echo "MYSQL_ROOT_PASSWORD='$MARIADB_PASSWORD'" >> /usr/bin/repairdatabase
3276
+  echo 'TEMPFILE=/root/repairdatabase_$DATABASE' >> /usr/bin/repairdatabase
3277
+  echo '' >> /usr/bin/repairdatabase
3278
+  echo 'umask 0077' >> /usr/bin/repairdatabase
3279
+  echo '' >> /usr/bin/repairdatabase
3280
+  echo '# check the database' >> /usr/bin/repairdatabase
3281
+  echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
3282
+  echo '' >> /usr/bin/repairdatabase
3283
+  echo '# Attempt to repair the database if it contains errors' >> /usr/bin/repairdatabase
3284
+  echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
3285
+  echo '    mysqlcheck -u root --password=$MYSQL_ROOT_PASSWORD --auto-repair $DATABASE' >> /usr/bin/repairdatabase
3286
+  echo 'else' >> /usr/bin/repairdatabase
3287
+  echo '    # No errors were found, so exit' >> /usr/bin/repairdatabase
3288
+  echo '    rm -f $TEMPFILE' >> /usr/bin/repairdatabase
3289
+  echo '    exit 0' >> /usr/bin/repairdatabase
3290
+  echo 'fi' >> /usr/bin/repairdatabase
3291
+  echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
3292
+  echo '' >> /usr/bin/repairdatabase
3293
+  echo '# Check the database again' >> /usr/bin/repairdatabase
3294
+  echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
3295
+  echo '' >> /usr/bin/repairdatabase
3296
+  echo '# If it still contains errors then restore from backup' >> /usr/bin/repairdatabase
3297
+  echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
3298
+  echo '    mysql -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE -o < /var/backups/${DATABASE}_daily.sql' >> /usr/bin/repairdatabase
3299
+  echo '' >> /usr/bin/repairdatabase
3300
+  echo '    # Send a warning email' >> /usr/bin/repairdatabase
3301
+  echo '    echo "$DATABASE database corruption could not be repaired. Restored from backup." | mail -s "Freedombone database maintenance" $EMAIL' >> /usr/bin/repairdatabase
3302
+  echo '    rm -f $TEMPFILE' >> /usr/bin/repairdatabase
3303
+  echo '' >> /usr/bin/repairdatabase
3304
+  echo '    exit 1' >> /usr/bin/repairdatabase
3305
+  echo 'fi' >> /usr/bin/repairdatabase
3306
+  echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
3307
+  echo '' >> /usr/bin/repairdatabase
3308
+  echo 'exit 0' >> /usr/bin/repairdatabase
3309
+  chmod 600 /usr/bin/repairdatabase
3310
+  chmod +x /usr/bin/repairdatabase
3311
+
3312
+  echo '#!/bin/bash' > /etc/cron.hourly/repair
3313
+  echo '' >> /etc/cron.hourly/repair
3314
+  chmod 600 /etc/cron.hourly/repair
3315
+  chmod +x /etc/cron.hourly/repair
3316
+
3317
+  echo 'repair_databases_script' >> $COMPLETION_FILE
3318
+}
3319
+
3266 3320
 function install_gnu_social {
3267 3321
   if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
3268 3322
       return
@@ -3276,6 +3330,7 @@ function install_gnu_social {
3276 3330
 
3277 3331
   install_mariadb
3278 3332
   get_mariadb_password
3333
+  repair_databases_script
3279 3334
 
3280 3335
   apt-get -y --force-yes install php-gettext php5-curl php5-gd php5-mysql git
3281 3336
 
@@ -3488,6 +3543,8 @@ quit" > $INSTALL_DIR/batch.sql
3488 3543
   echo '  cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
3489 3544
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
3490 3545
 
3546
+  echo '/usr/bin/repairdatabase gnusocial' >> /etc/cron.hourly/repair
3547
+
3491 3548
   nginx_ensite $MICROBLOG_DOMAIN_NAME
3492 3549
   service php5-fpm restart
3493 3550
   service nginx restart
@@ -3552,6 +3609,7 @@ function install_redmatrix {
3552 3609
 
3553 3610
   install_mariadb
3554 3611
   get_mariadb_password
3612
+  repair_databases_script
3555 3613
 
3556 3614
   apt-get -y --force-yes install php5-common php5-cli php5-curl php5-gd php5-mysql php5-mcrypt git git
3557 3615
 
@@ -3767,6 +3825,8 @@ quit" > $INSTALL_DIR/batch.sql
3767 3825
   echo '  cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
3768 3826
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
3769 3827
 
3828
+  echo '/usr/bin/repairdatabase redmatrix' >> /etc/cron.hourly/repair
3829
+
3770 3830
   nginx_ensite $REDMATRIX_DOMAIN_NAME
3771 3831
   service php5-fpm restart
3772 3832
   service nginx restart