Создание таблицы MYSQL в контейнере Docker с файлом SQL - PullRequest
0 голосов
/ 10 марта 2020

Я создал MySQL docker контейнер с

sudo docker run -d --name db-mysql -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_DATABASE=DB mysql

У меня есть схема. sql для создания схемы

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);

И попробуйте импортировать его (в Ubuntu 18.04) с

sudo docker exec db-mysql mysql -uroot -pmypassword DB < schema.sql

Однако я получаю это предупреждение

mysql: [Warning] Using a password on the command line interface can be insecure.

Но БД базы данных остается пустой.

Где находится моя ошибка?

1 Ответ

2 голосов
/ 10 марта 2020

Как указано в документации для образа docker, вы можете инициализировать контейнер с помощью скрипта sql:

Когда контейнер запускается в первый раз , новая база данных с указанным именем будет создана и инициализирована с предоставленными переменными конфигурации. Кроме того, он будет выполнять файлы с расширениями. sh,. sql и. sql .gz, которые находятся в /docker-entrypoint-initdb.d. Файлы будут выполнены в алфавитном порядке. Вы можете легко заполнить свои службы mysql, смонтировав дамп SQL в этот каталог и предоставив пользовательские изображения с предоставленными данными. SQL файлы будут импортированы по умолчанию в базу данных, указанную в переменной MYSQL_DATABASE.

Поэтому, если вы запустите свой контейнер со следующим, он должен запуститься с вашей схемой:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...