- 下载 MySQL Docker 镜像(联网环境中完成):
// 下载执行版本docker镜像
docker pull mysql:5.7
// 导出mysql镜像文件
docker save -o /root/mysql5.7.tar mysql
- 离线包和脚本放在同一目录下
- 脚本授权:chmod 755 install_mysql.sh
- 执行脚本,等待输出提示
#!/bin/bash
# 变量定义
IMAGE_FILE="mysql5.7.tar"
CONTAINER_NAME="mysql5.7"
MYSQL_ROOT_PASSWORD="Microvideo@2022"
LOG_DIR="/docker/mysql/log"
DATA_DIR="/docker/mysql/data"
CONFIG_DIR="/docker/mysql/config"
CONFIG_FILE="my.cnf"
# 确保目录存在
echo "[INFO] 确保日志、数据和配置目录存在..."
mkdir -p "$LOG_DIR" "$DATA_DIR" "$CONFIG_DIR"
# 检查并移动 my.cnf 配置文件到指定目录
if [[ -f "$CONFIG_FILE" ]]; then
echo "[INFO] 复制 my.cnf 配置文件到指定目录..."
cp -f "$CONFIG_FILE" "$CONFIG_DIR/"
else
echo "[ERROR] 找不到配置文件: $CONFIG_FILE"
exit 1
fi
# 设置目录权限
echo "[INFO] 设置目录权限..."
chmod -R 755 "$LOG_DIR"
chmod -R 755 "$DATA_DIR"
chmod -R 755 "$CONFIG_DIR"
# 检查 MySQL 镜像文件是否存在
if [[ -f "$IMAGE_FILE" ]]; then
echo "[INFO] 加载 MySQL 镜像..."
docker load -i "$IMAGE_FILE"
else
echo "[ERROR] 找不到 MySQL 镜像文件: $IMAGE_FILE"
exit 1
fi
# 检查 Docker 是否已经运行容器
if docker ps -a --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then
echo "[INFO] 容器 $CONTAINER_NAME 已经存在,删除旧容器..."
docker rm -f "$CONTAINER_NAME"
fi
# 运行 MySQL 容器
echo "[INFO] 启动 MySQL 容器..."
docker run -p 3306:3306 \
--name "$CONTAINER_NAME" \
--restart=always \
--privileged=true \
-v "$DATA_DIR:/var/lib/mysql" \
-v "$CONFIG_DIR/my.cnf:/etc/my.cnf" \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD" \
-d mysql:5.7 --lower-case-table-names=1
# 验证容器是否启动成功
echo "[INFO] 验证 MySQL 容器是否启动..."
if docker ps | grep -q "$CONTAINER_NAME"; then
echo "[INFO] MySQL 容器启动成功"
else
echo "[ERROR] MySQL 容器启动失败"
exit 1
fi
my.cnf 模板文件
# 客户端标识
[client]
# 默认连接端口
port=3306
# 设置客户端的默认字符集为utf8
default-character-set=utf8
# 设置客户端的连接超时时间为600秒
connect-timeout=600
# 设置客户端的最大封包大小为16M
max_allowed_packet=16M
# 服务器标识
[mysqld]
# 设置服务器的默认字符集为utf8
character-set-server=utf8
# 设置服务器默认的存储引擎为InnoDB
default-storage-engine=InnoDB
# 设置服务器的处理器缓冲区大小为256M
innodb_buffer_pool_size=256M
# 设置服务器的最大连接数为1000
max_connections=1000
# 设置服务器的日志文件路径和名称
#log-error=/var/log/mysql/error.log
# 设置服务器的错误日志级别为警告
log-error-verbosity=2
# 设置服务器的数据目录
datadir=/var/lib/mysql
# 设置服务器的临时文件路径
tmpdir=/tmp
# 设置服务器的超时时间为600秒
wait_timeout=600
# 设置服务器的默认排序规则为utf8_general_ci
collation-server=utf8_general_ci
# 设置服务器的查询缓存大小为64M
query_cache_size=64M
# 设置服务器的最大临时表数量为1000
max_tmp_tables=1000
# 设置服务器的最大排序缓冲区大小为4M
max_sort_length=4M
# 设置访问
bind-address=0.0.0.0
# 设置sql_mode
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 禁用主机名解析
skip-name-resolve