使用Docker(v.2)我在docker-compose.yml
:
mysql:
image: mariadb:latest
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 'test'
MYSQL_DATABASE: 'test'
MYSQL_USER: 'test'
MYSQL_PASSWORD: 'test'
这很好用。在同一个容器中创建另一个数据库需要做什么?
答案 0 :(得分:1)
它反对Docker的意图。 你应该有几个容器利用每个服务(这里是mariadb)。但是如果你想要它们反映相同的状态,你应该使用数据库提供的方法之一(对于mariadb,你可以在官方文档here中找到很多)
MariaDB提供的本机机制之一是官方文档here中详细解释的master-slave replication
。另一个有效的机制是parallel replication
在官方文档here
这些机制需要一点配置。我不会列出整个过程,因为它在官方文档中有更好的安全性和可维护性说明。
另一个数据库的示例 - 如果您在共享数据库pg_data
的实例之间共享卷,则可以在许多容器中顺利运行PostgreSQL数据库并轻松实现负载平衡({{1容器之间共享的pg_data
内的目录。类似的机制可能适用于MariaDB。
但如果您真的坚持在一个容器中拥有多个服务,您可以编写一个从多个数据库开始的bash脚本,并通过Dockerfile中的volume
或docker-compose执行此脚本
答案 1 :(得分:1)
据我所知,你想在同一个容器中创建两个数据库,对吧?我认为这违反了微服务架构原则。
无论如何,我认为在初始化一个新实例时这是可能的:
首次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为.sh,.sql和.sql.gz的文件,这些文件位于/docker-entrypoint-initdb.d中。文件将按字母顺序执行。
更新mariadb / mysql目录link下的文件:
DROP USER IF EXISTS 'MYSQL_USER';
CREATE USER 'MYSQL_USER'@'%';
CREATE DATABASE IF NOT EXISTS MYSQL_DATABASE;
GRANT ALL ON MYSQL_DATABASE.* TO 'MYSQL_USER'@'%' IDENTIFIED BY 'MYSQL_PASSWORD';
--------------your new NewDB----------------------
CREATE DATABASE IF NOT EXISTS NewDB;
GRANT ALL ON NewDB.* TO 'MYSQL_USER'@'%' IDENTIFIED BY 'MYSQL_PASSWORD';