#!/bin/bash database="scopserv" filename="" new_tenant="" show_help=false if [ $# -eq 0 ]; then show_help=true fi for arg in "$@"; do case $arg in --help) show_help=true ;; --database=*) database="${arg#*=}" ;; --filename=*) filename="${arg#*=}" ;; --tenant=*) new_tenant="${arg#*=}" ;; esac done if [ "$show_help" = true ]; then echo "Usage: scopserv_restore.sh [OPTIONS]" echo "Options:" echo "--database=DATABASE Specify the database name (default: 'scopserv')" echo "--filename=FILENAME Specify the filename for restore" echo "--tenant=TENANT Specify the new tenant name (optional, defaults to original tenant)" echo "--help Display this help and exit" echo "" echo "Examples:" echo " Restore from a specific dump file for the same tenant:" echo " ./scopserv_restore.sh --filename=default_cdr.sql" echo "" echo " Restore from a specific dump file for a new tenant:" echo " ./scopserv_restore.sh --filename=default_cdr.sql --tenant=newtenant" echo "" echo " Restore from a specific dump file with a specified database:" echo " ./scopserv_restore.sh --filename=default_cdr.sql --database=another_db" exit 0 fi if [ -z "$filename" ]; then echo "Filename is required (--filename)" exit 1 fi nfilename=$(basename $filename .sql) original_tenant=$(echo "$nfilename" | awk -F'[_.]' '{print $1}') table=$(echo "$nfilename" | awk -F'[_.]' '{for (i=2; i/dev/null cat "$filename" | mysql ${database} target_columns=$(mysql ${database} -N -e "SHOW COLUMNS FROM ${table}" | awk '{print $1}' | paste -sd "," -) temp_columns=$(mysql ${database} -N -e "SHOW COLUMNS FROM ${temp_table}" | awk '{print $1}') common_columns="" for column in ${temp_columns}; do if echo "${target_columns}" | grep -q "${column}"; then common_columns="${common_columns}${common_columns:+,}${column}" fi done if [ -z "${common_columns}" ]; then echo "No common column found between source and target table." exit 1 fi insert_command="INSERT IGNORE INTO ${table} (${common_columns}) SELECT ${common_columns} FROM ${temp_table}; DROP TABLE ${temp_table};" if [ "$table" = "cdr" ]; then mysql ${database} -e "UPDATE $temp_table SET tenant='${new_tenant}'" elif [ "$table" = "queue_log" ]; then mysql ${database} -e "UPDATE $temp_table SET queuename=REPLACE(queuename, '${original_tenant}-', '${new_tenant}-')" mysql ${database} -e "UPDATE $temp_table SET agent=REPLACE(agent, '${original_tenant}-', '${new_tenant}-')" mysql ${database} -e "UPDATE $temp_table SET agent_id=REPLACE(agent_id, '${original_tenant}-', '${new_tenant}-')" mysql ${database} -e "DELETE q FROM queue_log q INNER JOIN queue_log_temp t ON t.callid = q.callid" elif [ "$table" = "cel" ]; then mysql ${database} -e "UPDATE $temp_table SET context=REPLACE(context, '${original_tenant}', '${new_tenant}')" fi mysql ${database} -e "${insert_command}" } restore_table echo "Restore completed."