mysql - 使用 MySQL 启动 docker 容器时 init sql 语法错误

标签 mysql docker docker-compose initialization docker-container

我遇到了问题。我正在尝试在 Docker 容器中运行 MySQL 服务器。到目前为止,一切都很好。现在我想在容器启动时运行一个 sql 文件以获取初始内容:

CREATE USER 'root'@'%' IDENTIFIED BY '1111';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
CREATE DATABASE testdb;

我正在将文件添加到我的 docker-compose.yml 中

volumes: -/mysql/home:/docker-entrypoint-initdb.d

此外,为了远程连接到我的容器,我需要使用上述语句创建另一个 root 用户! 这些对于我的情况是必要的。但我得到的只是 1064 错误 (MySQL 错误 1064:您的 SQL 语法中有错误),我不知道为什么。语法对我来说似乎没问题,我什至删除了一些行以确保。错误保持不变。为什么? Docker 是否使用特殊语法或类似的东西?

感谢您的帮助!

最佳答案

在 docker 容器中,root 是 mysql 的默认用户,拥有所有权限。所以,

  • 您不需要创建root用户,然后也不需要手动设置权限。
  • 但您可以使用 MYSQL_ROOT_PASSWORD 环境变量指定密码。

无论如何,您的查询(/mysql/home 目录下的init.sql)如下所示:

-- CREATE USER 'root'@'%' IDENTIFIED BY '1111';
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
CREATE DATABASE testdb;

在 docker-compose.yml 中,volumes 通常同步目录与目录的内容。因此,您需要从 volumes 指令中删除文件 init.sql。因此,docker-compose.yml 可能如下所示:

version: '3'

services:
  mysql:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: "1111"
    ports:
      - 3306:3306
    volumes:
     - /mysql/home:/docker-entrypoint-initdb.d
    container_name: mysql

关于mysql - 使用 MySQL 启动 docker 容器时 init sql 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557016/

相关文章:

python - Docker 为 Airflow 2 编写文件(版本 2.0.0)

java - Hibernate:Hibernate 为 Fetch 模式 Eager 进行的多个选择查询

mysql - SQL 查找没有标记为默认值的链接记录

docker - 如何在docker中使用traefik代理后端

docker - 无法找到Python包

docker - docker 卷创建-设置权限

php - 从 MySQL 生成的复选框列表生成 "checked"复选框的问题

没有任何无效 token 的 MySQL 语法错误

python - 如何在我的网络应用程序上安全地接受和运行用户的代码?

python - docker 中的 celery worker 将无法获得正确的消息代理