Link mongo-数据到 /data/db 文件夹到卷 Mongodb Docker
Link mongo-data to /data/db folder to a volume Mongodb Docker
我不小心删除了一个 docker mongo-data:/data/db 的卷,我有那个文件夹的副本,现在问题是当我 运行 docker-compose up mongodb container doesn't start and gives an error of mongo_1 exited with code 14 below more details of the error and the mongo-data folder, can有人帮帮我吗
在docker-compose.yml
卷:
- ./mongo-数据:/data/db
从备份文件恢复
修复 docker 容器中失败的 mongodb 损坏文件的分步过程:
!在开始之前,复制文件。 !
确保您知道运行容器中镜像的版本
生成新容器运行修复过程如下
docker run -it -v <data folder>:/data/db <image-name>:<image-version> mongod --repair
修复文件后,您可以从 docker-compose
启动容器
如果修复失败,通常意味着文件损坏无法修复。仍然有机会通过将数据导出为 described here.
来修复它
如何保护正确的备份文件
数据库不断地使用文件,所以磁盘上的文件不断地变化。此外,数据库会在将某些更改刷新到文件系统之前将其保留在内部内存缓冲区中。尽管数据库引擎在确保数据库可以通过使用 2 阶段提交过程(首先更新事务日志而不是数据文件)从突然故障中恢复方面做得非常好,但是当复制文件时,可能会出现损坏将阻止数据库恢复。
这种损坏的原因是复制进程不知道数据库写入进程的进度,这会造成 racing condition
。用非常简单的话来说,当数据库正在写入时,复制过程将创建一个更新一半的文件副本,因此它会被破坏。
当数据库编写器正在写入文件时,我们称它们为 hot
文件。 hot files
是 OS 视角的术语,MongoDB 也使用 hot backup
术语,这是 MongoDB
视角的术语。 Hot backup
表示备份是在数据库 运行ning 时进行的。
要拍摄正确的快照(确保文件是 cold
),您需要按照 here 说明的过程进行操作。简而言之,在此过程中发出的命令 db.fsyncLock()
将通知数据库引擎刷新所有缓冲区并停止写入文件。这将使文件 cold
,但数据库仍然 hot
,因此术语 hot files
和 hot backup
之间存在差异。复制完成后,通过发出 db.fsyncUnlock()
通知数据库开始写入文件系统
Note the process is more complex and can change with different version of the databse. Here I give a simplification of it, in order to illustrate the point about the problems with the file snapshot. To secure proper and consistent backup, always follow the documented procedure for the database version that you use.
建议的备份方法
首选备份应该始终是数据转储方法,因为这确保即使在 upgraded/downgraded 数据库引擎的情况下也可以恢复。 MongoDB
提供了名为 mongodump
的非常有用的工具,可用于通过转储数据而不是文件副本来创建数据库备份。
有关如何使用备份工具以及其他备份方法的更多详细信息,请阅读 MondoDB 文档的 MongoDB Backup Methods 章节。
我不小心删除了一个 docker mongo-data:/data/db 的卷,我有那个文件夹的副本,现在问题是当我 运行 docker-compose up mongodb container doesn't start and gives an error of mongo_1 exited with code 14 below more details of the error and the mongo-data folder, can有人帮帮我吗
在docker-compose.yml
卷: - ./mongo-数据:/data/db
从备份文件恢复
修复 docker 容器中失败的 mongodb 损坏文件的分步过程:
!在开始之前,复制文件。 !
确保您知道运行容器中镜像的版本
生成新容器运行修复过程如下
docker run -it -v <data folder>:/data/db <image-name>:<image-version> mongod --repair
修复文件后,您可以从
启动容器docker-compose
如果修复失败,通常意味着文件损坏无法修复。仍然有机会通过将数据导出为 described here.
来修复它如何保护正确的备份文件
数据库不断地使用文件,所以磁盘上的文件不断地变化。此外,数据库会在将某些更改刷新到文件系统之前将其保留在内部内存缓冲区中。尽管数据库引擎在确保数据库可以通过使用 2 阶段提交过程(首先更新事务日志而不是数据文件)从突然故障中恢复方面做得非常好,但是当复制文件时,可能会出现损坏将阻止数据库恢复。
这种损坏的原因是复制进程不知道数据库写入进程的进度,这会造成 racing condition
。用非常简单的话来说,当数据库正在写入时,复制过程将创建一个更新一半的文件副本,因此它会被破坏。
当数据库编写器正在写入文件时,我们称它们为 hot
文件。 hot files
是 OS 视角的术语,MongoDB 也使用 hot backup
术语,这是 MongoDB
视角的术语。 Hot backup
表示备份是在数据库 运行ning 时进行的。
要拍摄正确的快照(确保文件是 cold
),您需要按照 here 说明的过程进行操作。简而言之,在此过程中发出的命令 db.fsyncLock()
将通知数据库引擎刷新所有缓冲区并停止写入文件。这将使文件 cold
,但数据库仍然 hot
,因此术语 hot files
和 hot backup
之间存在差异。复制完成后,通过发出 db.fsyncUnlock()
Note the process is more complex and can change with different version of the databse. Here I give a simplification of it, in order to illustrate the point about the problems with the file snapshot. To secure proper and consistent backup, always follow the documented procedure for the database version that you use.
建议的备份方法
首选备份应该始终是数据转储方法,因为这确保即使在 upgraded/downgraded 数据库引擎的情况下也可以恢复。 MongoDB
提供了名为 mongodump
的非常有用的工具,可用于通过转储数据而不是文件副本来创建数据库备份。
有关如何使用备份工具以及其他备份方法的更多详细信息,请阅读 MondoDB 文档的 MongoDB Backup Methods 章节。