docker中的多个mariadb数据库

dgjrabp2  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(360)

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

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

jjjwad0x

jjjwad0x1#

这违背了 Docker 的本意。您应该有几个容器使用单个服务(这里是mariadb)。但是如果您想让它们反映相同的状态,您应该使用数据库提供的方法之一(对于mariadb,您可以在这里的官方文档中找到很多)
mariadb提供的本地机制之一是 master-slave replication 官方文件解释得很好。另一个有效的机制是 parallel replication 在这里的官方文件中解释并举例说明
这些机制需要一点配置。我不会列出整个过程,因为它在官方文档中有很好的解释,还有附加的安全性和可维护性说明。
例如,另一个db-a postgresql数据库可以在许多容器中顺利运行,并且如果您在那些可能共享的示例之间共享一个卷,那么很容易实现负载平衡 pg_data 数据库的( pg_data 目录内的 volume 在容器之间共享)。类似的机制可能适用于mariadb。
但是如果您真的坚持在一个容器中包含多个服务,那么您可以从多个数据库开始编写bash脚本,并通过 command 在dockerfile或docker compose中。

omqzjyyz

omqzjyyz2#

我知道你想在同一个容器中创建两个数据库,对吗?我认为这违背了微服务架构的原则。
不管怎样,我认为在初始化新示例时这是可能的:
当容器第一次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为.sh、.sql和.sql.gz的文件,这些文件位于/docker entrypoint initdb.d中。文件将按字母顺序执行。
更新mariadb/mysql目录链接下的文件:

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

相关问题