我遇到了问题。我正在尝试在 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/