Docker中的多个MariaDB数据库

时间:2018-05-04 10:55:07

标签: 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'

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

2 个答案:

答案 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';