首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有SQL文件的Docker容器中创建MYSQL表

问在带有SQL文件的Docker容器中创建MYSQL表
EN

Stack Overflow用户
提问于 2020-03-10 11:29:16
回答 1查看 2K关注 0票数 0

我已经创建了一个MySQL停靠容器

代码语言:javascript
复制
sudo docker run -d --name db-mysql -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_DATABASE=DB mysql

我有schema.sql来创建模式

代码语言:javascript
复制
DROP DATABASE IF EXISTS `DB`;
CREATE DATABASE `DB`;
USE `DB`;

DROP TABLE IF EXISTS `Occurrences`;
CREATE TABLE `Occurrences` (
  `IdOccurrence` int NOT NULL AUTO_INCREMENT,
  `Name` varchar(100) NOT NULL,
  `Min_probability` double NOT NULL,
  PRIMARY KEY (`IdOccurrence`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
INSERT INTO `Occurrences` VALUES (1,'Frequent',20),(2,'Probable',10),(5,'Possible',1),(6,'Rare',0.1),(7,'Remote',0);

并尝试导入它(在Ubuntu18.04中)

代码语言:javascript
复制
sudo docker exec db-mysql mysql -uroot -pmypassword DB < schema.sql

然而,我收到了这个警告

代码语言:javascript
复制
mysql: [Warning] Using a password on the command line interface can be insecure.

但是数据库DB仍然是空的。

我的错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 13:57:22

正如在文献资料中为码头映像所述,您可以使用sql脚本初始化容器:

当容器首次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为.sh、.sql和.sql.gz的文件,这些文件位于/initdb.d中。文件将按字母顺序执行。您可以通过将SQL转储安装到该目录并提供包含贡献数据的自定义映像来轻松填充mysql服务。默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中。

因此,如果您使用以下方式启动容器,则应该使用您的模式启动:

代码语言:javascript
复制
sudo docker run -d --name db-mysql -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_DATABASE=DB -v $PWD/schema.sql:/docker-entrypoint-initdb.d/schema.sql mysql
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60616709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档