Mysql

遷移後 MySQL 數據庫驗證

  • April 7, 2022

我們正在從 5.5 企業版 mysql 遷移到 8.0 版 mysql 企業版。我們正在逐個版本遷移,例如從 5.5 遷移到 5.6,然後從 5.6 遷移到 5.7,最後從 5.7 遷移到 8.0,也從 rhel5 遷移作業系統。4 到 8.4 沒關係,但客戶希望逐個驗證數據。像行計數和校驗和這樣的普通數據驗證對於客戶端來說是不夠的,因為數據是敏感的。建議任何好的工具、腳本或查詢來檢查值對值的數據驗證

我會使用pt-table-sync

這是 Percona 的免費工具。它是一個命令行工具,用 Perl 實現。您可以通過提供描述與原始數據庫實例和新數據庫實例的連接的參數來使用它。它逐行比較(實際上是一次非常小的行組),然後生成一個差異,以便您可以使新實例具有與原始實例相同的數據。

您可以使用該工具執行更改以同步數據,或者您可以選擇讓它只報告差異,而不做任何更改數據。閱讀我連結到的文件以獲取更多資訊。

(這解決了關於 DATETIME 和 TIMESTAMP 格式更改的評論。)

有(基於文件)改變內部格式的兩種方式:

  • 如果您轉儲(例如,通過mysqldump)數據(來自舊版本)並將其載入到具有較新版本的新伺服器上,則格式更改會更改,而不會出現任何提示。這是因為從舊的內部格式轉換為字元串,然後再轉換為新的內部格式。
  • 如果您“就地升級”,那麼升級過程會花費時間來重建每個具有日期時間或時間戳的表。(可能有一些延遲格式更改的選項,但我不熟悉細節。)

底線是格式更改是自動的,但可能會增加升級時間。

磁碟上 InnoDB 表表示的內部結構使得基本上不可能做任何類似於逐字節文件比較的事情。(即使內部數據格式沒有變化,此語句也有效。)

但是,您可以將所有 mysql 文件從一個磁碟複製到另一個磁碟,然後逐字節驗證文件是否完好無損。這是創建新副本的簡單方法。但是,一旦 mysqld 接觸到一個表,簡單的字節比較就會失效。

引用自:https://dba.stackexchange.com/questions/310327