Docker部署MySQL脚本
这个脚本的思路是:
先从临时容器里提取默认配置,再启动正式 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。