新特性解讀 | 備份鎖

作者:姚遠
專注於 Oracle、MySQL 數據庫多年,Oracle 10G 和 12C OCM,MySQL 5.6 ,5.7,8.0 OCP。現在鼎甲科技任顧問,爲同事和客戶提高數據庫培訓和技術支持服務。
本文來源:原創投稿
*愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。


MySQL8.x 中新增了一個輕量級的備份鎖,它允許在 online 備份的時候進行 DML 操作,同時可防止快照不一致。這個鎖禁止的操作很少,它禁止的操作包括:

  • 文件的創建、刪除、改名
  • 賬戶的管理
  • REPAIR TABLE
  • TRUNCATE TABLE
  • OPTIMIZE TABLE

備份鎖由 lock instance for backupunlock instance 語法組成。使用這些語句需要 BACKUP_ADMIN 權限。

從圖裏面看長查詢對 FTWRL(flush tables with read lock) 是有影響的,整個系統會 hung 住,此時其它的數據庫查詢也不能用,包括 use database。

可以看到大家都在等這個鎖釋放。而 lock instance for backup 則沒有這個問題。Oracle 自己的備份產品(MySQL Enterprise Backup 8)就用這個鎖,Percona 的 Xtrabackup 在 8 的版本也是用這個鎖。

順便提一下,Percona 自己的 MySQL 也有一種輕量級的備份鎖「LOCK TABLES FOR BACKUP」也是一種比 FTWRL 要輕量級的鎖。它不會刷新表,即存儲引擎不會強制關閉表,並且表不會從表緩存中排出。因此,LOCK TABLES FOR BACKUP 僅等待衝突的語句完成,它不會等待 SELECT 或更新 InnoDB 表來完成。

參考: https://dev.mysql.com/doc/refman/8.0/en/lock-instance-for-backup.html https://www.percona.com/doc/percona-server/8.0/management/backup_locks.html