插件窝 干货文章 在docker中的mysql容器内执行命令与执行SQL文件方式

在docker中的mysql容器内执行命令与执行SQL文件方式

MySQL 文件 SQL 执行 998    来源:    2025-04-02

Docker中MySQL容器内执行命令与SQL文件的方法

1. 在MySQL容器内执行单条命令

方法一:使用docker exec直接执行

docker exec -it mysql-container mysql -u root -pPASSWORD -e "SHOW DATABASES;"

方法二:进入容器交互式执行

docker exec -it mysql-container mysql -u root -p
# 进入MySQL命令行后执行SQL命令

2. 执行SQL文件

方法一:通过标准输入导入

docker exec -i mysql-container mysql -u root -pPASSWORD database_name < /path/to/file.sql

方法二:将SQL文件复制到容器中执行

# 先将SQL文件复制到容器内
docker cp /path/to/file.sql mysql-container:/tmp/file.sql

# 然后在容器内执行
docker exec -it mysql-container mysql -u root -pPASSWORD database_name -e "source /tmp/file.sql"

方法三:挂载SQL文件到容器中执行

# 启动容器时挂载SQL文件目录
docker run --name mysql-container -v /host/path/to/sql:/sql -e MYSQL_ROOT_PASSWORD=password -d mysql:tag

# 执行SQL文件
docker exec -it mysql-container mysql -u root -pPASSWORD database_name -e "source /sql/file.sql"

3. 在Docker Compose中执行SQL初始化

docker-compose.yml中配置:

services:
  mysql:
    image: mysql:latest
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      MYSQL_ROOT_PASSWORD: password

MySQL官方镜像会自动执行/docker-entrypoint-initdb.d/目录下的.sh.sql.sql.gz文件。

4. 注意事项

  1. 密码安全:避免在命令行直接显示密码,可以使用MYSQL_PWD环境变量或配置文件中存储密码
  2. 容器状态:确保MySQL容器已启动并运行正常
  3. 文件编码:SQL文件应使用UTF-8编码
  4. 执行顺序:对于多个SQL文件,MySQL会按字母顺序执行/docker-entrypoint-initdb.d/下的文件

5. 高级用法

执行多个SQL文件

for sql_file in /path/to/*.sql; do
  docker exec -i mysql-container mysql -u root -pPASSWORD database_name < "$sql_file"
done

使用环境变量文件

# 创建.env文件
echo "MYSQL_ROOT_PASSWORD=password" > .env

# 使用环境变量文件
docker exec -i mysql-container mysql -u root -p$MYSQL_ROOT_PASSWORD database_name < file.sql

以上方法可以根据具体场景选择使用,挂载目录方式适合开发环境,而标准输入导入方式适合自动化部署场景。