MySQL中基於mysqldump和二進位日誌log-bin二進位日誌進行邏輯備份以及基於時間點的還原

來源:互聯網
上載者:User

標籤:ges   run   href   datetime   blank   版本   into   edit   file   

 

本文出處:http://www.cnblogs.com/wy123/p/6956464.html 

 

 

本文僅類比使用mysqldump和log-bin二進位日誌進行簡單測試,僅作為個人學習筆記,可能離實際應用還有很大差距,僅參考。

 

開啟MySQL的bin-log二進位日誌

  類比還原是需要mysqldump出來的檔案和log-bin,因此需要開始log-bin二進位日誌。
  mysql5.7.18在開啟二進位日誌的時候除了要設定log-bin的位置之外,另外需要設定一個server-id,MySQL之前的版本應該不需要這個設定。

  吐槽一下開源軟體,基本上每個版本都有一些跟之前版本不一樣的地方,網上查資料,不同版本的情況下不少東西都是不一樣的,這一點需要注意。

  

  重啟之後,查詢log_bin相關的變數

  

 

mysqldump備份(匯出)資料的基本使用

mysqldump命令參數相當多,簡單記錄一下常用的命令,以及利用mysqldump備份(嚴格說是匯出資料)和二進位日誌log-bin進行資料庫還原操作。


-- 備份testdb整個資料庫,-l表示給所有表上加一個讀鎖,-F(F要大寫,消協不報錯單頁無效)表示滾動產生一個新的記錄檔
mysqldump -u root -p -l -F -h localhost testdb > usr/local/mysqlbak/test20170607_data.sql

備份出來的檔案就是create table和insert into table的指令碼

-- 備份testdb資料庫中的test_table1 test_table2兩張表,加上--no-create-info就意味這個備份出來的檔案不帶create table的指令碼,僅僅是insert into table的資訊
mysqldump -uroot -p -h localhost testdb test_table1 test_table2 --no-create-info> usr/local/mysqlbak/test20170606_1.sql

-- 備份testdb資料庫中的test2表中的一部分資料,也就是備份test_table1表中符合id<1000的資料
mysqldump -uroot -p -h localhost testdb test_table1 --where "id<1000" > usr/local/mysqlbak/test20170606_2.sql

 

更多mysqldump的參數,參考:http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html

 

利用mysqldump備份的檔案和log-bin二進位日誌進行還原

  首先在以表中有資料的情況下進行備份

  執行 mysqldump -u root -p -l -F -h localhost testdb --master-data=2 > usr/local/mysqlbak/test20170607_data.sql

  

  這裡加了一個--master-data=2的選項,目的是在備份檔案中備忘出來當前的log_bin的檔案,
  至於為什麼要加這個命令,很多部落格上都記錄的是用mysqldump備份出來一個檔案之後,修改資料,然後類比資料庫誤刪或者宕機還原怎麼的,然後在使用mysqldump出來的檔案還原之後,接著使用log-bin還原
  雖然都是測試類比,但是有一個明顯的問題啊,怎麼知道mysqldump之後日誌是否發生了滾動,滾動了幾次?
  如果日誌不滾動還要,按照時間點或者位置還原log-bin檔案,如果滾動了,怎麼知道滾動了幾個記錄檔呢
  就需要在mysqldump執行的時候,記錄下來重新整理日誌之後的新產生的log-bin檔案,在使用日誌還原的時候,才能判斷使用哪些日誌進行還原。

  有了--master-data=2的選項,才知道mysqldump備份時候的log_file位置

  然後繼續往表中插入10條資料

  

  然後類比在某個時間點誤刪資料的情況,truncate測試表,測試表此時為空白

  

  首先利用mysqldump出來的檔案還原資料庫,mysqldump出來的檔案備份是100行時候的資料
  因為備份檔案中備份的時候的資料是100行,這裡還原之後是100行,沒有問題。

  

  然後接著利用log-bin按照還原時間點,上面說了,mysqldump出來的檔案記錄了日誌重新整理之後的log-bin的檔案名稱,
  那麼就可以判斷日誌是否發生了滾動,如果沒有滾動,就按照最新的log-bin進行按照時間點進行還原。

  

  進行一次mysqldump備份還原
  mysql -u root -p testdb < usr/local/mysqlbak/test20170607_data.sql
  進然後再行一次基於bin-log的還原時間點
  mysqlbinlog --stop-datetime="2017-6-7 21:45:00" /var/lib/mysql/mysql-bin.000022 | mysql -u root -p testdb
  然後資料就回來了。

  

 

 

  當然這裡僅僅是類比操作,當然還有許多細節尚未確定,如果發生了日誌滾動,要做基於時間點的還原,還要追究到究竟是基於哪個記錄檔的時間點。

 

總結:

  本文僅僅以一個簡單的樣本來模式資料庫的還原作業,
  mysqldump備份模式比較簡單粗暴,僅僅是將資料匯出為insert指令碼,在還原較大資料時候會有效能問題,可能mysqldump就不適合了,就需要更為高效的xtrabackup來做備份還原了。

 

  

   

  

 

MySQL中基於mysqldump和二進位日誌log-bin二進位日誌進行邏輯備份以及基於時間點的還原

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.