如何解决Docker - 从 ib_logfile / ibdata / ibtemp 恢复 MySQL 数据库
背景:
我们有一个在 Docker 中运行的 Redmine 堆栈,在 Debian 虚拟机中 - 它还提供更多 Docker 堆栈 -。必须关闭 VM 以添加更多 vRAM,并且在停止容器时我们注意到 Redmine 堆栈正在输出大量消息。每个其他堆栈都相应地运行。上次重启 Stack 是在 5 个月前(部署时)。
注意:如果权限看起来不对,那是因为这是最后一个状态的副本。具有正确权限的存档可用。整个 VM 的备份也可用。备份通过 Veeam Backup and Replication 处理。
当前状态:
ib_logfile0、ib_logfile1、ibdata1 的总大小为 172 MB。
docker-user@rosdocker01:~$ ls -lh redmine-softentw/storage/db/
total 176M
-rw-r----- 1 systemd-coredump docker-user 56 Nov 24 2020 auto.cnf
-rw-rw-r-- 1 systemd-coredump docker-user 3.4M Jun 28 15:27 backup.sql
-rw------- 1 systemd-coredump docker-user 1.7K Nov 24 2020 ca-key.pem
-rw-r--r-- 1 systemd-coredump docker-user 1.1K Nov 24 2020 ca.pem
-rw-r--r-- 1 systemd-coredump docker-user 1.1K Nov 24 2020 client-cert.pem
-rw------- 1 systemd-coredump docker-user 1.7K Nov 24 2020 client-key.pem
-rw-r----- 1 systemd-coredump systemd-coredump 600 Jun 29 08:56 ib_buffer_pool
-rw-r----- 1 systemd-coredump docker-user 48M Jun 29 08:56 ib_logfile0
-rw-r----- 1 systemd-coredump docker-user 48M Nov 24 2020 ib_logfile1
-rw-r----- 1 systemd-coredump docker-user 76M Jun 29 08:56 ibdata1
drwxr-x--- 2 systemd-coredump docker-user 4.0K Nov 24 2020 MysqL
-rw-r--r-- 1 systemd-coredump root 0 Jun 28 15:09 MysqLdump-all.sql
drwxr-x--- 2 systemd-coredump docker-user 4.0K Nov 24 2020 performance_schema
-rw------- 1 systemd-coredump docker-user 1.7K Nov 24 2020 private_key.pem
-rw-r--r-- 1 systemd-coredump docker-user 452 Nov 24 2020 public_key.pem
drwxr-x--- 2 systemd-coredump docker-user 4.0K Nov 24 2020 redmine
-rw-r--r-- 1 systemd-coredump docker-user 1.1K Nov 24 2020 server-cert.pem
-rw------- 1 systemd-coredump docker-user 1.7K Nov 24 2020 server-key.pem
drwxr-x--- 2 systemd-coredump docker-user 12K Nov 24 2020 sys
docker-user@rosdocker01:~$
文件夹 'redmine' 只有一个 'db.opt' 文件,里面有 65B。
在 Stack 正常停止之前的每日备份中,存在文件“ibtmp1” - 12.0MB -。
我们的 Redmine docker-compose.yml 看起来像这样:
docker-user@rosdocker01:~$ cat redmine-softentw/docker-compose.yml.bak
version: '3.1'
volumes:
redmine-softentw:
external: true
redmine-softentw-db:
external: true
services:
redmine-softentw:
image: redmine:4.1.1
restart: unless-stopped
expose:
- 3000
#ports:
# - 8080:3000
environment:
REDmine_DB_MysqL: redmine
REDmine_DB_PASSWORD: example
REDmine_SECRET_KEY_BASE: supersecretkey
environment:
- "VIRTUAL_HOST=redmine.company.tld"
- "VIRTUAL_PORT=80"
depends_on:
- redmine-softentw-db
networks:
- bsdocker
volumes:
- "redmine-softentw:/src/redmine/files"
redmine-softentw-db:
image: MysqL:5.7
restart: unless-stopped
environment:
MysqL_ROOT_PASSWORD: example
MysqL_DATABASE: redmine
networks:
- bsdocker
volumes:
- "redmine-softentw-db:/var/lib/MysqL"
networks:
bsdocker:
external: true
docker-user@rosdocker01:~$
存储文件的存储是使用以下 bash 脚本创建的:
STORAGE_PATH=${PWD}
mkdir -p "$STORAGE_PATH"/storage/{data,db}
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/data --opt o=bind redmine-softentw
docker volume create --driver local --opt type=none --opt device="$STORAGE_PATH"/storage/db --opt o=bind redmine-softentw-db
问题:
是否可以从 ib_logfile0、ib_logfile1、ibdata1 或 ibtmp1 恢复数据库? 或者至少从这个文件中捕获 sql 查询/事务,以便能够重新创建数据库?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。