dump archive tables

trunk@1870
Richard Fuchs 18 years ago
parent 67eaedfc3a
commit abe7cfe272

@ -10,6 +10,12 @@ MONTHS=3
# 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)
@ -28,6 +34,7 @@ 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
@ -43,6 +50,7 @@ delete_loop() {
AND $COL < DATE_ADD('$MSTART', INTERVAL 1 MONTH) LIMIT 1000;
SELECT ROW_COUNT()"
)
test $? = 0 || break
test "$RC" = 0 && break
@ -53,29 +61,59 @@ delete_loop() {
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
}
PATH="/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin"
for CMONTH in `seq 0 $((MONTHS_BACK-1))`; do
backup_table() {
TABLES=$1
DB=$2
COL=$3
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 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 ${ACC_TABLES}; do
MTABLE="${TABLE}_${TSTAMP}"
for TABLE in $TABLES; do
MTABLE="${TABLE}_${TSTAMP}"
$MYSQL $ACC_DB -e "CREATE TABLE IF NOT EXISTS $MTABLE LIKE $TABLE"
$MYSQL $DB -e "CREATE TABLE IF NOT EXISTS $MTABLE LIKE $TABLE"
delete_loop $ACC_DB $TABLE $MTABLE time $MSTART
delete_loop $DB $TABLE $MTABLE $COL $MSTART
done
done
}
for TABLE in ${CDR_TABLES}; do
MTABLE="${TABLE}_${TSTAMP}"
########################################################################
$MYSQL $CDR_DB -e "CREATE TABLE IF NOT EXISTS $MTABLE LIKE $TABLE"
PATH="/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin"
delete_loop $CDR_DB $TABLE $MTABLE start_time $MSTART
done
done
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