MySQL實例間雙向同步支持的源和目標數據庫
| 源數據庫 | 目標數據庫 |
|---|---|
| RDS for MySQL 自建 MySQL 5.6部分版本/5.7/8.0 |
RDS for MySQL 自建 MySQL 5.6部分版本/5.7/8.0 |
說明自建MySQL數據庫版本為5.6部分版本/5.7/8.0,RDS for MySQL數據庫版本為5.7/8.0,且源數據庫和目標數據庫的大版本需保持一致。
支持同步的SQL操作
- DML
INSERT、UPDATE、DELETE。 - DDL
增量同步的DDL操作僅支持CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整庫遷移或同步,支持CREATE TABLE。
說明
暫不支持 CREATE TABLE 表名 AS SELECT 語句。 僅正向同步(源庫同步至目標庫)支持DDL,反向同步(目標庫同步至源庫)不支持同步DDL,將自動過濾DDL操作。
數據庫賬號及權限
MySQL5.7<->MySQL5.7雙向同步
數據庫 所需權限 參考賦權語句 源庫
正向同步(源庫A同步至目標庫B)A庫所需權限:
對MySQL庫的SELECT權限。
對待遷移庫的SELECT,EVENT,TRIGGER權限。
部分全局權限:
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
PROCESS
如果是整實例遷移,需要對所有數據庫的查詢權限。
反向同步(目標庫B同步至源庫A)A庫所需權限為以下全局權限:
ALTER
ALTER ROUTINE
CREATE
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE USER
CREATE VIEW
DELETE
DROP
EVENT
EXECUTE
INDEX
INSERT
PROCESS
REFERENCES
SELECT
SHOW DATABASES
SHOW VIEW
TRIGGER
UPDATE
正向同步(源庫A同步至目標庫B)A庫參考賦權語句:
GRANT SELECT ON mysql.* TO '遷移賬號'@'%';
GRANT SELECT,EVENT,TRIGGER ON 待遷移的庫.* TO '遷移賬號'@'%';
GRANT REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '遷移賬號'@'%';
反向同步(目標庫B同步至源庫A)A庫參考賦權語句:
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, PROCESS, REFERENCES, SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE ON *.* TO '遷移賬號'@'%';
目標庫 同上 同上
注意雙向同步時,如果待同步對象包含用戶自定義function,則在滿足上述權限的基礎上,源端和目標庫數據庫都需要將log_bin_trust_function_creators設置為1,參考語句如下:
set?global?log_bin_trust_function_creators?=?1;
MySQL8.0<->MySQL8.0雙向同步
數據庫 所需權限 參考賦權語句 源庫
正向同步(源庫A同步至目標庫B)A庫所需權限:
對MySQL庫的SELECT權限。
對待遷移庫的SELECT,?EXECUTE,?EVENT,TRIGGER權限。
部分全局權限:
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
SHOW_ROUTINE
PROCESS
如果是整實例遷移,需要對所有數據庫的查詢權限。
反向同步(目標庫B同步至源庫A)A庫所需權限為以下全局權限:
ALTER
ALTER ROUTINE
REATE
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE USER
CREATE VIEW
DELETE
DROP
EVENT
EXECUTE
INDEX
INSERT
PROCESS
REFERENCES
SELECT
SHOW DATABASES
SHOW VIEW
TRIGGER
UPDATE
正向同步(源庫A同步至目標庫B)A庫參考賦權語句:
GRANT SELECT ON mysql.* TO '遷移賬號'@'%';
GRANT SELECT,?EXECUTE,?EVENT,?TRIGGER ON 待遷移的庫.* TO '遷移賬號'@'%';
GRANT REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, SHOW_ROUTINE,PROCESS ON *.* TO '遷移賬號'@'%';
反向同步(目標庫B同步至源庫A)A庫參考賦權語句:
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, PROCESS, REFERENCES, SELECT, SHOW DATABASES, SHOW VIEW, TRIGGER, UPDATE ON *.* TO '遷移賬號'@'%';
目標庫 同上 同上
注意雙向同步時,如果待同步對象包含用戶自定義function,則在滿足上述權限的基礎上,源端和目標庫數據庫都需要將log_bin_trust_function_creators設置為1,參考語句如下:
set?global?log_bin_trust_function_creators?=?1;
源庫要求
- 在磁盤空間允許的情況下,建議數據庫binlog保存時間越長越好,建議為3天。
- 數據庫的binlog日志必須打開,且binlog日志格式必須為Row格式。
- 數據庫expire_logs_days參數值為0,可能會導致同步失敗。
- 待同步的表需具備主鍵或唯一約束,且字段具有唯一性,否則可能會導致目標數據庫中出現重復數據。
- 必須設置MySQL數據庫的server-id。如果數據庫版本小于或等于MySQL5.6,server-id的取值范圍在2-4294967296之間;如果數據庫版本大于或等于MySQL5.7,server-id的取值范圍在1-4294967296之間。
- 數據庫GTID狀態建議為開啟狀態,數據庫實例沒有開啟GTID的情況下DTS不支持主備HA切換,因為DTS任務會因為位點不續接而中斷導致無法恢復。
- 數據庫必須有足夠的磁盤空間。
- 目標庫關聯RDS數據庫的字符集必須與源數據庫一致。
- 源庫和目標庫的大版本號需保持一致。
目標庫要求
與源庫要求保持一致。
操作須知
- 雙向同步是在全量同步完成后才開始進行,全量同步完成之前,目標庫只能讀不能寫,否則會導致源庫與目標庫數據不一致。待全量同步完成后,目標庫可讀可寫。
- 為了防止雙向回環同步, DTS會在源庫和目標庫的ctyun_dts庫下面分別創建回環標記表,表名:circle_任務id_時間戳,任務運行期間請勿操作此表。
- 雙向同步場景中,反向同步所同步的數據導致的觸發觸發器行為產生的數據,不會在目標數據庫寫入。
沖突檢測
正向和反向都可以選擇如下沖突修復策略,DTS根據用戶配置的沖突修復策略進行沖突的檢測和處理:
- TaskFailed(遇到沖突,任務報錯退出)。
當數據同步遇到沖突時,同步任務直接報錯并退出,同步任務進入失敗狀態,需要您介入修復任務。 - Ignore(遇到沖突,直接使用目標實例中的沖突記錄)。
當數據同步遇到沖突時,直接跳過當前同步語句,繼續往下執行,選擇使用目標庫中的沖突記錄。 - Overwrite(遇到沖突,直接覆蓋目標實例中的沖突記錄)。
當數據同步遇到沖突時,直接覆蓋目標庫中的沖突記錄。
說明
DTS無法完全保證沖突檢測機制能夠完全防止數據的沖突。在使用雙向同步時,您需要在業務層面配合進行相應的改造,保證同一個主鍵或唯一鍵的記錄只在雙向同步的某個節點進行更新。
如果同步任務暫停或重啟后存在延遲,在延遲期間,這些策略均不生效,默認覆蓋目標端數據。
操作步驟
1、購買DTS數據同步實例。
在管理控制臺點擊“創建實例”進入訂購頁面,“實例類型”選擇“數據同步”,“目標庫實例”的“數據庫類型”選擇MySQL,選擇實例,選擇網絡接入類型等,完成其他信息的填寫并完成購買。
注意
目標庫的空余空間建議為同步數據量的三倍(少于三倍需要監控磁盤空間,定期清BINLOG) 。
目標庫使用VPC網絡時,直接使用數據庫主庫ip而不是vip,可在性能上有20%的提升。
2、進入實例配置頁面。
DTS實例購買成功后,進入【數據同步】實例列表頁面,上一步驟購買成功的實例在實例列表中顯示狀態為“待配置”,進入實例配置頁面的操作分兩種情況:
- 當DTS實例的網絡接入類型為“公網EIP”時,請先點擊“綁定彈性IP”按鈕完成公網彈性IP的綁定,然后點擊該實例操作列的“實例配置”按鈕。
- 當DTS實例網絡接入類型為“VPC網絡”時,直接點擊該實例操作列的“實例配置”按鈕。
3、配置源庫及目標庫信息。
進入實例配置第一個步驟的【配置源庫及目標庫信息】頁面,填入源庫與目標庫的相關配置信息,源庫數據庫類型選擇MySQL,完成IP地址端口、數據庫賬號、數據庫密碼等信息的填寫。
完成上述信息的填寫后可以進行數據庫的連接測試,測試數據庫能否正常連接。
4、配置同步對象及高級配置。
源庫和目標庫連通性測試成功后,點下一步按鈕,進入實例配置第二個步驟的【配置同步對象及高級配置】頁面,同步拓撲選擇“雙向同步”。
5、預檢查。
點擊“下一步預檢查”,進入【預檢查】頁面。預檢查會檢查如下列表信息,并給出檢查結果,用戶可以依據檢查結果進行下一步操作。
方向 檢查項 檢查內容 正向預檢查 gtid_mode參數檢查 檢查源庫和目標庫的gtid_mode參數是否為ON。 lower_case_table_names 一致性檢查 檢查源庫和目標庫的lower_case_table_names變量是否一致。 mysql版本檢查 檢查源庫和目標庫的mysql版本是不是符合要求。 scheme字符集檢查 檢查待遷移庫的字符集設置是否在要求范圍內。 sql_mode參數一致性檢查 檢查源庫和目標庫的sql_mode參數是否一致。 雙向回環標記表存在性檢查 檢查源庫和目標庫是否存在雙向回環標記表,否則雙向同步將會進入無限循環同步。 源庫用戶對回環標記數據庫的權限檢查
檢查源庫用于DTS任務的用戶對回環標記表所在的數據庫是否具有相應的權限。 同名對象存在性檢查? 檢查目標庫中是否存在和待遷移庫同名的庫,若存在,檢查該庫下面是否存在同名的表、視圖、函數和存儲過程。 存儲引擎檢查 檢查源庫中待遷移的表的存儲引擎。 待遷移表主鍵檢查 檢查待遷移表是否都存在主鍵。 源庫binlog存在性檢查 查看源庫的binlog文件是否被誤刪除。 源庫binlog影像類型檢查 查看源庫的binlog_row_image參數是不是FULL。 源庫binlog是否開啟檢查 查看源庫的log_bin參數是不是ON。 源庫binlog模式檢查 查看源庫的binlog_format參數是不是ROW。 源庫server_id檢查 查看源庫的server_id是否大于0。 源庫和目標庫字符集一致性檢查 檢查源庫和目標庫的字符集是否一致。 源庫和目標庫時區一致性檢查 檢查源庫和目標庫的時區設置的值是否一致。 源庫用戶權限檢查 檢查源庫用于DTS任務的用戶是否具有相應的權限。 源庫連通性檢查 檢查數據傳輸服務器能否連通源數據庫。 目標庫日志包大小檢查 檢查目標庫的日志包大小是否符合要求。 目標庫用戶權限檢查 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 目標庫連通性檢查 檢查數據傳輸服務器能否連通目標數據庫。 反向預檢查 源庫binlog存在性檢查 查看源庫的binlog文件是否被誤刪除。 源庫binlog影像類型檢查 查看源庫的binlog_row_image參數是不是FULL。 源庫binlog是否開啟檢查 查看源庫的log_bin參數是不是ON。 源庫binlog模式檢查 查看源庫的binlog_format參數是不是ROW。 源庫server_id檢查 查看源庫的server_id是否大于0。 源庫用戶權限檢查 檢查源庫用于DTS任務的用戶是否具有相應的權限。 目標庫用戶權限檢查 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 目標庫用戶對回環標記數據庫的權限檢查 檢查目標庫用于DTS任務的用戶對回環標記表所在的數據庫是否具有相應的權限。
6、確認配置和啟動
預檢查通過后,點擊“下一步”進入【確認配置】頁面,用戶可確認配置的所有信息,確認無誤后,點擊右下角的【啟動任務】,開始遷移任務。