上传文件至 mysql

This commit is contained in:
萧墨笙云
2025-11-08 18:05:44 +08:00
commit ca8006030c

View File

@@ -0,0 +1,347 @@
#!/bin/bash
# MySQL Docker 自动安装脚本
# 使用镜像: 根据网络环境自动选择官方或第三方镜像
###############################################################################
# 版权声明
# 该脚本由X博客"xblog.tech"编写与维护
# 版权所有 (c) 2025 X博客. 保留所有权利.
# 未经许可,不得擅自复制、修改或发布本脚本
###############################################################################
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # 无颜色
# 彩色输出函数
color_echo() {
local color=$1
shift
echo -e "${color}$*${NC}"
}
# 检查并安装curl如果需要
check_and_install_curl() {
if ! command -v curl &> /dev/null; then
color_echo $YELLOW "检测到系统未安装curl正在尝试安装..."
# 根据不同的包管理器尝试安装curl
if command -v apt-get &> /dev/null; then
color_echo $BLUE "使用apt-get安装curl..."
sudo apt-get update && sudo apt-get install -y curl
elif command -v yum &> /dev/null; then
color_echo $BLUE "使用yum安装curl..."
sudo yum install -y curl
elif command -v dnf &> /dev/null; then
color_echo $BLUE "使用dnf安装curl..."
sudo dnf install -y curl
elif command -v apk &> /dev/null; then
color_echo $BLUE "使用apk安装curl..."
sudo apk add curl
else
color_echo $RED "无法自动安装curl请手动安装后再运行此脚本"
color_echo $YELLOW "您可以运行以下命令之一来安装curl:"
color_echo $CYAN " Ubuntu/Debian: sudo apt-get install curl"
color_echo $CYAN " CentOS/RHEL: sudo yum install curl"
color_echo $CYAN " Fedora: sudo dnf install curl"
color_echo $CYAN " Alpine: sudo apk add curl"
exit 1
fi
# 验证安装是否成功
if command -v curl &> /dev/null; then
color_echo $GREEN "✓ curl安装成功"
else
color_echo $RED "✗ curl安装失败请手动安装后再运行此脚本"
exit 1
fi
else
color_echo $GREEN "✓ 系统已安装curl"
fi
echo ""
}
color_echo $PURPLE "=== MySQL 8.0.44 Docker 自动安装脚本 ==="
echo ""
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
color_echo $RED "错误: Docker 未安装请先安装Docker"
color_echo $YELLOW "安装Docker的参考命令:"
color_echo $CYAN " curl -fsSL https://get.docker.com -o get-docker.sh"
color_echo $CYAN " sudo sh get-docker.sh"
exit 1
fi
color_echo $GREEN "✓ Docker 已安装"
echo ""
# 检查并确保curl已安装
check_and_install_curl
# 网络环境检测和镜像选择
color_echo $BLUE "检测网络环境..."
OFFICIAL_IMAGE="library/mysql:8.0.44"
THIRD_PARTY_IMAGE="docker.1ms.run/library/mysql:8.0.44"
# 检测是否能够访问Docker Hub
check_network() {
color_echo $BLUE "正在测试网络连接..."
# 尝试访问Docker Hub
if curl --connect-timeout 10 -s https://hub.docker.com/ > /dev/null; then
color_echo $GREEN "✓ 可以访问 Docker Hub"
return 0
else
color_echo $YELLOW "✗ 无法访问 Docker Hub"
return 1
fi
}
# 选择镜像源
select_image_source() {
if check_network; then
MYSQL_IMAGE=$OFFICIAL_IMAGE
color_echo $GREEN "将使用官方镜像: $MYSQL_IMAGE"
else
echo ""
color_echo $YELLOW "⚠️ ⚠️ ⚠️ 安全提示 ⚠️ ⚠️ ⚠️"
color_echo $RED "您即将调用第三方镜像源进行容器的创建,在此之前请您确认您信任该镜像的来源"
color_echo $YELLOW "镜像来源: \"毫秒镜像 1ms.run/r/library/mysql\""
echo ""
color_echo $CYAN "若您同意使用该镜像请您输入 y 确认: "
read -p "确认使用第三方镜像 (y/N): " CONFIRM_THIRD_PARTY
if [[ $CONFIRM_THIRD_PARTY =~ ^[Yy]$ ]]; then
MYSQL_IMAGE=$THIRD_PARTY_IMAGE
color_echo $GREEN "将使用第三方镜像: $MYSQL_IMAGE"
else
color_echo $YELLOW "安装已取消"
exit 0
fi
fi
echo ""
}
# 执行镜像源选择
select_image_source
# 交互式获取用户输入
color_echo $PURPLE "请配置MySQL安装参数可直接回车使用默认值"
color_echo $CYAN "=========================================="
# 容器名称
read -p "$(color_echo $BLUE '1. 输入容器名称') [$(color_echo $GREEN '默认: mysql-8.0.44')]: " CONTAINER_NAME
CONTAINER_NAME=${CONTAINER_NAME:-"mysql-8.0.44"}
# MySQL root密码
while true; do
read -s -p "$(color_echo $BLUE '2. 输入MySQL root密码 (输入将隐藏)') : " MYSQL_ROOT_PASSWORD
echo
if [ -z "$MYSQL_ROOT_PASSWORD" ]; then
color_echo $RED "错误: Root密码不能为空请重新输入"
continue
fi
read -s -p "$(color_echo $BLUE '请再次确认root密码') : " MYSQL_ROOT_PASSWORD_CONFIRM
echo
if [ "$MYSQL_ROOT_PASSWORD" != "$MYSQL_ROOT_PASSWORD_CONFIRM" ]; then
color_echo $RED "错误: 两次输入的密码不一致,请重新输入"
else
break
fi
done
# 端口号
read -p "$(color_echo $BLUE '3. 输入MySQL映射端口') [$(color_echo $GREEN '默认: 3306')]: " MYSQL_PORT
MYSQL_PORT=${MYSQL_PORT:-"3306"}
# 检查端口是否被占用
if command -v lsof &> /dev/null; then
if lsof -Pi :$MYSQL_PORT -sTCP:LISTEN -t >/dev/null ; then
color_echo $YELLOW "警告: 端口 $MYSQL_PORT 已被占用,请选择其他端口"
read -p "$(color_echo $BLUE '输入新的MySQL映射端口'): " MYSQL_PORT
fi
else
color_echo $YELLOW "注意: 无法检查端口占用情况lsof未安装请确保端口 $MYSQL_PORT 可用"
fi
# 数据目录
read -p "$(color_echo $BLUE '4. 输入数据存储目录') [$(color_echo $GREEN '默认: /docker/mysql/data')]: " DATA_DIR
DATA_DIR=${DATA_DIR:-"/docker/mysql/data"}
# 配置目录
read -p "$(color_echo $BLUE '5. 输入配置存储目录') [$(color_echo $GREEN '默认: /docker/mysql/conf')]: " CONF_DIR
CONF_DIR=${CONF_DIR:-"/docker/mysql/conf"}
# 显示配置摘要
echo ""
color_echo $PURPLE "=== 安装配置摘要 ==="
color_echo $CYAN "容器名称: $CONTAINER_NAME"
color_echo $CYAN "MySQL 端口: $MYSQL_PORT"
color_echo $CYAN "数据目录: $DATA_DIR"
color_echo $CYAN "配置目录: $CONF_DIR"
color_echo $CYAN "使用镜像: $MYSQL_IMAGE"
color_echo $CYAN "Root密码: ******"
echo ""
color_echo $YELLOW "注意: 此安装只创建root用户不创建额外数据库和用户"
echo ""
# 确认安装
read -p "$(color_echo $BLUE '是否继续安装?(y/n)') [$(color_echo $GREEN '默认: y')]: " CONFIRM_INSTALL
CONFIRM_INSTALL=${CONFIRM_INSTALL:-"y"}
if [[ ! $CONFIRM_INSTALL =~ ^[Yy]$ ]]; then
color_echo $YELLOW "安装已取消"
exit 0
fi
echo ""
color_echo $GREEN "开始安装 MySQL 8.0.44..."
echo ""
# 创建数据目录和配置目录
color_echo $BLUE "创建数据目录..."
sudo mkdir -p $DATA_DIR
sudo mkdir -p $CONF_DIR
sudo chmod -R 755 $DATA_DIR
sudo chmod -R 755 $CONF_DIR
color_echo $GREEN "✓ 目录创建完成: $DATA_DIR, $CONF_DIR"
# 拉取MySQL镜像
color_echo $BLUE "拉取 MySQL 镜像: $MYSQL_IMAGE"
docker pull $MYSQL_IMAGE
color_echo $GREEN "✓ MySQL 镜像拉取完成"
# 创建自定义配置文件
color_echo $BLUE "创建MySQL配置文件..."
sudo tee $CONF_DIR/my.cnf > /dev/null << EOF
[mysqld]
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
innodb_buffer_pool_size=256M
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF
color_echo $GREEN "✓ 配置文件创建完成"
# 停止并删除已存在的同名容器(如果存在)
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
color_echo $YELLOW "发现已存在的容器,停止并删除..."
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
color_echo $GREEN "✓ 旧容器已清理"
fi
# 运行MySQL容器只设置root密码
color_echo $BLUE "启动 MySQL 容器..."
docker run -d \
--name $CONTAINER_NAME \
--restart=unless-stopped \
-p $MYSQL_PORT:3306 \
-e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \
-v $DATA_DIR:/var/lib/mysql \
-v $CONF_DIR:/etc/mysql/conf.d \
$MYSQL_IMAGE
color_echo $GREEN "✓ MySQL 容器启动完成"
# 等待MySQL启动
color_echo $BLUE "等待MySQL服务启动..."
for i in {1..30}; do
if docker logs $CONTAINER_NAME 2>&1 | grep -q "Ready for start up"; then
color_echo $GREEN "✓ MySQL 启动完成"
break
fi
color_echo $YELLOW "等待MySQL启动... ($i/30)"
sleep 2
done
# 检查容器状态
if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
color_echo $GREEN "✓ MySQL 容器正在运行"
# 测试连接
color_echo $BLUE "测试MySQL连接..."
sleep 5
if docker exec $CONTAINER_NAME mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "SELECT 1;" &> /dev/null; then
color_echo $GREEN "✓ MySQL 连接测试成功"
# 显示默认数据库
color_echo $BLUE "默认数据库列表:"
docker exec $CONTAINER_NAME mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "SHOW DATABASES;"
else
color_echo $YELLOW "⚠️ MySQL 连接测试失败,请检查日志"
docker logs $CONTAINER_NAME
fi
else
color_echo $RED "❌ MySQL 容器启动失败"
docker logs $CONTAINER_NAME
exit 1
fi
# 显示安装完成信息
echo ""
color_echo $PURPLE "=== MySQL 安装完成 ==="
color_echo $GREEN "容器名称: $CONTAINER_NAME"
color_echo $GREEN "MySQL 版本: 8.0.44"
color_echo $GREEN "连接地址: 127.0.0.1:$MYSQL_PORT"
color_echo $GREEN "数据目录: $DATA_DIR"
color_echo $GREEN "配置目录: $CONF_DIR"
color_echo $GREEN "使用镜像: $MYSQL_IMAGE"
color_echo $GREEN "Root 用户: root"
echo ""
color_echo $CYAN "管理命令:"
color_echo $BLUE "查看日志: docker logs $CONTAINER_NAME"
color_echo $BLUE "进入容器: docker exec -it $CONTAINER_NAME bash"
color_echo $BLUE "连接MySQL: docker exec -it $CONTAINER_NAME mysql -uroot -p"
color_echo $BLUE "停止容器: docker stop $CONTAINER_NAME"
color_echo $BLUE "启动容器: docker start $CONTAINER_NAME"
echo ""
# 保存配置信息到文件(可选)
CONFIG_FILE="./mysql_install_${CONTAINER_NAME}.info"
cat > $CONFIG_FILE << EOF
MySQL 安装配置信息
安装时间: $(date)
容器名称: $CONTAINER_NAME
MySQL 版本: 8.0.44
连接端口: $MYSQL_PORT
数据目录: $DATA_DIR
配置目录: $CONF_DIR
使用镜像: $MYSQL_IMAGE
Root 密码: $MYSQL_ROOT_PASSWORD
EOF
color_echo $GREEN "配置信息已保存到: $CONFIG_FILE"
color_echo $YELLOW "请注意妥善保管此文件,特别是密码信息!"
echo ""
color_echo $CYAN "安装后建议操作:"
color_echo $BLUE "1. 登录MySQL后创建所需的数据库和用户"
color_echo $BLUE "2. 根据需求调整MySQL配置"
color_echo $BLUE "3. 考虑设置定期备份策略"
###############################################################################
# 版权声明
# 该脚本由X博客"xblog.tech"编写与维护
# 版权所有 (c) 2025 X博客. 保留所有权利.
# 未经许可,不得擅自复制、修改或发布本脚本
###############################################################################