diff --git a/backUpDB.sh b/backUpDB.sh index 4bfaed8..62bee37 100755 --- a/backUpDB.sh +++ b/backUpDB.sh @@ -29,7 +29,8 @@ else docker restart maria sleep 10 fi -/usr/bin/mysqldump --column-statistics=0 --user="${dbUser}" --password="${dbPassword}" --host="${dbHost}" --port=${dbPort} ${dbName} >/tmp/${hostName}_${dbName}.sql +#/usr/bin/mysqldump --column-statistics=0 --user="${dbUser}" --password="${dbPassword}" --host="${dbHost}" --port=${dbPort} ${dbName} >/tmp/${hostName}_${dbName}.sql +/usr/bin/mysqldump --column-statistics=0 -uroot -pAbcd@1234 -h0.0.0.0 gitea > /tmp/fenny_gitea.sql sed -i 's/lower_case_table_names=0/lower_case_table_names=1/g' /root/mysql/conf/append.cnf rm sql -fr || true diff --git a/bk.sh b/bk.sh new file mode 100755 index 0000000..e305208 --- /dev/null +++ b/bk.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# 获取今天的日期信息 +current_year=$(date +%Y) +current_month=$(date +%m) +current_day=$(date +%d) +# 定义指定的日子(1-7 表示周一到周日) +today=1 # 例如:3 表示周三 + +current_weekday=$(date +%u) # 1-7 (周一到周日) + +# 首先确认今天是否为指定的日子 +if [[ $current_weekday -ne $today ]]; then + echo "今天不是周${today},退出脚本。" + exit 0 +fi + +# 获取当前月份的天数 +last_day_of_month=$(date -d "$current_year-$current_month-01 +1 month -1 day" +%d) + +# 计算本月的第几个指定的日子 +today_count=0 +for ((day = 1; day <= last_day_of_month; day++)); do + # 使用明确的日期格式 YYYY-MM-DD + weekday=$(date -d "${current_year}-${current_month}-${day}" +%u) + if [[ $weekday -eq $today ]]; then + # 如果是指定的日子,且日期小于等于今天,则计入统计 + if [[ $day -le $current_day ]]; then + ((today_count++)) + fi + fi +done + +# 打印调试信息 +echo "本月的第几个指定的日子: $today_count" + +# 根据第几个指定的日子设置参数 +case $today_count in +1) + param1="miracle" + param2="elasticsearch-0" + ;; +2) + param1="lydia" + param2="elasticsearch-1" + ;; +3) + param1="emma" + param2="elasticsearch-2" + ;; +4) + param1="niyon" + param2="elasticsearch-3" + ;; +*) + echo "今天不是本月的第 1 至第 4 个指定日子,退出脚本。" + exit 0 + ;; +esac + +# 固定的第三个参数 +param3="/mnt/toshiba/instanceBackUp" + +# 打印参数并运行 vmBackUp.sh +echo "运行 vmBackUp.sh 参数: $param1 $param2 $param3" +./vmBackUp.sh "$param1" "$param2" "$param3" diff --git a/vmBackUp.sh b/vmBackUp.sh new file mode 100755 index 0000000..cd2ac6b --- /dev/null +++ b/vmBackUp.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +# 检查参数是否提供 +if [ $# -ne 3 ]; then + echo "用法: $0 <虚机名称> <节点名称> <备份路径>" + echo "示例: $0 emma es-node1 /backups" + exit 1 +fi + +VM_NAME=$1 # 虚机名称,例如 "emma" +NODE_NAME=$2 # ES节点名称,例如 "es-node1" +BACKUP_DIR=$3 # 备份路径,例如 "/backups" +BACKUP_FILE="${BACKUP_DIR}/${VM_NAME}-backup.tar.gz" # 最新备份文件名 +ES_HOST="elastic.k8s.xunlang.home" # ES集群地址,根据实际环境修改 + +# 确保备份目录存在 +if [ ! -d "$BACKUP_DIR" ]; then + echo "创建备份目录: $BACKUP_DIR" + mkdir -p "$BACKUP_DIR" +fi + +# 步骤1: 禁用ES集群分片分配 +echo "禁用ES集群分片分配..." +curl -u elastic:your_secure_password -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ + "persistent": { + "cluster.routing.allocation.enable": "none" + } +}' +if [ $? -ne 0 ]; then + echo "错误: 禁用ES集群分片分配失败" + exit 1 +fi +echo "" + +# 步骤2: 停止虚机 +echo "停止虚机: $VM_NAME..." +lxc stop "$VM_NAME" +if [ $? -ne 0 ]; then + echo "错误: 无法停止虚机 $VM_NAME" + exit 1 +fi + +# 步骤3: 管理备份文件(保留最近3份) +echo "管理备份文件..." +if [ -f "${BACKUP_FILE}_bak1" ]; then + mv "${BACKUP_FILE}_bak1" "${BACKUP_FILE}_bak2" +fi +if [ -f "$BACKUP_FILE" ]; then + mv "$BACKUP_FILE" "${BACKUP_FILE}_bak1" +fi + +# 步骤4: 执行备份 +echo "开始备份虚机 $VM_NAME 到 $BACKUP_FILE..." +lxc export "$VM_NAME" "$BACKUP_FILE" +if [ $? -ne 0 ]; then + echo "错误: 备份失败" + lxc start "$VM_NAME" # 备份失败时尝试重启虚机 + exit 1 +fi + +# 步骤5: 重启虚机 +echo "重启虚机: $VM_NAME..." +lxc start "$VM_NAME" +if [ $? -ne 0 ]; then + echo "错误: 无法启动虚机 $VM_NAME" + exit 1 +fi + +# 步骤6: 等待节点加入ES集群 +echo "等待节点 $NODE_NAME 加入ES集群..." +MAX_WAIT=60 # 最大等待时间(秒) +WAIT_INTERVAL=5 # 检查间隔(秒) +ELAPSED=0 +while [ $ELAPSED -lt $MAX_WAIT ]; do + NODE_COUNT=$(curl -s "http://${ES_HOST}/_cat/nodes" | grep -c "$NODE_NAME") + if [ "$NODE_COUNT" -ge 1 ]; then + echo "节点 $NODE_NAME 已加入集群" + break + fi + sleep $WAIT_INTERVAL + ELAPSED=$((ELAPSED + WAIT_INTERVAL)) +done +if [ $ELAPSED -ge $MAX_WAIT ]; then + echo "警告: 等待超时,节点 $NODE_NAME 未及时加入集群" +fi + +# 步骤7: 重新启用ES集群分片分配 +echo "重新启用ES集群分片分配..." +curl -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ + "persistent": { + "cluster.routing.allocation.enable": "all" + } +}' +if [ $? -ne 0 ]; then + echo "错误: 重新启用ES集群分片分配失败" + exit 1 +fi +echo "" + +echo "备份完成!最新备份文件: $BACKUP_FILE"