#!/bin/bash #==============================================================================# # # Dieses Skript partitioniert die "log"-Tabelle für einen bestimmten Zeitraum. # # Sollte hier eine Partition nicht mit angegeben werden, dann wird sie gelöscht! # Neu hinzugekommene Partitionen werden angelegt. # #==============================================================================# # # echo "SELECT * FROM log;" | mysql -tS /var/run/mysqld/mysqld_3306.sock log_db # echo "SELECT * FROM log;" | mysql -tP3306 -hdb3306master.lan log_db # #==============================================================================# VERSION="v2018052400" ANZAHL="3" # es sollen die letzten 3 Monate liegen bleiben, was älter ist wird gelöscht DB_PORT="3306" DB_HOST="db${DB_PORT}master.lan" DB_NAME="log_db" DB_TABELLE="log" PRI_SPALTE="zeitpunkt" #------------------------------------------------------------------------------# ### dieses Skript darf nur auf dem Master laufen if [ "x$(ip a | fgrep " $(host ${DB_HOST} | awk '/has address/{print $NF}')/")" = "x" ] ; then #echo "Diese Maschine ist nicht der Master. ABBRUCH" exit 0 fi #------------------------------------------------------------------------------# partitionen() { for i in $(seq 0 $((${ANZAHL}+1)) | tac) do #echo "# i=${i}" P_JAHR="$(date -d"$((${i}-1)) month ago" +'%Y')" P_MONAT="$(date -d"$((${i}-1)) month ago" +'%m')" D_JAHR="$(date -d"$((${i}-2)) month ago" +'%Y')" D_MONAT="$(date -d"$((${i}-2)) month ago" +'%m')" echo " PARTITION p${P_JAHR}${P_MONAT} VALUES LESS THAN (UNIX_TIMESTAMP('${D_JAHR}-${D_MONAT}-01 00:00:00'))," done } #------------------------------------------------------------------------------# echo " ALTER TABLE \`${DB_NAME}\`.\`${DB_TABELLE}\` PARTITION BY RANGE (UNIX_TIMESTAMP(${PRI_SPALTE})) ( $(partitionen) PARTITION p0 VALUES LESS THAN MAXVALUE ) ; " | mysql -P${DB_PORT} -h${DB_HOST} ${DB_NAME}