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-команд для удаления лишних таблиц.