1. 程式人生 > >Shell 基於Docker操作InfluxDB安裝建庫建立使用者並授權

Shell 基於Docker操作InfluxDB安裝建庫建立使用者並授權

InfluxDB提供了一些輔助命令,使得我們可以不用進入到influxdb控制檯裡面就可以操作,這點很像mysql,所以實現起來很方便快捷。

目錄

安裝指令碼

資料庫操作指令碼

執行輸出


安裝指令碼

docker_influxdb_install.sh

#! /bin/bash
#file:docker_influxdb_install.sh
#company:cvnavi.com
#author:Pengjunlin
echo "當前執行檔案......$0"
IS_EXISTS_INFLUXDB_IMAGE_NAME="false"
IS_EXISTS_INFLUXDB_CONTAINER="false"
IS_EXISTS_INFLUXDB_CONTAINER_RUNGING="false"
START_CONTAINER_CHECK_MAX_TIMES=3
START_CONTAINER_CHECK_CURRENT=1
# ========================下載映象======================================
for i in [ `docker images ` ]; do
	
	if [[ "$i" == "docker.io/influxdb" ||  "$i" == "influxdb" ]]; then
		echo "$i"
		IS_EXISTS_INFLUXDB_IMAGE_NAME="true"
		break
	fi
done
if [[ $IS_EXISTS_INFLUXDB_IMAGE_NAME == "true"  ]]; then
	echo "本地已存在influxdb:latest映象,不再重新下載......."
else
	echo "本地不存在influxdb:latest映象,正在下載......."
	docker pull influxdb:latest
fi

# ====================建立映象===========================================
if [[ $IS_EXISTS_INFLUXDB_CONTAINER == "false" ]]; then
	echo "檢查influxdb容器是否建立......"
	for i in [ `docker ps -a` ]; do
		if [[ "$i" == "influxdb" ]]; then
			IS_EXISTS_INFLUXDB_CONTAINER="true"
			break
		fi
	done
	if [[ $IS_EXISTS_INFLUXDB_CONTAINER == "false" ]]; then
		cp docker_influxdb_create_user.sh /etc/influxdb/scripts/docker_influxdb_create_user.sh
	    chmod a+x /etc/influxdb/scripts/docker_influxdb_create_user.sh
		if [[ -f "/etc/influxdb/scripts/docker_influxdb_create_user.sh" ]]; then
			echo "檢查到influxdb容器尚未建立!"
	        # 執行容器建立
			# 執行容器例項 --privileged=true 獲取管理員許可權
			echo "建立influxdb容器例項..."
			sudo docker run -d -p 38083:8083 -p 38086:8086  --name influxdb  --restart always --privileged=true -v /etc/influxdb/scripts:/etc/influxdb/scripts  influxdb:latest
			# 休10秒鐘
			echo "休眠等待10s以便Docker完成容器執行......"
			sleep 10s
	        echo "進入influxdb容器: docker exec -it influxdb  /bin/bash -c 'sh /etc/influxdb/scripts/docker_influxdb_create_user.sh'"
			# 進入容器並執行指令碼:
			docker exec -it influxdb  /bin/bash -c "sh /etc/influxdb/scripts/docker_influxdb_create_user.sh"
			# 刪除執行檔案
			rm -f /etc/influxdb/scripts/docker_influxdb_create_user.sh

			echo "influxdb容器已建立完畢!"

			IS_EXISTS_INFLUXDB_CONTAINER_RUNGING=true
		else
			echo "/etc/influxdb/scripts/docker_influxdb_create_user.sh檔案不存在,docker需要用此檔案建立influxdb容器例項並建立使用者."
			exit 1
		fi
	else
		echo "檢查到influxdb容器已建立!"
	fi
