diff -Nur e-smith-mysql-2.6.0.old/root/etc/e-smith/events/actions/mysql-dump-tables e-smith-mysql-2.6.0/root/etc/e-smith/events/actions/mysql-dump-tables --- e-smith-mysql-2.6.0.old/root/etc/e-smith/events/actions/mysql-dump-tables 2021-01-27 14:37:21.692000000 -0500 +++ e-smith-mysql-2.6.0/root/etc/e-smith/events/actions/mysql-dump-tables 2021-01-27 14:43:58.451000000 -0500 @@ -1,6 +1,35 @@ #!/bin/sh status=$(/sbin/e-smith/config getprop mariadb status) +fixtables=$(/sbin/e-smith/config getprop mariadb autofixtables || echo "disabled") +if [ "$fixtables" = "enabled" ]; then + /sbin/e-smith/config delprop mariadb failsbackup +fi +failsbackup=$(/sbin/e-smith/config getprop mariadb failsbackup || echo "disabled") + + +onfailure () { + db=$1 + message="" + if [ "$failsbackup" = "enabled" ]; then + exit 1; + message="There was an error trying to dump database $db, please fix this db. We stop there without backups." + echo $message + echo $message | /usr/bin/mail -s "error on backup of $db MariaDB database" admin + fi + message="$message \nThere was an error trying to dump database $db, please check for table errors in this db. Forcing a backup of the corrupted DB." + mysqldump --force --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db"-failed.dump || message="$message \nFailed to force backup of corrupted db $db as $db-failed.dump" >&2 + if [ "$fixtables" = "enabled" ]; then + repair="failure" + message="$message \nTrying to auto-repair the db and do a backup after..." + mysqlcheck -s --auto-repair -c "$db" && \ + mysqldump --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump && repair="success" + message="$message \n => $repair" + fi + echo $message + echo $message | /usr/bin/mail -s "error on backup of $db MariaDB database" admin +} + if [ "$status" = "disabled" ] then echo "mysqld is disabled - no tables dumped" >&2 @@ -8,5 +37,5 @@ fi for db in $(mysql -BNre "show databases;"|egrep -vi "^information_schema$|^performance_schema$") do - mysqldump --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump || exit 1 + mysqldump --ignore-table=mysql.event --single-transaction --add-drop-table -QB "$db" -r /home/e-smith/db/mysql/"$db".dump || onfailure $db done