恢复MySQL.ibd数据库

1年前 4

前两天服务器宕机,导致很多数据丢失,尤其是群晖里docker数据,譬如rss.iyl.me,好在映射在群晖文件夹里,我直接拷贝下来了。

之前数据库备份一直都是mysqldump命令或者phpMyAdmin导出来.sql及其压缩格式。今天我们来试试如何恢复MySQL/data文件夹下的数据库。

在之前群晖docker安装MySQL和phpmyadmin的文章里,介绍到MySQL的data路径/var/lib/mysql映射到/docker/mysql。

有人说直接把MySQL文件夹下的文件直接覆盖不就行了?我试过,然后MySQL意外停止。

1、先别急,在phpmyadmin里新建一个数据库freshrss,将从新建立的freshrss站点备份出来的数据库导入进去。但是务必要确定与你要恢复的数据表名称一致!需要的可以下载我这个文件,将数据表前缀改成你自己的就成。

20230916214400.png
新建空白数据表

2、此时,你回头看看/docker/mysql/freshrss/下就会出现与上面新建数据表一样的数据了。然后关闭MySQL服务,我们尽量不要在数据库使用的情况下替换,接着我们将备份数据覆盖/docker/mysql/freshrss/下的数据,然后我们再启动MySQL服务。

3、通过SSH进入群晖里docker。

docker ps                                #列出当前运行的docker
docker exec -it Docker_ID /bin/bash      #Docker_ID 为上述列出的docker id
mysql -uroot -p                          #进入MySQL,输入密码,回车
use freshrss                             #选择freshrss数据库
#下面是导入各个数据表
ALTER TABLE rss_hjyl_org_category IMPORT TABLESPACE;
ALTER TABLE rss_hjyl_org_entry IMPORT TABLESPACE;
ALTER TABLE rss_hjyl_org_entrytag IMPORT TABLESPACE;
ALTER TABLE rss_hjyl_org_entrytmp IMPORT TABLESPACE;
ALTER TABLE rss_hjyl_org_feed IMPORT TABLESPACE;
ALTER TABLE rss_hjyl_org_tag IMPORT TABLESPACE;
20230916224620.png
导入数据表

好了,如此,数据库就替换完了。如果你还想导出来的话,可以到phpmyadmin导出,或者在ssh里使用命令完成:

mysqldump -uroot -p freshrss|gzip > /var/lib/mysql/freshrss.sql.gz   #回车输入密码

这样在/docker/mysql下就能看到你导出来的数据库备份文件了。

参考资料:
https://www.bilibili.com/video/BV1Sh4y1y7X6/
https://juejin.cn/post/7041468609943568415

4 条评论

  1. #1

    好有耐心喔,类似的我都写搞个域名建个站简单写进去,遇到问题如果忘记了去翻。

    • @sagrre 没办法,为了达到目的,我折腾了一晚上。没有记录的那么顺利!

  2. #2

    这…感觉好麻烦啊,看着头大… 以后遇到相同问题再来看

    • @profan 相当麻烦,而且经常不知明的失败。
      话说,发现今天开始你们留言,我没收到邮件提醒,好奇怪!