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
相关推荐
Lvan的前端笔记10 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
程序员Sunday14 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
Yyyyyy~15 小时前
[ Mysql ] 库的操作
mysql
小米里的大麦15 小时前
16 MySQL 事务
数据库·mysql
Titan202415 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
sbjdhjd16 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
for_ever_love__16 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
帷幕落秋17 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机17 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
for_ever_love__17 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结