Skip to content

Instantly share code, notes, and snippets.

@nazoking
Created July 21, 2017 05:16
Show Gist options
  • Save nazoking/702183cc04dbe366bc5e2bc3bca12dd3 to your computer and use it in GitHub Desktop.
Save nazoking/702183cc04dbe366bc5e2bc3bca12dd3 to your computer and use it in GitHub Desktop.
環境変数から見合ったmysql(バージョン、ポート、データdir等)を起動する。direnvと一緒に使う
#!/bin/bash
set -e
set -o pipefail
set -u
# set -x
function !!
{
echo "$@"
"$@"
return $?
}
function is_pipe
{
if [ -p /dev/stdin ]; then
#if [ -p /dev/fd/0 ]; then
#if [ -p /proc/self/fd/0 ]; then
#if [ -t 0 ]; then
return 0
elif [ -p /dev/stdout ]; then
return 0
else
return 1
fi
}
MYSQL_PORT=${MYSQL_PORT:-3306}
if [ -z "${MYSQL_DATA_DIR:-}" ];then
echo "mysql のデータディレクトリの位置を環境変数 MYSQL_DATA_DIR で指定してください"
exit -1
fi
if [ -z "${MYSQL_VERSION:-}" ];then
echo "mysql のバージョンを環境変数 MYSQL_VERSION で指定してください"
exit -1
fi
if [ ! -d "${MYSQL_DATA_DIR}" ];then
mkdir -p "${MYSQL_DATA_DIR}"
fi
MYSQL_DATA_DIR_SUM="$(cd "$MYSQL_DATA_DIR" && pwd -|md5)"
CONTAINER_NAME=mysql-$MYSQL_VERSION-${MYSQL_DATA_DIR_SUM:0:5}
# 起動済み
eps=$(docker ps -f "name=/$CONTAINER_NAME\$" -q)
# 停止中
eps2=$(docker ps -f "name=/$CONTAINER_NAME\$" -q -a)
case "${1:-}" in
"start")
echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
if [ -z "$eps" ];then
if [ -z "$eps2" ];then
!! docker run -d --name "$CONTAINER_NAME" \
-e MYSQL_ALLOW_EMPTY_PASSWORD=${MYSQL_ALLOW_EMPTY_PASSWORD:true} \
-e MYSQL_ROOT_HOST=${MYSQL_ROOT_HOST:\%} \
-p ${MYSQL_PORT}:3306 \
${MYSQL_DATABASE:+ -e MYSQL_DATABASE=$MYSQL_DATABASE } \
${MYSQL_USER:+ -e MYSQL_USER=$MYSQL_USER } \
${MYSQL_PASSWORD:+ -e MYSQL_PASSWORD=$MYSQL_PASSWORD } \
-e MYSQL_HISTFILE=/var/lib/mysql/mysql_history \
-v "$MYSQL_DATA_DIR:/var/lib/mysql" \
"mysql/mysql-server:$MYSQL_VERSION"
else
!! docker start "$CONTAINER_NAME"
fi
else
echo "mysql is running"
fi
;;
"stop")
echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
if [ -n "$eps" ];then
!! docker stop "$CONTAINER_NAME"
else
echo "mysql is not running"
fi
;;
"status")
echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
if [ -z "$eps2" ];then
echo "docker mysql is not running"
exit -1
else
docker ps -f "name=/$CONTAINER_NAME\$" -a
fi
;;
"rm")
echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
if [ -n "$eps" ];then
!! docker stop "$CONTAINER_NAME"
fi
if [ -n "$eps2" ];then
!! docker rm "$CONTAINER_NAME"
else
echo "mysql container is not exists"
fi
;;
"client"|"dump"|"mysqldump")
if [ -z "$eps" ];then
echo "mysql is not running"
exit -1
else
case "${1}" in
"client")
cmd=mysql
;;
"dump"|"mysqldump")
cmd=mysqldump
;;
esac
shift
term_opt=""
if ! is_pipe; then
term_opt="-t"
fi
docker exec -i $term_opt "$CONTAINER_NAME" $cmd "$@"
fi
;;
*)
echo "mysql を docker で起動します。 MYSQL_VERSION と MYSQL_DATA_DIR の環境変数を指定してください"
echo "VERSION=$MYSQL_VERSION DATA_DIR=$MYSQL_DATA_DIR PORT=$MYSQL_PORT CONTAINER=$CONTAINER_NAME"
echo "{start|stop|rm|client|dump|status}"
exit -1
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment