Mysql

我們如何使用批量記錄選項進行轉儲?

  • August 13, 2021

我們有 30 GB 的數據庫。我們要備份這個數據庫。

這裡的問題是我們要備份每 10k 條記錄的批次。

我們如何使用 mysqldump 進行批量記錄備份

這裡有一些你可能會覺得有趣的東西

建議 #1:讓 mysqldump 創建批次

mysqldump已經使用了一個名為–extended-insert的選項。這將對可以在單個 INSERT 命令中載入的一系列記錄進行分組。雖然您不能使用 mysqldump 來控制要一起批處理的行數,但您可以解析 mysqldump。當然,這意味著您必須使用您選擇的語言(Python、Perl、C++ 等)編寫腳本。

對於單個數據庫的 mysqldump 中的任何給定表,您將看到以下範例:

CREATE TABLE
LOCK TABLE
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
...
...
INSERT INTO ...
INSERT INTO ...
UNLOCK TABLES;

您可以按如下方式解析 mysqldump:

  • Step01 : 獲取mysqldump中的下一個表名
  • Step02 : 定位下一個INSERT INTOUNLOCK TABLES;
  • Step03 : 如果遇到UNLOCK TABLES;, 轉到 Step01
  • Step04 : 如果你沒有更多的桌子,你就完成了
  • Step05 : 轉到 Step02

您讀取的每個 INSERT 命令都有一定數量的行。除非您編寫腳本將它們放在您選擇的行數中,否則您無法控制這個數字。我建議不要讓 mysqld 在給定目前配置設置的情況下決定該特定批次的最佳行數(可能是max_allowed_pa​​cket

建議#2:--skip-extended-insert按照自己的方式使用和批處理它們

當您停用–extended-insert時,每個 INSERT 命令將只有一行。您可以使用腳本收集行並收集任意數量的行。

注意事項

  1. 請對您選擇一起批處理的行數有點保守。
  2. 解析 mysqldump 需要更長的時間,因為 mysqldump 會更長。

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