Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker:将mysql数据库拆分为不同的数据卷容器?_Mysql_Database_Nginx_Docker - Fatal编程技术网

Docker:将mysql数据库拆分为不同的数据卷容器?

Docker:将mysql数据库拆分为不同的数据卷容器?,mysql,database,nginx,docker,Mysql,Database,Nginx,Docker,我有以下Docker容器: web(nginx) db(mysql) web容器链接到db容器。所有标准的东西 对于数据持久性,我想采用这种方法 我希望能够使用这两个容器作为主要的应用程序容器来运行多个网站(从技术上讲,web容器运行主要的面向用户的应用程序,db) 假设我在mysql中分别使用数据库A、siteB、和siteC,使用数据库A、B、和C 我希望能够将这些站点的数据库数据划分为3个不同的数据卷容器(dataA,dataB,dataC),以实现可移植性,并将它们集中在一个部署中(

我有以下Docker容器:

  • web
    (nginx)
  • db
    (mysql)
web
容器链接到
db
容器。所有标准的东西

对于数据持久性,我想采用这种方法

我希望能够使用这两个容器作为主要的应用程序容器来运行多个网站(从技术上讲,
web
容器运行主要的面向用户的应用程序,
db

假设我在mysql中分别使用数据库
A
siteB
、和
siteC
,使用数据库
A
B
、和
C

我希望能够将这些站点的数据库数据划分为3个不同的数据卷容器(
dataA
dataB
dataC
),以实现可移植性,并将它们集中在一个部署中(一台主机在需要时运行
web
db
dataA
dataB
dataC
并适当链接)

有没有办法将单独的mysql数据库划分到各自的数据卷容器中以便于移植?好的,mysql以某种方式将其所有数据库数据存储在
/var/lib/mysql
中,这种方式对于mysql存储的数据库来说是不透明的


例如,如果将存储在mysql中的不同数据库映射到已知目录就好了——在本例中,
/var/lib/mysql/A
/var/lib/mysql/B
,以及
/var/lib/mysql/C
。这样,我就必须持久化这些目录并将它们装载到
db
容器中。我不这么做nk但情况就是这样。

为什么不运行多个db容器实例?根据需要映射目录

docker run -d -v /var/lib/mysql/A:/var/lib/mysql --name dbA my_docker/my_awesome_mysql
docker run -d -v /var/lib/mysql/B:/var/lib/mysql --name dbB my_docker/my_awesome_mysql
docker run -d -v /var/lib/mysql/C:/var/lib/mysql --name dbC my_docker/my_awesome_mysql

如果您只需要将dbA移动到另一台主机上,这会有所帮助。

我不想这样做的最大原因是,这会使我的
web
容器的链接复杂化(使用单个
db
容器,链接很简单)。使用3个数据库容器,链接将如何工作?此外,如果应用程序代码中的所有数据库连接器都要连接到一个众所周知的端口,那么在没有一些非常特殊的NAT技巧的情况下部署此多数据库设置将非常困难。您需要3个链接--链接dbA:dbA--链接dbB:dbB--链接dbC:dbC,然后配置您的应用程序应用程序,以便访问不同主机上的每个数据库。dbA:PORT dbB:PORT dbC:PORT。它们使用相同的端口,因为它们运行在不同的主机上。这就像连接到三台服务器。您的应用程序代码应该能够轻松处理三个数据源。感谢您的澄清。听起来是一个合理的解决方案。我的这种方法的另一个问题是,我的主机上的数据库进程明显重复。从安全角度来看,这实际上是一种优势,一个实例的问题不会传播到另一个实例的问题。我刚刚意识到,由于eac有单独的mysqld实例,服务器上的内存消耗越来越大h应用程序:(默认配置下,每个mysql实例消耗大约400MB的内存。这也是我希望只使用一个mysqld实例并拥有可插入数据源的可插入数据库的另一个原因。我猜您需要一个mysql服务器进程,将每个数据库保存在不同的目录中。我在mysql文档。也许将数据库常规转储到这些目录中并能够重新导入就足够了。否则我建议使用Luke的方法。