BGBilling: удаление старых таблиц из базы данных

В процессе работы биллинговая система BGBilling создает таблицы имена которых имеют вид:

npay_add_cost_detail_${MODULE_ID}_${YEAR}${MONTH}
npay_detail_${MODULE_ID}_${YEAR}${MONTH}

В этих таблицах содержится информация по наработке модуля ${MODULE_ID} за ${MONTH} месяц ${YEAR} года. В связи с длительной эксплуатацией либо в связи с ошибкой конфигурации (например, здесь ) может быть создано большое число таких таблиц. Удалиить их можно следующим скриптом.

#!/bin/bash

# Andrey Smirnov <mail@ansmirnov.ru>
# https://ansmirnov.ru/bgbilling-clean-old-tables/

MYSQL_USER='***'
MYSQL_PASS='***'
MYSQL_DB='bgbilling'
MODULE_ID=7
START_DATE="201503"

TBL_NAME=npay_add_cost_detail_${MODULE_ID}_
COL_NUMB=6
echo "SHOW TABLES LIKE '${TBL_NAME}%';" | mysql -u${MYSQL_USER} -p${MYSQL_PASS} --skip-column-names ${MYSQL_DB} -A |
while read s
do
    dt=`echo $s | cut -d'_' -f${COL_NUM}`
    ddt=`echo $dt | sed 's/^0*//'`
    if [[ $ddt -lt ${START_DATE} ]]
    then
        echo "DROP TABLE IF EXISTS ${TBL_NAME}${dt};"
    fi
done

TBL_NAME=npay_detail_${MODULE_ID}_
COL_NUMB=4
echo "SHOW TABLES LIKE '${TBL_NAME}%';" | mysql -u${MYSQL_USER} -p${MYSQL_PASS} --skip-column-names ${MYSQL_DB} -A |
while read s
do
    dt=`echo $s | cut -d'_' -f${COL_NUM}`
    ddt=`echo $dt | sed 's/^0*//'`
    if [[ $ddt -lt ${START_DATE} ]]
    then
        echo "DROP TABLE IF EXISTS ${TBL_NAME}${dt};"
    fi
done

Переменным MYSQL_USER, MYSQL_PASS и MYSQL_DB необходимо присвоить значения пользователя, пароля и названия базы данных соответственно.

Переменной MODULE_ID необходимо присвоить ID модуля Npay, для которого чистим таблицы (в нашем случае 7).

Переменной START_DATE необходимо присвоить значение месяца в формате YYYYMM, до которого будут очищены таблицы. В нашем случае будут очищены таблицы до февраля 2015 года включительно.

После запуска скрипта на экран будет выведен набор SQL-команд для удаления лишних таблиц.