簡體   English   中英

在運行mysqldump --single-transaction --quick的同時寫入大表

[英]Writing to a large table whilst running mysqldump --single-transaction --quick

有人可以在使用帶有--single-transaction--quick選項的mysqldump時澄清用於創建初始快照的鎖定的持續時間嗎?

我在啟用二進制日志記錄的數據庫(InnoDB)中有一個大表(16GB,101M行)。 我在此表上不使用任何FK約束。

為了使BIN LOG文件計數可管理,我需要定期更新mysqldump種子。 我希望能夠在我的服務繼續添加新記錄(約35個/秒)的同時運行mysqldump。

根據MySQL文檔:創建快照時會發生鎖定,您可以繼續寫入表。 那是瞬間還是取決於表的大小? 即需要在解除鎖定之前讀取全部內容。

我擔心在生成快照時,我將無法寫入表。

有人可以說明表轉儲開始時會發生什么嗎? 很高興獲得描述該過程的鏈接。

當使用--single-transaction--master-data ,mysqldump會在開始時執行以下操作。

FLUSH TABLES;
FLUSH TABLES WITH READ LOCK;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */;
SHOW MASTER STATUS;
UNLOCK TABLES;

完成所有這些操作后,便開始實際備份。 鎖定僅是必要的,這樣SHOW MASTER STATUS才能准確返回事務開始處的正確binlog坐標。

備份不應阻止寫入,寫操作也不應阻止備份。 但是,現有事務需要在FLUSH語句完成之前被提交或回滾,並且這些事務可以與已建立的事務進行交互,以使新事務停止等待任何仍打開的舊事務。 但是,這些舊交易完成后,問題將自動解決。 如果您不打算離開長期運行的事務(應該這樣做),那么應該沒有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM