Ver código fonte

Perform periodic database repairs

Bob Mottram 10 anos atrás
pai
commit
1a5ab4f94d
1 arquivos alterados com 60 adições e 0 exclusões
  1. 60
    0
      install-freedombone.sh

+ 60
- 0
install-freedombone.sh Ver arquivo

3263
   fi
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
 function install_gnu_social {
3320
 function install_gnu_social {
3267
   if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
3321
   if grep -Fxq "install_gnu_social" $COMPLETION_FILE; then
3268
       return
3322
       return
3276
 
3330
 
3277
   install_mariadb
3331
   install_mariadb
3278
   get_mariadb_password
3332
   get_mariadb_password
3333
+  repair_databases_script
3279
 
3334
 
3280
   apt-get -y --force-yes install php-gettext php5-curl php5-gd php5-mysql git
3335
   apt-get -y --force-yes install php-gettext php5-curl php5-gd php5-mysql git
3281
 
3336
 
3488
   echo '  cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
3543
   echo '  cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
3489
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
3544
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
3490
 
3545
 
3546
+  echo '/usr/bin/repairdatabase gnusocial' >> /etc/cron.hourly/repair
3547
+
3491
   nginx_ensite $MICROBLOG_DOMAIN_NAME
3548
   nginx_ensite $MICROBLOG_DOMAIN_NAME
3492
   service php5-fpm restart
3549
   service php5-fpm restart
3493
   service nginx restart
3550
   service nginx restart
3552
 
3609
 
3553
   install_mariadb
3610
   install_mariadb
3554
   get_mariadb_password
3611
   get_mariadb_password
3612
+  repair_databases_script
3555
 
3613
 
3556
   apt-get -y --force-yes install php5-common php5-cli php5-curl php5-gd php5-mysql php5-mcrypt git git
3614
   apt-get -y --force-yes install php5-common php5-cli php5-curl php5-gd php5-mysql php5-mcrypt git git
3557
 
3615
 
3767
   echo '  cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
3825
   echo '  cp -f /var/backups/redmatrix_weekly.sql /var/backups/redmatrix_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
3768
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
3826
   echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
3769
 
3827
 
3828
+  echo '/usr/bin/repairdatabase redmatrix' >> /etc/cron.hourly/repair
3829
+
3770
   nginx_ensite $REDMATRIX_DOMAIN_NAME
3830
   nginx_ensite $REDMATRIX_DOMAIN_NAME
3771
   service php5-fpm restart
3831
   service php5-fpm restart
3772
   service nginx restart
3832
   service nginx restart