简体   繁体   English

从 docker 容器 mysql 运行 db 脚本

[英]run db script from docker container mysql

I want to run db set up script from docker container and successfully able to run commands but I need to put all commands in setup.sh into one.sql file and run the same.我想从 docker 容器运行数据库设置脚本并成功运行命令,但我需要将 setup.sh 中的所有命令放入一个 .sql 文件并运行相同的文件。

Can anyone help and advise on how it can be achieved, when I add create database in dbScript.sql it fails whereas running it separately with mysql command lines works.任何人都可以帮助并建议如何实现它,当我在 dbScript.sql 添加创建数据库时它会失败,而使用 mysql 命令行单独运行它会失败。

setUp.sh设置.sh

#!bin/bash
mysql -u root -p -e "drop database IF EXISTS order_db"
mysql -u root -p -e "create database order_db"
mysql -u root -p order_db < dbScript.sql

db.sql db.sql

USE order_db;

DROP TABLE IF EXISTS `order`;

CREATE TABLE `order` (
  `id` int(9) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

docker container command docker 容器命令

#!bin/bash
docker-compose up -d
docker exec -it ordermanagementsystem_db_1 bash ./setUp.sh

why as a shell script?为什么作为 shell 脚本? you can set up that in your docker-compose.yml file您可以在 docker-compose.yml 文件中进行设置

Eg:例如:

version: '3'
  services:
    web:
      (...)
    database:
      volumes:
        - ./mysql/init:/docker-entrypoint-initdb.d:ro

then, you create an init.sql file (or whatever any other name) in the defined path.然后,在定义的路径中创建一个init.sql文件(或任何其他名称)。 From the example./mysql/init/init.sql从例子./mysql/init/init.sql

If you want to have more than one SQL file, they should have a proper name in order to be run in the sequence you wish.如果您想拥有多个 SQL 文件,它们应该有一个正确的名称,以便按照您希望的顺序运行。 So for example do something like this: 01-init.sql 02-inserts.sql and they will be run in that order;-)因此,例如执行以下操作: 01-init.sql 02-inserts.sql ,它们将按该顺序运行;-)

You can do this as below:您可以按以下方式执行此操作:

dbScript.sql dbScript.sql

drop database IF EXISTS order_db
create database order_db;
USE order_db;

DROP TABLE IF EXISTS `order`;

CREATE TABLE `order` (
`id` int(9) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

docker container command docker 容器命令

docker-compose up -d
docker exec -i ordermanagementsystem_db_1 mysql -u root -p -e "source dbScript.sql"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM