rename acc_cleaner -> cleanup-tools

trunk@3605
Richard Fuchs 17 years ago
parent 90b86d7f45
commit 1a7623ec7a

@ -1,119 +0,0 @@
#!/bin/sh
# backing up all data older than $MONTHS months
# Note: if set for example to 1, this will backup the overall month,
# not only the records older than 30 days. This logic applies generally,
# so it will go back $MONTHS months, and starting from there, backing up
# the full months back to $MONTHS_BACK
MONTHS=3
# from the starting month above, also go back $MONTHS_BACK months and
# backup them
MONTHS_BACK=6
# archive tables older than $ARCHIVE_MONTHS will be dumped to a file,
# gzipped and then dropped afterwards
ARCHIVE_MONTHS=12
# drop the dump files into $ARCHIVE_DIR
ARCHIVE_DIR=/tmp
# accounting database on proxies (openser) or db1 (accounting)
ACC_DB="accounting"
# accounting tables on proxies (acc) or db1 (acc acc_backup acc_trash)
ACC_TABLES="acc acc_backup acc_trash"
# cdr database (accounting)
CDR_DB="accounting"
# cdr tables on proxies (empty) or db1 (cdr)
CDR_TABLES="cdr"
# DB access credentials
DBUSER="root"
DBPASS="1freibier!"
DBHOST="localhost"
########################################################################
# command shortcut
MYSQL="mysql -u${DBUSER} -p${DBPASS} -h${DBHOST} --skip-column-names"
MYSQLDUMP="mysqldump -u${DBUSER} -p${DBPASS} -h${DBHOST} --opt"
delete_loop() {
DB=$1
TABLE=$2
MTABLE=$3
COL=$4
MSTART=$5
while :; do
RC=$(
$MYSQL $DB -e "INSERT INTO $MTABLE SELECT * FROM $TABLE
WHERE $COL >= '$MSTART'
AND $COL < DATE_ADD('$MSTART', INTERVAL 1 MONTH) LIMIT 1000;
SELECT ROW_COUNT()"
)
test $? = 0 || break
test "$RC" = 0 && break
$MYSQL $DB -e "DELETE $TABLE FROM $TABLE
LEFT JOIN $MTABLE
ON $TABLE.id = $MTABLE.id
WHERE $MTABLE.id IS NOT NULL"
done
}
archive_dump() {
TABLES=$1
DB=$2
for TABLE in $TABLES; do
MONTH=$ARCHIVE_MONTHS
while :; do
MTABLE="${TABLE}_$(date +%Y%m -d "$MONTH months ago")"
STATUS=$($MYSQL $DB -e "SHOW TABLE STATUS LIKE '$MTABLE'")
test -z "$STATUS" && break
MONTH=$(($MONTH + 1))
TARGET=$ARCHIVE_DIR/$MTABLE.$(date +%Y%m%d%H%M%S).sql
if ! $MYSQLDUMP $DB $MTABLE > $TARGET; then
echo "MySQL DUMP of table $MTABLE into file $TARGET failed" 1>&2
continue
fi
if ! nice gzip -9 $TARGET; then
echo "Gzipping of dump file $TARGET failed" 1>&2
rm -f "$TARGET" "$TARGET".gz
continue
fi
$MYSQL $DB -e "DROP TABLE $MTABLE"
done
done
}
backup_table() {
TABLES=$1
DB=$2
COL=$3
for CMONTH in `seq 0 $((MONTHS_BACK-1))`; do
TMONTHS=$((CMONTH+MONTHS))
TSTAMPL=$(date +%Y-%m -d "${TMONTHS} months ago")
TSTAMP=$(date +%Y%m -d "${TMONTHS} months ago")
MSTART="$TSTAMPL-01 00:00:00"
for TABLE in $TABLES; do
MTABLE="${TABLE}_${TSTAMP}"
$MYSQL $DB -e "CREATE TABLE IF NOT EXISTS $MTABLE LIKE $TABLE"
delete_loop $DB $TABLE $MTABLE $COL $MSTART
done
done
}
########################################################################
PATH="/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin"
backup_table "$ACC_TABLES" $ACC_DB time
backup_table "$CDR_TABLES" $CDR_DB start_time
archive_dump "$ACC_TABLES" $ACC_DB
archive_dump "$CDR_TABLES" $CDR_DB
Loading…
Cancel
Save