欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從ibd文件恢復MySQL數據的操作步驟及常見錯誤

 更新時間:2024年08月17日 08:59:31   作者:mikey桑  
MySQL數據恢復是數據庫管理中的一項重要任務,尤其是在遭遇意外數據丟失、硬件故障或軟件錯誤時,下面這篇文章主要給大家介紹了關于從ibd文件恢復MySQL數據的操作步驟及常見錯誤,需要的朋友可以參考下

1.背景

前段時間,我的云服務器被病毒木馬入侵了,導致服務器所有服務全部下線,且22端口被侵,遠程無法登錄,VNC模式也無法登錄。嘗試備份鏡像和云硬盤,并用原來的鏡像重裝系統(tǒng),依舊無法登錄。

遂只能采用xx云服務器上的救援模式,掛載一下原來的硬盤,把關鍵的文件導出到本地,再重裝系統(tǒng)將文件重新上傳。

MySQL數據庫數據的恢復的過程中,踩了一些坑,下文給出具體的恢復的操作過程。

2.操作步驟

2.1 備份源數據庫的ibd文件

整個MySQL數據庫數據的恢復都是基于ibd文件的,所以最重要的自然是將源數據庫的ibd文件保存下來。

這里要注意的是,MySQL默認的數據保存地點在/var/lib/mysql目錄下,這個目錄下會有你創(chuàng)建的具體的schema的文件夾,以及這個schema中所有表的ibd文件,我們直接使用SFTP導出整個文件夾即可,后續(xù)的恢復操作都會基于ibd文件來展開。

如果你的MySQL之前安裝的時候是自己手動指定的安裝目錄,可以使用下面的命令查詢mysql的安裝目錄,然后備份的操作同上。

find / -name mysql

2.2 準備數據庫建表語句

這里可能有些人沒有備份建表語句的習慣,大家可以先斷開自己本地的網絡連接,然后使用自己平時常用的數據庫連接工具,直接查看DDL語句,一般數據庫連接工具里面都有緩存的數據庫的建表語句。

2.3 重新安裝新數據庫

在新的系統(tǒng)上安裝好新數據庫,默認安裝會安裝到地址/var/lib/mysql下。

2.4 新數據庫恢復數據具體步驟

1、創(chuàng)建數據庫schema

比如我們創(chuàng)建數據庫test,并切換到test數據庫。在MySQL中執(zhí)行如下SQL。

create database test;
use test;

2、創(chuàng)建表

這里直接把前面準備好的數據庫建表語句全部執(zhí)行,在MySQL中執(zhí)行如下SQL。

create table xxx ...

3、移除表空間

這一步是直接把剛才建好的表空間移除,執(zhí)行命令如下,在MySQL中執(zhí)行如下SQL。

alter table xxx discard tablespace;

其中xxx為具體的表名,做完這一步的現(xiàn)象就是在/var/lib/mysql/test目錄下,剛才因為我們創(chuàng)建表所生成的ibd文件被刪除了。

4、上傳源數據庫ibd文件

前面我們已經備份了源數據庫中表的ibd文件,現(xiàn)在將文件使用SFTP工具上傳到剛才的/var/lib/mysql/test目錄下。(注意:這里的/var/lib/mysql是我本地數據庫的安裝目錄,而test是我數據庫的名稱,各位具體情況需要根據自己數據庫的情況而定)

5、修改ibd文件權限

上一步通過SFTP上傳的ibd文件正常應該是root用戶上傳的,我們需要使用mysql用戶來完成剩下的操作,在LinuxShell的命令行中執(zhí)行下面的命令。

chown mysql:mysql /var/lib/mysql/test/*.ibd

同理,上述的/var/lib/mysql/test是我本機的數據庫位置,各位實際操作的時候需要根據自己本機情況進行相應的修改,而*.ibd表示給所有的ibd文件都修改權限。

6、重導表空間

上一步我們已經上傳好ibd文件,并修改了文件權限,這一步要做的就是讓MySQL識別到剛才上傳的數據,重新導入表空間。這一步可以一個表一個表的進行導入表空間,原因是因為有些表的ibd文件可能已經不支持導入了,導入的時候會報錯,我們先把可以恢復的表恢復了,在MySQL中執(zhí)行如下SQL。

alter table xxx import tablespace;

3.常見錯誤

在操作恢復數據庫的過程中,我遇到了一些錯誤,并且導致了部分表無法恢復成功,在這里總結幾種。

3.1 權限問題

由于上傳的ibd文件是root用戶上傳的,導致在MySQL中執(zhí)行SQL會報錯,這個時候通過Shell工具修改ibd文件的權限即可,具體參考2.4節(jié)第5步。

3.2 報錯不存在CFG文件

這個報錯我網上查了一下,有的文章說,在數據庫ibd文件同級目錄下存在CFG文件,需要和ibd文件一起導入新的數據庫,但是我的MySQL版本是8.0.31并沒有相關的CFG文件。

后續(xù)查閱官方文檔,是因為我在最開始建表以后,使用ALTER操作新增了列,導致表結構的存儲發(fā)生了變化,這被官方稱為DDL INSTANT,所以無法恢復。面對這種問題,建議大家平時對數據庫數據多多備份,減少數據丟失。

3.3 通過ibd文件恢復數據后自增主鍵問題報沖突

我有一些表使用了數據庫的自增主鍵,在恢復完數據以后,重新部署了應用,在使用自增主鍵的表中出現(xiàn)了主鍵沖突的情況。

原因是通過原來的ibd文件導入數據并沒有同步相應的系統(tǒng)表的結構,所以新的MySQL認為自增主鍵還是從1開始算,實際上數據庫中的數據自增列早已增長到一定數目了。針對這個問題,我目前沒有想到好的方法,只能先將恢復好的數據庫數據導出到SQL,然后刪除原表重新建表以后,再重新導入。

當然如果沒有使用到系統(tǒng)能力(比如自增主鍵)的表,是無需刪除表再重新導入數據的。

總結

到此這篇關于從ibd文件恢復MySQL數據的操作步驟及常見錯誤的文章就介紹到這了,更多相關從ibd文件恢復MySQL數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論