shell 脚本部署docker 服务MySQL 5.7

创建主工作目录

powershell 复制代码
sudo mkdir -p /home/tools/{scripts,mysql,mysql8,redis,opengauss,minio}

创建各服务子目录

powershell 复制代码
sudo mkdir -p /home/tools/mysql/{data,conf,logs}

执行脚本

powershell 复制代码
#!/bin/bash

set -e  # 遇到错误立即退出

echo "开始部署 MySQL 5.7..."

# 定义变量
MYSQL_DIR="/home/tools/mysql"
MYSQL_PORT="3306"
MYSQL_ROOT_PASSWORD="123456"
CONTAINER_NAME="mysql5.7"

# 创建配置文件
cat > ${MYSQL_DIR}/conf/my.cnf << 'EOF'
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
# 基础设置
user = mysql
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-name-resolve

# 时区设置
default_time_zone = '+8:00'

# 连接和限制
max_connections = 1000
max_connect_errors = 10000
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 表名大小写
lower_case_table_names = 1

# InnoDB 性能优化(根据服务器内存调整,建议为物理内存的50-70%)
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 120

# 二进制日志(用于备份和复制)
server-id = 1
log_bin = /var/log/mysql/mysql-bin
expire_logs_days = 7
max_binlog_size = 100M

# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2

# 错误日志
log_error = /var/log/mysql/mysql-error.log
EOF

# 设置目录权限
sudo chown -R 1000:1000 ${MYSQL_DIR}/data
sudo chmod -R 755 ${MYSQL_DIR}

# 拉取镜像
docker pull mysql:5.7

# 启动容器
docker run -d \
  --name ${CONTAINER_NAME} \
  -p ${MYSQL_PORT}:3306 \
  -v ${MYSQL_DIR}/data:/var/lib/mysql \
  -v ${MYSQL_DIR}/conf:/etc/mysql/conf.d \
  -v ${MYSQL_DIR}/logs:/var/log/mysql \
  -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
  -e TZ=Asia/Shanghai \
  --restart=unless-stopped \
  --memory=2g \
  --cpus=1.0 \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  mysql:5.7

# 等待容器启动
echo "等待MySQL启动..."
sleep 30

# 检查容器状态
if docker ps | grep -q ${CONTAINER_NAME}; then
    echo " MySQL 5.7 部署成功!"
    echo " 连接信息:"
    echo "   地址: localhost:${MYSQL_PORT}"
    echo "   用户名: root"
    echo "   密码: ${MYSQL_ROOT_PASSWORD}"
else
    echo " MySQL 5.7 部署失败,查看日志:docker logs ${CONTAINER_NAME}"
    exit 1
fi
相关推荐
风落无尘5 小时前
Stable Diffusion WebUI & ComfyUI 完整安装教程:官方部署+一键整合包+Docker容器化(2026最新)
docker·容器·stable diffusion
廿一夏5 小时前
MySql存储引擎与索引
数据库·sql·mysql
敲个大西瓜8 小时前
Java项目常用数据归档方式
mysql
CodeMartain9 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
kyriewen10 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室10 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿11 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
llrraa201011 小时前
配置docker国内镜像源
运维·docker·容器
小江的记录本11 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术112 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql