Mysql Docker中的多个MariaDB数据库

Mysql Docker中的多个MariaDB数据库,mysql,docker,mariadb,Mysql,Docker,Mariadb,使用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' 这个很好用。

使用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'

这个很好用。要在同一个容器中创建另一个数据库,我需要做什么?

这与Docker的用途背道而驰您应该有几个容器,每个容器使用单个服务(这里是mariadb)。但是,如果您希望它们反映相同的状态,您应该使用数据库提供的方法之一(对于mariadb,您可以在官方文档中找到很多)

MariaDB提供的本机机制之一是
主从复制
,在官方文档中有很好的解释。另一个有效的机制是
并行复制
,在官方文件中解释并举例说明

这些机制需要一点配置。我不会列出整个过程,因为它在官方文档中有很好的解释,还有额外的安全性和可维护性说明

另一个DB示例-PostgreSQL数据库可以在多个容器中顺利运行,并且如果您在共享数据库
pg_数据
的实例之间共享一个卷(
pg_数据
容器之间共享的
volume
目录),则可以轻松实现负载平衡。类似的机制可能适用于MariaDB


但是如果你真的坚持在一个容器中有多个服务你可以从多个数据库开始编写bash脚本,并通过Dockerfile或docker compose中的
命令执行该脚本。

我知道你想在同一个容器中创建两个数据库,对吗?我认为这违背了微服务体系结构原则

无论如何,我认为这在初始化新实例时是可能的:

第一次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量初始化该数据库。此外,它将执行扩展名为.sh、.sql和.sql.gz的文件,这些文件位于/docker entrypoint initdb.d中。文件将按字母顺序执行

更新mariadb/mysql目录下的文件:


你能再解释一下另一个集装箱吗?这是马里亚达的又一个例子吗?或者您想托管另一个数据库,如Moongo DB?在MySQL中,一个mysqld实例支持多个数据库-它们共享公共资源,如连接端口和身份验证定义(但可能具有不同的权限)。你只是想要一个实例运行多个数据库,还是想要多个实例?听起来好像我想要一个实例运行多个数据库。我不明白,为什么这是公认的答案。问题是,如何将容器配置为同时具有多个数据库,而不是多个DMS进程。没有回复或其他任何东西,只有一个db test1和一个test2。尽管人们认为这违背了docker的本质,但我仍然认为有一个有效的用例。例如,在我们的开发环境中,对于集成测试,不需要单独的数据库服务来处理测试。因此,拥有一个处理开发和测试数据库的单一数据库docker服务是非常有意义的。有时旋转所有这些数据库实例会增加开发环境中的资源消耗,我曾经遇到过这个问题,当我为每个微服务创建了8个数据库实例时,容器无法运行
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';