Repair database is a separate command
This commit is contained in:
parent
bafed779e3
commit
abdc9b593f
Binary file not shown.
|
@ -5569,61 +5569,18 @@ function backup_databases_script_header {
|
|||
}
|
||||
|
||||
function repair_databases_script {
|
||||
if [ -f /etc/cron.hourly/repair ]; then
|
||||
sed -i "s|/usr/bin/repairdatabase|${PROJECT_NAME}-repair-database}|g" /etc/cron.hourly/repair
|
||||
fi
|
||||
|
||||
if grep -Fxq "repair_databases_script" $COMPLETION_FILE; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -f $DATABASE_PASSWORD_FILE ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo '#!/bin/bash' > /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo 'DATABASE=$1' >> /usr/bin/repairdatabase
|
||||
echo "EMAIL=$MY_EMAIL_ADDRESS" >> /usr/bin/repairdatabase
|
||||
echo "BACKUP_TYPE='daily'" >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo 'if [ $2 ]; then' >> /usr/bin/repairdatabase
|
||||
echo ' BACKUP_TYPE=$2' >> /usr/bin/repairdatabase
|
||||
echo 'fi' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo -n 'MYSQL_ROOT_PASSWORD=$(cat ' >> /usr/bin/repairdatabase
|
||||
echo "$DATABASE_PASSWORD_FILE)" >> /usr/bin/repairdatabase
|
||||
echo 'TEMPFILE=/root/repairdatabase_$DATABASE' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo 'umask 0077' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo '# check the database' >> /usr/bin/repairdatabase
|
||||
echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo '# Attempt to repair the database if it contains errors' >> /usr/bin/repairdatabase
|
||||
echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
|
||||
echo ' mysqlcheck -u root --password=$MYSQL_ROOT_PASSWORD --auto-repair $DATABASE' >> /usr/bin/repairdatabase
|
||||
echo 'else' >> /usr/bin/repairdatabase
|
||||
echo ' # No errors were found, so exit' >> /usr/bin/repairdatabase
|
||||
echo ' rm -f $TEMPFILE' >> /usr/bin/repairdatabase
|
||||
echo ' exit 0' >> /usr/bin/repairdatabase
|
||||
echo 'fi' >> /usr/bin/repairdatabase
|
||||
echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo '# Check the database again' >> /usr/bin/repairdatabase
|
||||
echo 'mysqlcheck -c -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE > $TEMPFILE' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo '# If it still contains errors then restore from backup' >> /usr/bin/repairdatabase
|
||||
echo 'if grep -q "Error" "$TEMPFILE"; then' >> /usr/bin/repairdatabase
|
||||
echo ' mysql -u root --password=$MYSQL_ROOT_PASSWORD $DATABASE -o < /var/backups/${DATABASE}_${BACKUP_TYPE}.sql' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo ' # Send a warning email' >> /usr/bin/repairdatabase
|
||||
echo ' echo "$DATABASE database corruption could not be repaired. Restored from backup." | mail -s "Freedombone database maintenance" $EMAIL' >> /usr/bin/repairdatabase
|
||||
echo ' rm -f $TEMPFILE' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo ' exit 1' >> /usr/bin/repairdatabase
|
||||
echo 'fi' >> /usr/bin/repairdatabase
|
||||
echo 'rm -f $TEMPFILE' >> /usr/bin/repairdatabase
|
||||
echo '' >> /usr/bin/repairdatabase
|
||||
echo 'exit 0' >> /usr/bin/repairdatabase
|
||||
chmod 600 /usr/bin/repairdatabase
|
||||
chmod +x /usr/bin/repairdatabase
|
||||
|
||||
echo '#!/bin/bash' > /etc/cron.hourly/repair
|
||||
echo '' >> /etc/cron.hourly/repair
|
||||
chmod 600 /etc/cron.hourly/repair
|
||||
|
@ -7516,7 +7473,7 @@ quit" > $INSTALL_DIR/batch.sql
|
|||
echo ' cp -f /var/backups/gnusocial_weekly.sql /var/backups/gnusocial_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
|
||||
echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
|
||||
|
||||
echo '/usr/bin/repairdatabase gnusocial' >> /etc/cron.hourly/repair
|
||||
echo "${PROJECT_NAME}-repair-database gnusocial" >> /etc/cron.hourly/repair
|
||||
|
||||
nginx_ensite $MICROBLOG_DOMAIN_NAME
|
||||
service php5-fpm restart
|
||||
|
@ -7838,7 +7795,7 @@ quit" > $INSTALL_DIR/batch.sql
|
|||
echo ' cp -f /var/backups/hubzilla_weekly.sql /var/backups/hubzilla_monthly.sql' >> /etc/cron.monthly/backupdatabasesmonthly
|
||||
echo 'fi' >> /etc/cron.monthly/backupdatabasesmonthly
|
||||
|
||||
echo '/usr/bin/repairdatabase hubzilla' >> /etc/cron.hourly/repair
|
||||
echo "${PROJECT_NAME}-repair-database hubzilla" >> /etc/cron.hourly/repair
|
||||
|
||||
chown -R www-data:www-data /var/www/$HUBZILLA_DOMAIN_NAME/htdocs
|
||||
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# .---. . .
|
||||
# | | |
|
||||
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
|
||||
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
|
||||
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
|
||||
#
|
||||
# Freedom in the Cloud
|
||||
#
|
||||
# Checks and repairs a given database
|
||||
|
||||
# License
|
||||
# =======
|
||||
#
|
||||
# Copyright (C) 2015 Bob Mottram <bob@robotics.uk.to>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
PROJECT_NAME='freedombone'
|
||||
COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
|
||||
CONFIG_FILE=$HOME/${PROJECT_NAME}.cfg
|
||||
|
||||
export TEXTDOMAIN=${PROJECT_NAME}-repair-databases
|
||||
export TEXTDOMAINDIR="/usr/share/locale"
|
||||
|
||||
# The database to be repaired
|
||||
DATABASE=$1
|
||||
|
||||
ADMIN_USERNAME=$(cat $COMPLETION_FILE | grep "Admin user" | -nawk -F ':' '{print $2}')
|
||||
ADMIN_EMAIL_ADDRESS=${ADMIN_USERNAME}@${HOSTNAME}
|
||||
|
||||
# Frequency - daily/weekly
|
||||
BACKUP_TYPE='daily'
|
||||
|
||||
MYSQL_ROOT_PASSWORD=$(cat /root/dbpass)
|
||||
TEMPFILE=/root/repairdatabase_$DATABASE
|
||||
|
||||
umask 0077
|
||||
|
||||
if [ $2 ]; then
|
||||
BACKUP_TYPE=$2
|
||||
fi
|
||||
|
||||
# check the database
|
||||
mysqlcheck -c -u root --password="$MYSQL_ROOT_PASSWORD" $DATABASE > $TEMPFILE
|
||||
|
||||
# Attempt to repair the database if it contains errors
|
||||
if grep -q "Error" "$TEMPFILE"; then
|
||||
mysqlcheck -u root --password="$MYSQL_ROOT_PASSWORD" --auto-repair $DATABASE
|
||||
else
|
||||
# No errors were found, so exit
|
||||
rm -f $TEMPFILE
|
||||
exit 0
|
||||
fi
|
||||
rm -f $TEMPFILE
|
||||
|
||||
# Check the database again
|
||||
mysqlcheck -c -u root --password="$MYSQL_ROOT_PASSWORD" $DATABASE > $TEMPFILE
|
||||
|
||||
# If it still contains errors then restore from backup
|
||||
if grep -q "Error" "$TEMPFILE"; then
|
||||
mysql -u root --password="$MYSQL_ROOT_PASSWORD" $DATABASE -o < /var/backups/${DATABASE}_${BACKUP_TYPE}.sql
|
||||
|
||||
# Send a warning email
|
||||
echo $"$DATABASE database corruption could not be repaired. Restored from backup." | mail -s $"${PROJECT_NAME} database maintenance" $ADMIN_EMAIL_ADDRESS
|
||||
rm -f $TEMPFILE
|
||||
|
||||
exit 1
|
||||
fi
|
||||
rm -f $TEMPFILE
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue