為解決變更數據庫表結構時的鎖表問題,數據管理DMS推出了無鎖結構變更功能,該功能可以較好地規避因鎖表以致于阻塞業務和數據庫原生OnlineDDL帶來的主備延遲問題。本文介紹通過提交無鎖變更工單實現數據庫無鎖結構變更的方法。
前提條件
數據庫類型僅支持RDS MySQL、PolarDB MySQL版、MyBase MySQL或其他來源MySQL。不支持PolarDB分布式版(包含PolarDB-X 1.0和PolarDB-X 2.0)、RDS PostgreSQL等其他非MySQL數據庫使用DMS的無鎖結構變更功能。
說明其他來源是指來自其他云廠商或自建的數據庫。
數據庫引擎為InnoDB、Rocksdb、X-Engine。
數據庫已開啟Binlog日志。
說明PolarDB MySQL版默認未開啟Binlog。開啟Binlog操作,請參見開啟Binlog。
實例的管控模式為穩定變更或安全協同。更多信息,請參見查看管控模式。
實例已開啟無鎖結構變更。具體操作,請參見開啟無鎖結構變更。
注意事項
使用具備讀寫權限的數據庫賬號或高權限數據庫賬號。如果當前數據庫賬號權限不足,您可以:
授權數據庫賬號權限。更多信息,請參見MySQL數據庫賬號權限管理。
說明為數據庫賬號添加ALL PRIVILEGES權限或以下讀寫權限:
ALTER、CREATE、DELETE、DROP、INDEX、INSERT、LOCK TABLES、SELECT、TRIGGER、UPDATE、REPLICATION CLIENT和REPLICATION SLAVE權限。
更換數據庫賬號。更多信息,請參見編輯實例。
確保數據庫磁盤空間充足:由于需要在目標數據庫中新建臨時表用于數據拷貝,請確保磁盤剩余空間為目標表的兩倍以上,磁盤空間不足將導致實例被鎖定。更多信息,請參見數據庫性能。
目標表中有主鍵或唯一鍵:在執行無鎖結構變更時,主鍵或唯一鍵用于全量拷表分段操作及后續增量更新。
說明如果目標表中僅有主鍵或唯一鍵,在執行結構變更期間更新主鍵或唯一鍵,將導致任務執行失敗。
目標表名的長度不能超過56個字符。
操作步驟
如下操作以穩定變更模式的實例進行舉例。若您選擇安全協同模式的實例,還會出現原因類別、執行方式等參數。參數的詳細信息,請參見操作步驟。
- 登錄數據管理DMS 5.0。
在頂部菜單欄中,選擇 。
說明若您使用的是極簡模式的控制臺,請單擊控制臺左上角的圖標,選擇
。配置無鎖變更工單。
參數名
說明
數據庫
搜索并選擇目標數據庫,支持選擇多個目標數據庫。
有權限:只能搜索并選擇有變更權限的數據庫。
全部:可以搜索并選擇所有的數據庫(除開啟元數據訪問控制的數據庫)。
說明如果您沒有目標數據庫的變更權限,請在頂部菜單欄中選擇
,單擊 ,在權限申請工單頁面申請您需要的權限。
變更SQL
輸入DDL(Data Definition Language),例如
ALTER TABLE
、OPTIMIZE
。說明如果您輸入的是DML(Data Manipulation Language),則您進行的是無鎖數據變更任務。更多信息,請參見DML無鎖變更。
單擊提交申請。
系統將自動進行SQL預檢查。如果預檢查失敗,您可以根據失敗原因,單擊修改SQL,修改SQL后重試。
等待審批通過后,在工單詳情頁的執行區域,單擊執行變更。
配置任務執行參數。
配置項
說明
執行策略
立即執行:系統默認,單擊確認執行后立即執行工單任務。
定時執行:選擇任務開始執行時間。單擊確認執行后,在指定的時間執行該任務。
指定結束時間
開啟:選擇任務結束時間。如果任務在指定結束時間之前沒有執行完畢,則系統將不再繼續執行未完成的SQL任務,防止高峰期執行任務,影響業務運作。
關閉:系統默認。
單擊確定執行。
說明已暫停的任務,重啟后,會重新開始執行任務。
您可以在執行區域,查看任務執行狀態、任務設置、詳情和調度日志。
您還可以在查看無鎖變更進度。
中,查看無鎖結構變更任務進度。具體操作,請參見
實例開啟無鎖結構變更后,除本方案外,您在該實例中執行以下類型的結構變更工單或任務,都會優先采用無鎖結構變更的方式。