docker 一键安装MariaDB 脚本

#!/bin/bash

# Docker 安装 MariaDB 自动化脚本(含远程访问配置)

# 默认配置
CONTAINER_NAME="mariadb"
MYSQL_ROOT_PASSWORD="qiuping"
HOST_PORT=3306
DATA_DIR="/opt/mariadb/data"
CONFIG_DIR="/opt/mariadb/conf.d"
IMAGE_VERSION="mariadb:10.11"
ENABLE_REMOTE=false  # 默认关闭远程访问
REMOTE_USER="yourusername"
REMOTE_PASSWD="yourpasswd"

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case "$1" in
        --name)
            CONTAINER_NAME="$2"
            shift 2
            ;;
        --password)
            MYSQL_ROOT_PASSWORD="$2"
            shift 2
            ;;
        --port)
            HOST_PORT="$2"
            shift 2
            ;;
        --data-dir)
            DATA_DIR="$2"
            shift 2
            ;;
        --config-dir)
            CONFIG_DIR="$2"
            shift 2
            ;;
        --image)
            IMAGE_VERSION="$2"
            shift 2
            ;;
        --enable-remote)  # 新增参数
            ENABLE_REMOTE=true
            shift
            ;;
        *)
            echo "未知参数: $1"
            exit 1
            ;;
    esac
done

# 检查 Docker 是否可用
if ! command -v docker &> /dev/null; then
    echo "错误:Docker 未安装!"
    exit 1
fi

# 创建数据目录和配置目录
mkdir -p "$DATA_DIR" "$CONFIG_DIR"
chmod 755 "$DATA_DIR" "$CONFIG_DIR"

# 拉取镜像
echo "正在拉取 MariaDB 镜像: $IMAGE_VERSION"
docker pull "$IMAGE_VERSION" || {
    echo "镜像拉取失败!"
    exit 1
}

# 检查端口占用
if netstat -tuln | grep ":$HOST_PORT " > /dev/null; then
    echo "错误:端口 $HOST_PORT 已被占用!"
    exit 1
fi

# 运行容器
echo "启动 MariaDB 容器..."
docker run -d \
    --name "$CONTAINER_NAME" \
    --restart unless-stopped \
    -p "$HOST_PORT":3306 \
    -e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" \
    -v "$DATA_DIR":/var/lib/mysql \
    -v "$CONFIG_DIR":/etc/mysql/conf.d \
    "$IMAGE_VERSION" || {
    echo "容器启动失败!"
    exit 1
}

# 等待容器初始化
sleep 10

# 验证容器状态
if ! docker ps --filter "name=$CONTAINER_NAME" --format "{{.Status}}" | grep -q "Up"; then
    echo "容器启动异常,查看日志:"
    docker logs "$CONTAINER_NAME"
    exit 1
fi

# 配置远程访问
if [ "$ENABLE_REMOTE" = true ]; then
    echo "配置远程访问权限..."
    docker exec -i "$CONTAINER_NAME" mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<-EOF
        -- 允许 root 远程访问
        GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD' WITH GRANT OPTION;
        -- 创建新远程用户
        CREATE USER '$REMOTE_USER'@'%' IDENTIFIED BY '$REMOTE_PASSWD';
        GRANT ALL PRIVILEGES ON *.* TO '$REMOTE_USER'@'%';
        FLUSH PRIVILEGES;
EOF

    if [ $? -ne 0 ]; then
        echo "错误:远程访问配置失败!"
        exit 1
    fi
fi

# 输出成功信息
cat << EOF

✅ MariaDB 已成功部署!
=======================
容器名称:$CONTAINER_NAME
访问端口:localhost:$HOST_PORT
管理员账号:root
管理员密码:$MYSQL_ROOT_PASSWORD
数据目录:$DATA_DIR
配置文件:$CONFIG_DIR
远程访问:$([ "$ENABLE_REMOTE" = true ] && echo "已启用" || echo "已禁用")

连接命令:
本地连接:mysql -h 127.0.0.1 -P $HOST_PORT -u root -p
容器内连接:docker exec -it $CONTAINER_NAME mysql -u root -p
EOF

if [ "$ENABLE_REMOTE" = true ]; then
    echo -e "\n远程访问示例:"
    echo "mysql -h [服务器IP] -P $HOST_PORT -u root -p"
    echo "# 或使用新用户:mysql -h [服务器IP] -P $HOST_PORT -u $REMOTE_USER -p$REMOTE_PASSWD"
fi

 

posted @ 2025-05-15 23:37  QiuPing  阅读(48)  评论(0)    收藏  举报