#!/bin/bash # # Name :restore_data.sh # Description : 恢复数据到待迁移主机 # Author : James # Version : 2.3 # Date :2025年10月20日 17:40 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Update # ● 添加crm-import目录 # ● 数据库备份添加删库参数 # ● 兼容5.0版本的服务启停 # ● 去除不必要的数据库重启 # ● 迁移日志保存至文件(/home/restore.log) # ● 备份检查文件夹是否存在 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # migrate_dir="/home/migrate" zip_file="/home/backup_data.tar.gz" sql_file="$migrate_dir/alldatabase.sql" dbpw="sg6d9ybbnMv41SKT" is_ver5=${is_ver5:-0} #清理历史残留的临时文件 rm -f /tmp/.restore_*_ok echo -e "\n\033[1;32m远端系统执行中\033[0m" #停止服务 if [ "$is_ver5" -eq 1 ]; then service monitor stop service bs stop service sc stop service mc stop service ma stop service dipcc stop service task-manager stop service freeswitch stop service nginx stop service php-fpm stop service redis stop else /etc/init.d/ipccd stop /etc/init.d/freeswitch stop /etc/init.d/nginx stop /etc/init.d/php-fpm stop /etc/init.d/redis stop fi #本机数据备份 rm -rf /home/ipcc.old /usr/local/freeswitch.old /var/www/web-v2/oem.old /usr/local/redis-5.0.4/run.old mkdir -p /home/ipcc.old /usr/local/freeswitch.old /var/www/web-v2/oem.old /usr/local/redis-5.0.4/run.old sub_dirs=("audio" "blacklist" "callee" "call-script" "certification" "electronic" "hide-number-tmp-dir" "inbound-plot" "ivraudio" "ivraudio1" "knowledge-file" "satisfaction" "theTxtModel" "upload-file" "voice-notify-audio" "crm-import") for dir in "${sub_dirs[@]}"; do [ -d "/home/ipcc/data/$dir" ] && mv "/home/ipcc/data/$dir" /home/ipcc.old/ done for dir in conf db sounds; do [ -d "/usr/local/freeswitch/$dir" ] && mv "/usr/local/freeswitch/$dir" /usr/local/freeswitch.old/ done [ -d "/var/www/web-v2/oem" ] && mv /var/www/web-v2/oem /var/www/web-v2/oem.old [ -f "/usr/local/redis-5.0.4/run/dump.rdb" ] && mv /usr/local/redis-5.0.4/run/dump.rdb /usr/local/redis-5.0.4/run.old/ #本机数据库备份校验 echo "备份本机数据库" if ! /usr/local/mysql/bin/mysqldump -uroot -p$dbpw --add-drop-database --all-databases >/home/mysql_$(date +%F).sql; then echo -e "\033[1;31m[错误] 目标机本机数据库备份失败!还原已终止。\033[0m\n" exit 1 fi #解压备份数据 mkdir -p $migrate_dir pigz -dc $zip_file | tar -xf - -C $migrate_dir #数据恢复 for dir in "${sub_dirs[@]}"; do [ -d "$migrate_dir/$dir" ] && mv "$migrate_dir/$dir" /home/ipcc/data/ done for dir in conf db sounds; do [ -d "$migrate_dir/$dir" ] && mv "$migrate_dir/$dir" /usr/local/freeswitch/ done [ -d "$migrate_dir/oem" ] && mv "$migrate_dir/oem" /var/www/web-v2/ [ -f "$migrate_dir/dump.rdb" ] && mv "$migrate_dir/dump.rdb" /usr/local/redis-5.0.4/run/ echo "恢复备份数据库" if /usr/local/mysql/bin/mysql -uroot -p$dbpw <$sql_file; then rm -rf $migrate_dir $zip_file else echo -e "\033[1;31m[错误] 数据库还原失败!\033[0m\n" exit 1 fi mkdir -pv /home/ipcc/data/record-tmp chown nobody:nobody /home/ipcc/data/record-tmp chmod 777 /home/ipcc/data/record-tmp sh /ipcc/sbin/check-record-dir.sh &>/dev/null #重启服务 if [ "$is_ver5" -eq 1 ]; then service freeswitch start service nginx start service php-fpm start service redis start service dipcc start service task-manager start service bs start service sc start service mc start service ma start service monitor start else /etc/init.d/freeswitch start /etc/init.d/nginx start /etc/init.d/php-fpm start /etc/init.d/redis start /etc/init.d/ipccd start fi #正常执行完毕创建成功标志 echo -e "\033[1;32m远端系统全部执行成功\033[0m\n" touch /tmp/.restore_${$}_ok