Created
July 21, 2017 05:16
-
-
Save nazoking/702183cc04dbe366bc5e2bc3bca12dd3 to your computer and use it in GitHub Desktop.
環境変数から見合ったmysql(バージョン、ポート、データdir等)を起動する。direnvと一緒に使う
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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