回覆列表
  • 1 # 使用者7264712183002

    MySQL線上表修改操作是一個歷史問題了,再5.6和5.7上有非常多的改進,很多情況下都不用鎖表了。如果你實在不想升級MySQL到新版本的話,建議使用percona的工具集(MySQL Tools & Management Software to Perform System Tasks by Percona)中的線上表結構修改pt-online-schema-change,不鎖表來修改表結構。其實原理也很簡單,新建和原表表結構一模一樣的表A",對這個表進行表結構修改,然後把表結構變更期間對該表的insert,update,delete重新應用上去,最後兩個表A和A"對調。當然,就算你是線上表結構修改,還是建議你在業務低峰期修改,避免一些問題。淘寶因為發現了pt-online-schema-change的部分bug,維護了自己的一套線上表結構變更的工具,但是原理是完全一致的。

  • 2 # 使用者5961164369340

    1.如果你有歸檔日誌的話,你可以先將資料恢復到上一個備份點,然後使用recover恢復到做命令前的時間點上。呵呵,還是很麻煩的。2.mysql中的表在正常情況下執行delete 指定刪除的記錄實際上只是在索引檔案中做了刪除標記,同時也將資料檔案中對記錄的頭幾個位元組改寫, 但這幾個位元組具體的與入內容不清楚. 透過研究資料檔案, 會發現幾種資料型別儲存的格式. varchar: 在該型別資料開始的位置有一個位元組來指出後面多少個位元組是該欄位的內容, 但是有一個例外就是如果後面的內容與varchar欄位指定的長度完全相等時,就沒有開頭的這個位元組了. text: 這個基本上與varchar型別一樣, 但是在開始是由兩個位元組來指出後面的資料長度的. 而且是高位在前,低位在後. datetime: 為8個位元組,同樣是低位在前,高位在後, 將其轉化為long值後就是yyyymmddhhmmss的格式的資料. 由於要恢復的表中只有這幾種資料型別,所以對其他的型別沒有研究. 知道了資料儲存的格式, 就可以分析資料檔案來讀取記錄了. 需要注意一點就是如果你在刪除資料庫插入了新的資料, 那麼就有可能將原來的資料覆蓋掉. 所以應該在刪除出錯後立即恢復才能恢復出大部分資料.

  • 中秋節和大豐收的關聯?
  • 哈姆雷特的人物關係?