Docker部署MySQL脚本

相关概念:DockerMySQL

这个脚本的思路是:

先从临时容器里提取默认配置,再启动正式 MySQL 容器。

脚本

#!/bin/bash
set -e
 
DEPLOY_ROOT="${1:-$HOME/docker/mysql}"
MYSQL_VERSION="${2:-8.0}"
MYSQL_HOME="$DEPLOY_ROOT/$MYSQL_VERSION"
MYSQL_PASSWORD="${MYSQL_PASSWORD:-123456}"
 
log_info() {
  echo "[INFO] $1"
}
 
create_dirs() {
  if [ -d "$MYSQL_HOME" ]; then
    echo "[ERROR] $MYSQL_HOME already exists!" >&2
    exit 1
  fi
 
  mkdir -p "$MYSQL_HOME/data"
 
  TEMP_CONTAINER="temp_mysql_$(date +%s)"
  docker run -d --rm --name="$TEMP_CONTAINER" "mysql:$MYSQL_VERSION"
  docker cp "$TEMP_CONTAINER:/etc/mysql/" "$MYSQL_HOME/etc"
  docker stop "$TEMP_CONTAINER"
}
 
start_container() {
  docker run -d \
    -p 3306:3306 \
    --name mysql \
    --restart always \
    -e MYSQL_ROOT_PASSWORD="$MYSQL_PASSWORD" \
    -v "$MYSQL_HOME/etc:/etc/mysql" \
    -v "$MYSQL_HOME/data:/var/lib/mysql" \
    "mysql:$MYSQL_VERSION"
 
  log_info "MySQL started: $MYSQL_HOME"
}
 
create_dirs
start_container

参数

  • 第一个参数:部署根目录
  • 第二个参数:MySQL 版本
  • 环境变量 MYSQL_PASSWORD:root 密码

注意

默认密码 123456 只适合本地测试。真正使用时,至少要显式覆盖 MYSQL_PASSWORD