### 1、首次创建备份文件路径:
#在计算机上创建一个保存数据备份文件的路径,该路径要与elasticsearch.yml中配置的备份仓库路径一直,并且该文件夹路径授予最高权限。
`path.repo: /data/elasticsearch/backup`
### 2、首次创建备份仓库:
```shell
curl -H "Content-Type: application/json" -XPUT 127.0.0.1:9202/_snapshot/data_backup -d'
{
"type": "fs",
"settings": {
"compress": "true",
"location": "/data/elasticsearch/backup"
}
}'
```
### 3、修改备份仓库的备份和存储速度:
```shell
curl -H "Content-Type: application/json" -XPOST 127.0.0.1:9202/_snapshot/data_backup/my_index -d'
{
"type": "fs",
"settings": {
"location": "/data/elasticsearch/backup",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb",
"compress" : true
}
}'
# "max_snapshot_bytes_per_sec" : "50mb", # 备份速度
# "max_restore_bytes_per_sec" : "50mb" #存储速度
# 说明:备份仓库默认的备份和存储速度为20mb/s,可以通过手动修改仓库的速度,本人设置为50mb/s,可根据网络网速合理设置。
```
### 4、查看备份仓库
```shell
curl -H "Content-Type: application/json" -XGET 127.0.0.1:9202/_snapshot?pretty
```
### 5、查看备份仓库中所有索引备份信息
```shell
curl -H "Content-Type: application/json" -XGET 127.0.0.1:9202/_snapshot/_all?pretty
```
### 6、手动备份索引
#### 6.1、异步备份
```shell
curl -H "Content-Type: application/json" -XPUT 127.0.0.1:9202/_snapshot/data_backup/my_index_backup -d'
{
"indices": "my_index"
}'
# 说明:此命令备份是异步备份,也就是默认的备份方式,命令执行后会立即返回,备份在后台运行。
```
#### 6.2、同步备份
```shell
curl -H "Content-Type: application/json" -XPUT 127.0.0.1:9202/_snapshot/data_backup/my_index_backup?wait_for_completion=true -d'
{
"indices": "my_index"
}'
# 说明:添加了wait_for_completion参数,此命令备份是同步备份,只有等备份完成后命令才会返回,如果数据量大,可能会花费比较长的时间。
```
### 7.手动查看索引备份
```shell
curl -H "Content-Type: application/json" -XGET 127.0.0.1:9202/_snapshot/data_backup/my_index_backup
```
### 8.手动恢复索引备份
#### 8.1、异步恢复
```shell
curl -H "Content-Type: application/json" -XPOST 127.0.0.1:9202/_snapshot/data_backup/my_index_backup/_restore -d'
{
"indices": "my_index"
}'
# 说明:此命令恢复是异步恢复,也就是默认的恢复方式,命令执行后会立即返回,恢复在后台运行。
```
#### 8.2、同步恢复:
```shell
curl -H "Content-Type: application/json" -XPOST 127.0.0.1:9202/_snapshot/data_backup/my_index_backup/_restore?wait_for_completion=true -d'
{
"indices": "my_index"
}'
#说明:添加了wait_for_completion参数,此命令恢复是同步恢复,只有等恢复完成后命令才会返回,如果数据量大,可能会花费比较长的时间。
```
### 9、从仓库中删除一个快照
```shell
curl -X DELETE "127.0.0.1:9202/_snapshot/data_backup/my_index_backup"
```
### 10.es备份脚本
```shell
#!/bin/bash
IP=http://192.168.10.248
filename=es-`date +%Y%m%d%H`
es_backup_dir=/nfs/backes
es_backup_gz=/nfs/backes/es_back
logs=/nfs/backes/log
#index=
#创建仓库
curl -XPUT $IP:9200/_snapshot/my_back -d '{"type": "fs","settings": {"location": "/nfs/backes/"}}'
if [ $? -eq 0 ]; then
echo -e '\n仓库创建成功\n'
else
echo -e '\n仓库创建失败\n'
exit 1
fi
#更新仓库配置,制作和恢复快照的速度,压缩
curl -XPOST $IP:9200/_snapshot/my_back -d '{"type":"fs","settings":{"location":"/nfs/backes/","max_snapshot_bytes_per_sec":"50mb","max_restore_bytes_per_sec":"50mb","compress":true}}'
#检查仓库信息
echo -e '\n仓库配置信息:\n'
curl -XGET $IP:9200/_snapshot/my_back?pretty
#间隔5秒
sleep 3
#判断目录是否存在,不存在则创建
if [ ! -d "$es_backup_dir" ]; then
mkdir -p "$es_backup_dir"
else
cd "$es_backup_dir"
fi
#修改为任何人可写权限
chmod -R 1777 $es_backup_dir
cd $es_backup_dir
#判断文件是否存在
if [ ! -f "$logs" ]; then
touch "$logs"
else
rm -rf "$logs"
touch "$logs"
fi
chmod -R 777 $logs
#备份指定索引
#curl -XPUT $IP:9200/_snapshot/my/$filename '{"indices":"$index"}'
echo -e '\n正在备份中,请稍后...\n'
#开始备份
aaa=`curl -XPUT $IP:9200/_snapshot/my_back/$filename?pretty&wait_for_completion=true`
echo "$aaa" >> $logs
sleep 5
#过滤log文件里是否有error字段,如果有输出备份失败,没有输出成功
if [ `grep -c "error" $logs` -eq "0" ]; then
echo -e '\nes data backup success!\n'
else
echo -e '\nes data backup failure!\n'
fi
```