一些常用的数据备份脚本

文章详细描述了如何使用shell脚本进行Elasticsearch、GitLab、PostgreSQL和Kubernetes中MySQL的备份,包括本地存储和远程服务器的备份过程,以及定期清理旧备份数据的策略。
摘要由CSDN通过智能技术生成

Elasticsearch备份

#!/bin/sh

set -x

today=`date +%Y%m%d`

curl --location --request PUT http://localhost:22063/_snapshot/es_bak --header 'Content-Type: application/json' --data-raw '{"type": "fs","settings":{"compress": true,"location": "/data/backup/es_bak"}}'

curl --location --request PUT http://localhost:22063/_snapshot/es_bak/snapshot_$today

# 监控快照状态,等待备份完成
while true; do
    status=$(curl --silent --location --request GET "http://localhost:22063/_snapshot/es_bak/$snapshot_name" | jq '.snapshots[0].state')
    
    if [ "$status" = '"SUCCESS"' ]; then
        echo "Snapshot $snapshot_name completed successfully."
        break
    elif [ "$status" = '"FAILED"' ]; then
        echo "Snapshot $snapshot_name failed."
        exit 1
    else
        echo "Snapshot in progress. Waiting..."
        sleep 60 # 每60秒检查一次
    fi
done

# 删除旧数据
seven_days_ago=`date -d "7 day ago" +"%Y%m%d"`
curl --location --request DELETE http://localhost:22063/_snapshot/es_bak/snapshot_$seven_days_ago

# 删除远程旧数据
ssh casia@172.18.116.127 "rm -rf /data/bakup/es_bak/*"


# 备份至远程服务器
scp -r /data/elasticsearch/backup/es_bak root@192.168.2.1:/data/bakup/

gitlab备份

#!/bin/sh

set -x

gitlab-rake gitlab:backup:create

path=/var/opt/gitlab/backups/
# 删除旧数据
find $path -type f  -mtime +7 | xargs rm -rvf

# 远程备份
find $path -type f  -ctime 0| xargs -i scp {} root@192.168.2.1:/data/bakup/gitlab

postgresql备份

#!/bin/sh

set -x

today=`date +%Y%m%d`

docker exec postgres bash -c "pg_dumpall -h localhost -p 5432 -U postgres > /var/lib/postgresql/data/pg_bak/$today.bak"

path=/data/postgis/pg_bak/
# 删除旧数据
find $path -type f  -mtime +7 | xargs rm -rvf

# 远程备份
find $path -type f  -ctime 0| xargs -i scp {} root@192.168.2.1:/data/bakup/pg_bak/

k8s中的mysql

#!/bin/bash

set -x

# 备份路径
BACKUP=/bitnami/mysql/bakup
# 当前时间
DATETIME=$(date +%Y-%m-%d)
echo "===备份开始==="
echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql"
# 数据库地址
HOST=localhost
# 数据库用户名
DB_USER=root
# 数据库密码
DB_PW=123456

# 后台系统数据库
DATABASE=mysql_bak
kubectl exec -it my-release-mysql-primary-0 -- bash -c "mysqldump -h localhost  -u${DB_USER} -p${DB_PW} --databases db1 db2 db3 > ${BACKUP}/$DATABASE-$DATETIME.sql"

echo "===导出成功,开始传输==="
# 拷贝到容器外
kubectl cp my-release-mysql-primary-0:${BACKUP}/$DATABASE-$DATETIME.sql /data/bakup/$DATABASE-$DATETIME.sql
# 删除备份
kubectl exec -it my-release-mysql-primary-0 -- bash -c "rm ${BACKUP}/$DATABASE-$DATETIME.sql"
# 备份到服务器B
scp /data/bakup/$DATABASE-$DATETIME.sql 192.168.2.1:/data/bakup/mysql_bak/
# 删除备份
# rm -rf /tmp/$DATABASE-$DATETIME.sql

# 删除7天前备份的数据,这边可以自行更改
find /data/bakup/ -mtime +7 -name "*.sql" -exec rm {} \;
echo "===数据库备份到服务器成功==="

删除7天前的文件

#!bin/bash
  
path1=/data/bakup/cp/
path2=/data/bakup/gitlab/
path3=/data/bakup/pg_bak

path1_file_count=$(ls -1 "$path1" | grep -v '^d' | wc -l)
if [ "$path1_file_count" -gt 7 ]; then
    find $path1 -type f  -mtime +7 | xargs rm -rvf
else
    echo "跳过 $path1"
fi

path2_file_count=$(ls -1 "$path2" | grep -v '^d' | wc -l)
if [ "$path2_file_count" -gt 7 ]; then
    find $path2 -type f  -mtime +7 | xargs rm -rvf
else
    echo "跳过 $path2"
fi


path3_file_count=$(ls -1 "$path3" | grep -v '^d' | wc -l)
if [ "$path3_file_count" -gt 7 ]; then
    find $path3 -type f  -mtime +7 | xargs rm -rvf
else
    echo "跳过 $path3"
fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llc的足迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值