删除Docker容器后MySQL数据库是否丢失及恢复方法咨询
删除Docker容器后MySQL数据库是否丢失及恢复方法咨询
嘿,我来帮你理清楚这个问题~
首先,从你遇到的情况——重新启动容器后WordPress进入首次安装流程——来看,你的MySQL数据库确实已经丢失了。原因很简单:你的docker-compose.yml里的db服务没有配置数据持久化卷。
默认情况下,Docker容器里的所有数据都是存储在容器自身的文件系统里的,当你选择“Delete forever”删除容器时,容器的所有内容(包括MySQL存储的数据库文件)都会被彻底删除。重新用docker compose up -d启动时,会创建一个全新的MySQL容器,自然就是空数据库,所以WordPress会引导你走首次安装流程。
那有没有办法恢复呢?这得分情况:
- 如果你之前没有对数据库做过任何备份(比如用
mysqldump导出过数据,或者用docker cp把容器里的/var/lib/mysql目录拷贝到宿主机,或者通过phpMyAdmin导出过数据库),也没有用docker commit把MySQL容器保存为镜像的话,很遗憾,数据基本没法恢复了。 - 如果你有上述任何一种备份,那可以通过对应的方式恢复:比如把备份的SQL文件导入新的MySQL容器,或者把之前拷贝的
/var/lib/mysql目录挂载到新容器里。
为了避免以后再出现这种情况,你需要给db服务添加数据持久化配置。修改你的docker-compose.yml,给db服务加上volumes字段,把MySQL的数据目录映射到宿主机的目录:
services: # mysql db: image: mysql:latest restart: always environment: MYSQL_ROOT_PASSWORD: RootPwd MYSQL_DATABASE: WPDatabase MYSQL_USER: WPUser MYSQL_PASSWORD: MySQLPwd volumes: - ./mysql-data:/var/lib/mysql # 添加这一行,映射宿主机目录到容器内的数据目录 # phpmyadmin phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin restart: always ports: - '8080:80' environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: RootPwd # wordpress wordpress: depends_on: - db image: wordpress:latest restart: always ports: - '8000:80' # 补全你原来的端口配置 volumes: - ./wp-content:/var/www/html/wp-content # 也可以给WordPress添加持久化,保存主题、插件等内容
这样配置后,MySQL的数据会存储在你宿主机当前目录下的mysql-data文件夹里,就算以后删除容器,这个文件夹里的数据依然存在,重新启动容器时就会加载原来的数据库,不会再出现首次安装的情况。
备注:内容来源于stack exchange,提问作者Raymond
相关产品推荐
相关产品推荐

