簡體   English   中英

從 docker 容器 mysql 運行 db 腳本

[英]run db script from docker container mysql

我想從 docker 容器運行數據庫設置腳本並成功運行命令,但我需要將 setup.sh 中的所有命令放入一個 .sql 文件並運行相同的文件。

任何人都可以幫助並建議如何實現它,當我在 dbScript.sql 添加創建數據庫時它會失敗,而使用 mysql 命令行單獨運行它會失敗。

設置.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

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 容器命令

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

為什么作為 shell 腳本? 您可以在 docker-compose.yml 文件中進行設置

例如:

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

然后,在定義的路徑中創建一個init.sql文件(或任何其他名稱)。 從例子./mysql/init/init.sql

如果您想擁有多個 SQL 文件,它們應該有一個正確的名稱,以便按照您希望的順序運行。 因此,例如執行以下操作: 01-init.sql 02-inserts.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 容器命令

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