fi
# ===================啟動或重啟容器================================
if [[ $IS_EXISTS_INFLUXDB_CONTAINER == "true" && $IS_EXISTS_INFLUXDB_CONTAINER_RUNGING == "false" ]]; then
    echo "下面最多執行三次influxdb容器檢查重啟..."
	while [[ $START_CONTAINER_CHECK_CURRENT -le $START_CONTAINER_CHECK_MAX_TIMES ]]; do
		echo "檢查influxdb容器狀態......$START_CONTAINER_CHECK_CURRENT"
		for i in [ `docker ps ` ]; do
			if [[ "$i" == "influxdb" ]]; then
				IS_EXISTS_INFLUXDB_CONTAINER_RUNGING="true"
				break
			fi
		done
		if [[ $IS_EXISTS_INFLUXDB_CONTAINER_RUNGING == "false" ]]; then
			echo "檢查到influxdb容器當前不在執行狀態!"
			echo "啟動influxdb容器...."
			docker start influxdb
			for i in [ `docker ps ` ]; do
				if [[ "$i" == "influxdb" ]]; then
					IS_EXISTS_INFLUXDB_CONTAINER_RUNGING="true"
					break
				fi
			done
			if [[ $IS_EXISTS_INFLUXDB_CONTAINER_RUNGING == "true" ]]; then
				echo "influxdb容器已經在執行!"
				break
			fi
		else
			echo "influxdb容器已經在執行!"
			break
		fi
		START_CONTAINER_CHECK_CURRENT=$((START_CONTAINER_CHECK_CURRENT+1))
	done
	if [[ $IS_EXISTS_INFLUXDB_CONTAINER_RUNGING == "false" ]]; then
		echo "檢查到influxdb容器當前仍未執行,請聯絡相關人員進行處理!"
		exit 1
	fi
fi

資料庫操作指令碼

docker_influxdb_create_user.sh

#!/bin/bash
#file:docker_influxdb_create_user.sh
#company:cvnavi.com
#author:Pengjunlin
echo "當前執行檔案......$0"
INFLUXDB_DATABASE_NAME="rtvsweb"
INFLUXDB_USER_NAME="admin"
INFLUXDB_USER_PWD="admin"
# influxdb資料庫相關配置
echo "influxdb資料庫相關配置"
influx -version
# 查詢資料庫列表
echo "查詢資料庫列表"
influx  -execute "show databases"
# 刪除資料庫
echo "刪除資料庫$INFLUXDB_DATABASE_NAME"
influx  -execute "drop database $INFLUXDB_DATABASE_NAME"
# 建立資料庫
echo "建立資料庫$INFLUXDB_DATABASE_NAME"
influx  -execute "create database $INFLUXDB_DATABASE_NAME"
# 建立使用者並授權
echo "建立$INFLUXDB_USER_NAME使用者並授權"
influx -execute "create user "$INFLUXDB_USER_NAME" with password '$INFLUXDB_USER_PWD' with all privileges"
# 查詢使用者列表
echo "查詢使用者列表"
influx -execute "use $INFLUXDB_DATABASE_NAME" -execute  "show users"





執行輸出

=================InfluxDB檢查安裝:======================start
安裝Docker Influxdb環境...
當前執行檔案......./docker_influxdb_install.sh
influxdb
本地已存在influxdb:latest映象,不再重新下載.......
檢查influxdb容器是否建立......
檢查到influxdb容器尚未建立!
建立influxdb容器例項...
22979c1f0600d218105f8665a6c0b21dc867b04d7873ad2b17d9f92cf5a2ed5d
休眠等待10s以便Docker完成容器執行......
進入influxdb容器: docker exec -it influxdb  /bin/bash -c 'sh /etc/influxdb/scripts/docker_influxdb_create_user.sh'
當前執行檔案....../etc/influxdb/scripts/docker_influxdb_create_user.sh
influxdb資料庫相關配置
InfluxDB shell version: 1.7.0
Enter an InfluxQL query
查詢資料庫列表
name: databases
name
----
刪除資料庫rtvsweb
建立資料庫rtvsweb
建立admin使用者並授權
查詢使用者列表
user  admin
----  -----
admin true
influxdb容器已建立完畢!
./docker_influxdb_install.sh 執行完成!
=================InfluxDB檢查安裝:======================end
InfluxDB時序資料庫安裝成功!

注意:如果程式採用link連線的話埠號仍然是8086,想讓Docker重啟了容器自動啟動執行需要配置 --restart always。