DB的備份與恢復

偉偉萌萌噠發表於2020-10-07

前言

因為我們的專案要進行底層架構改造,原本用的資料庫是關係型的Oracle資料庫。但是由於業務場景的需要,Oracle在多度查詢下效能表現較差,所以組內決定採用圖資料庫Arangodb來代替Oracle部門能力。所以博主在這段時間就去研究這個圖資料庫了,並且完成了十萬級,百萬計,千萬級資料的產生。本來是比較順利的,但是由於自己手賤,在copy程式碼的時候順帶copy了一行dropDatabase()的程式碼,然後果不其然,一百萬的資料瞬間就被幹沒了。然後由於Arangodb的生態不夠好,網上關於它的備份恢復相關資料基本沒有。所以最後只能重新造了一遍。然後博主就萌生了學習下DB的備份恢復相關的知識,所以就有了這篇水文。

正文

這裡將以Mysql為例,講述從利用儲存過程造資料,再到指令碼完成備份dump檔案,最後成功恢復資料庫的過程。

  • 建立儲存過程造資料資料
    這裡採用for迴圈,跑了一晚上大概達到千萬級資料量。

    CREATE DEFINER=root@% PROCEDURE testDatabase(in con INT)
    BEGIN
    DECLARE
    i int DEFAULT 1;
    WHILE i<con DO
    insert into user(id,username,number,age,isDelete)
    VALUES (i,‘junwei’,‘123456879’,20,0);
    END WHILE ;
    COMMIT;
    END

    select檢視測試資料的資料量,達到了3400w,而查詢時間需要16s。
    這個查詢效率真的是太差了,這個還是經過索引優化後的結果。所以說當mysql的達到千萬級或者上億時,磁碟的IO效能達到瓶頸,普通的sql優化方式已不能滿足業務需要,需要通過其他手段比如分庫分表等技術,提高整體的IO效能降低資料庫讀寫時間。

在這裡插入圖片描述

  • 匯出資料庫dump檔案
    mysql資料一般儲存在/var/lib/mysql下,一般我們備份資料庫的話是備份它的dump檔案,備份某個庫的命令為:
    mysqldump --database program(資料庫名) > program20200107(備份後的檔案),如圖:
    在這裡插入圖片描述

  • 刪除資料庫後通過dump檔案恢復

    drop databses刪除資料庫
    在這裡插入圖片描述
    mysql < dump檔案恢復資料庫
    在這裡插入圖片描述
    show一下檢視資料庫是否還原成功,資料是否存在
    在這裡插入圖片描述
    在這裡插入圖片描述
    證明資料庫被成功恢復。在生產中,應該用指令碼定時備份資料庫。而不是重複的手工操作。

結尾

國慶假期餘額不足了。。。

相關文章