You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Bash脚本向Docker MySQL 5.6容器发送SQL命令并修改密码

在Bash脚本中向MySQL 5.6 Docker容器发送SQL命令(修改root密码)

要在Bash脚本里给MySQL 5.6 Docker容器发送SQL命令修改root密码,核心是利用docker exec在容器内执行非交互式的MySQL命令。我帮你调整并优化脚本,解决可能遇到的坑:

修正后的完整run.sh脚本

#!/bin/bash
# 定义初始密码和新密码,请根据实际需求修改
INITIAL_ROOT_PWD="your_initial_password"
NEW_ROOT_PWD="your_new_secure_password"

# 启动MySQL容器,通过环境变量设置初始root密码
sudo docker run --name=mysql1 -d -e MYSQL_ROOT_PASSWORD="$INITIAL_ROOT_PWD" mysql-5.6

# 等待MySQL服务完全就绪(比固定sleep更可靠)
until sudo docker exec mysql1 mysqladmin ping -uroot -p"$INITIAL_ROOT_PWD" --silent; do
    echo "MySQL服务尚未就绪,等待2秒..."
    sleep 2
done

# 执行SQL命令修改root密码
sudo docker exec mysql1 mysql -uroot -p"$INITIAL_ROOT_PWD" -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$NEW_ROOT_PWD');"

echo "root密码已成功修改为 $NEW_ROOT_PWD"

关键细节说明

  1. 设置初始密码的正确方式
    官方MySQL 5.6镜像支持通过MYSQL_ROOT_PASSWORD环境变量设置初始root密码,启动容器时加上-e MYSQL_ROOT_PASSWORD="$INITIAL_ROOT_PWD",能确保容器启动后root账号有可登录的初始密码,避免登录失败。

  2. 等待MySQL服务就绪
    容器启动后,MySQL服务需要几秒初始化,直接执行SQL会报错。用mysqladmin ping循环检查是更可靠的方式,直到服务响应再执行修改密码的命令,比固定sleep 10更适配不同性能的机器。

  3. 非交互式执行SQL
    使用mysql命令的-e参数可以直接指定要执行的SQL语句,全程不需要交互输入。注意密码要包裹在双引号里,避免特殊字符(比如!、@)导致解析错误。

你原来脚本的问题分析

  • 没有通过环境变量设置初始密码:如果你的Docker镜像没有预设root密码,容器启动后root可能无密码或随机生成密码,导致mysql -uroot -p$base_password登录失败。
  • <<<的用法不合适:这种方式是将字符串作为标准输入传给mysql,但mysql在带-p参数且后面直接跟密码时,不需要额外的标准输入传SQL,用-e参数才是脚本化执行SQL的标准方式。

内容的提问来源于stack exchange,提问作者silver wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:49:57