【问题标题】:run db script from docker container mysql从 docker 容器 mysql 运行 db 脚本
【发布时间】:2021-03-21 08:16:50
【问题描述】:

我想从 docker 容器运行 db setup 脚本并成功运行命令,但我需要将 setup.sh 中的所有命令放入一个 .sql 文件并运行相同的文件。

任何人都可以就如何实现它提供帮助和建议,当我在 dbScript.sql 中添加创建数据库时它会失败,而使用 mysql 命令行单独运行它是有效的。

setUp.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

【问题讨论】:

  • SQL脚本运行失败是什么原因?

标签: mysql docker shell


【解决方案1】:

你可以这样做:

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"

【讨论】:

    【解决方案2】:

    为什么是 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 他们会按照这个顺序运行;-)

    【讨论】:

      猜你喜欢
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多