[英]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.