支持的源和目標數據庫
支持(chi)的源和目標數據庫如(ru)下(xia)表:
| 源數據庫 | 目標數據庫 |
|---|---|
| RDS for PostgreSQL 自建PostgreSQL 9.4/9.5/9.6/10/11/12/13/14/15/16 | RDS for MySQL |
支持的遷移對象及SQL
遷移對象
當前DTS僅支(zhi)持(chi)表、部分(fen)索引、約(yue)束、comment遷(qian)移。
不(bu)支持pg_toast,pg_temp_1,pg_toast_temp_1,pg_catalog,information_schem等(deng)系統模式的(de)遷移。
每次至多(duo)(duo)同步(bu)一個(ge)(ge)庫(database),同步(bu)多(duo)(duo)個(ge)(ge)庫需(xu)要創建多(duo)(duo)個(ge)(ge)DTS任務。
支持的數據類型映射
PostgreSQL-MySQL支持的轉換類(lei)型參(can)見下(xia)表:
數據類型 | PostgreSQL | MySQL | 備注 |
|---|---|---|---|
數值類型 | bit、bit varying | bit (n=1) | |
| char (n<255),varchar(n<255) | |||
| longtext | |||
| money | decimal(21,4) | ||
| numeric | numeric | 不支持特殊值Infinity、-Infinity、NaN | |
float | float | 不支持特殊值Infinity、-Infinity、NaN | |
| boolean | boolean | ||
| bigint,bigserial,int8,serial8 | bigint | ||
| int,integer,serial,int4,serial4 | int | ||
| smallint,int2,serial2 | smallint | ||
| real,float4 | float | ||
double precision,float8 | double | ||
decimal,dec | decimal,dec | mysql中decimal最大精度為65,不能超過此精度 | |
字符類型 | varchar(n),character varying(n) | varchar (n) | |
| bpchar(n),character(n),char(n) | char(n) | ||
| bpchar,array,text,xml,varchar | longtext | ||
| cidr | varchar(45) | ||
| inet | varchar(45) | ||
| macaddr | varchar(17) | ||
| macaddr8 | varchar(23) | ||
| json,jsonb | json | ||
| tsvector,tsquery,xml | longtext | ||
| uuid | varchar(36) | ||
| enum | varchar | ||
| bytea | longblob | ||
| 時間類型 | date(4713 BC to 5874897 AD) | date('1000-01-01' to '9999-12-31') | 不支持超過mysql date范圍的數據,精度最大為6 |
| time(n) | time(n) | ||
| timestamp with out timezone | datetime ( '1000-01-01 00:00:00' to '9999-12-31 23:59:59') | 不支持超過mysql datetime范圍的數據 | |
| timestamp with time zone | timestamp | 超出MySQL時間戳范圍的數據不支持(1970-01-01 00:00:00 - 2038-01-19 03:14:07) |
注意
不支(zhi)持地理類型數據遷移。
增量遷移支持的SQL操作
DML
INSERT、UPDATE、DELETE
DDL
增(zeng)量遷移(yi)(yi)的DDL操作僅(jin)支(zhi)持(chi)CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整庫(ku)遷移(yi)(yi),支(zhi)持(chi)CREATE TABLE。
說明
暫不(bu)支持(chi)CREATE TABLE AS SELECT 語句。
不(bu)支持臨(lin)時表的遷(qian)(qian)移(yi)(yi),表的索(suo)引(yin)、約束(shu)會(hui)一起遷(qian)(qian)移(yi)(yi)。
數據庫賬號權限要求
| 數據庫 | 接入類型 | 所需權限 | 參考賦權語句 |
|---|---|---|---|
源庫 | 云實例 | 高權限賬號 | 云實例請參考創建賬號 |
自建實例 |
|
| |
| 目標庫 | 云實例 |
| GRANT SELECT ON mysql.* TO '遷移賬號'@'%'; GRANT ALTER, CREATE, DELETE ,DROP, INDEX, INSERT, REFERENCES, SELECT, UPDATE ON `待遷(qian)移庫(ku)`.* TO '遷(qian)移賬(zhang)號'@'%'; |
準備工作
源庫為PostgreSQL自建庫的情況
登錄自建PostgreSQL所屬(shu)的(de)服務器(qi)。
修(xiu)改配置文(wen)件postgresql.conf,將配置文(wen)件中的wal_level設(she)置為logical。如下圖:

將DTS的(de)IP地(di)址加入至自(zi)建PostgreSQL的(de)配(pei)置文件pg_hba.conf中。如(ru)下(xia)圖:

如果您已將(jiang)信任(ren)地(di)址配(pei)置為0.0.0.0/0,可跳過本步驟。
邏(luo)輯(ji)解碼(ma)插件目(mu)前支(zhi)持(chi)decoderbufs和pgoutput;如果任(ren)務包含增(zeng)量遷移(yi)且邏(luo)輯(ji)解碼(ma)器選(xuan)擇使用Decoderbufs時,需安(an)(an)裝PostgreSQL的(de)邏(luo)輯(ji)解碼(ma)器輸(shu)出(chu)插件Decoderbufs,建議(yi)安(an)(an)裝v2.1.1.Final以上版本,低版本可(ke)能會導致PostgreSQL數據庫出(chu)現coredump,詳細的(de)步驟(zou)可(ke)參考如下內容(rong)或(huo)PostgreSQL官網(wang)文檔。
請自行(xing)前往github倉庫獲取Decoderbufs插件。
進行插件的配置。
首先,進行插件的編譯。
export PATH=/usr/lib/postgresql/9.6/bin:$PATH make make install其(qi)次,在postgresql.conf中配置邏輯復制。
# MODULES shared_preload_libraries = 'decoderbufs' # REPLICATION wal_level = logical # minimal, archive, hot_standby, or logical (change requires restart) max_wal_senders = 8 # max number of walsender processes (change requires restart) wal_keep_segments = 4 # in logfile segments, 16MB each; 0 disables #wal_sender_timeout = 60s # in milliseconds; 0 disables max_replication_slots = 4 # max number of replication slots (change requires restart)然后,重啟PostgreSQL。
最后,驗證配置(zhi)是否生效(xiao)。
#創建邏輯復制,使用邏輯復制插件decoderbufs select * from pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs'); #對相關表進行數據操作 #使用decoderbufs調試模式 SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); #使用decoderbufs獲取wal變更,更新wal位置 SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); #查看邏輯復制的wal位置 SELECT * FROM pg_replication_slots WHERE slot_type = 'logical'; #刪除邏輯復制 select pg_drop_replication_slot("decoderbufs_demo");
源庫為天翼云及其他云PostgreSQL的情況
源庫為天翼云(yun)及(ji)其(qi)他云(yun)PostgreSQL、任務包含增(zeng)量(liang)遷移(yi),且邏輯(ji)解碼器選擇(ze)為Decoderbufs時,源庫需開啟邏輯(ji)解碼器輸出插件Decoderbufs。
天翼云在(zai)開(kai)(kai)通PostgreSQL實例時已預置(zhi)開(kai)(kai)啟Decoderbufs插件,當源庫(ku)為天翼云PostgreSQL時,請參照天翼云關系數據庫PostgreSQL版-管理插件相關指引(yin)查(cha)看確(que)認(ren)Decoderbufs插件的開(kai)啟(qi)情況,已開(kai)啟(qi)則(ze)無需進(jin)行操作,未開(kai)啟(qi)則(ze)參照指引(yin)進(jin)行Decoderbufs插件的安(an)裝。
當源庫(ku)為其他云(yun)PostgreSQL時,需要查看源庫(ku)對(dui)應(ying)版本(ben)是否支持(chi)并已開啟(qi)(qi)Decoderbufs插件。如(ru)源庫(ku)版本(ben)不支持(chi)Decoderbufs插件則無法進(jin)行其他云(yun)PostgreSQL到天翼云(yun)PostgreSQL的增量遷(qian)移(yi);如(ru)源庫(ku)版本(ben)支持(chi)Decoderbufs插件但(dan)未開啟(qi)(qi)則按(an)照文檔啟(qi)(qi)用(yong)插件;如(ru)已開啟(qi)(qi)則無需進(jin)行操作。具體請參考其他云(yun)PostgreSQL的相(xiang)關指引(yin),例如(ru):
華為(wei)云的相關指引。
阿(a)里云的相關(guan)指引。
操作需知
DTS遷移(yi)過程一(yi)般(ban)包含四個階(jie)(jie)(jie)(jie)段(duan)(duan):預檢查階(jie)(jie)(jie)(jie)段(duan)(duan)、結(jie)構遷移(yi)階(jie)(jie)(jie)(jie)段(duan)(duan)、全量(liang)階(jie)(jie)(jie)(jie)段(duan)(duan)、增量(liang)階(jie)(jie)(jie)(jie)段(duan)(duan)。為了確保數據遷移(yi)各個階(jie)(jie)(jie)(jie)段(duan)(duan)的平順,在創(chuang)建(jian)遷移(yi)任務前,請務必(bi)閱(yue)讀(du)以下使(shi)用(yong)須知。
任務開始前
源庫要求
源(yuan)數據庫的分區表觸發器不可以設置為disable。
全(quan)量同(tong)步(bu)支持源庫備(bei)(bei)機狀(zhuang)態,但需要設置hot_standby_feedback為(wei)on;增量同(tong)步(bu)不支持源庫備(bei)(bei)機狀(zhuang)態。
同(tong)步(bu)對象依賴和關聯(lian)的(de)對象也須(xu)一起同(tong)步(bu),否則可(ke)能(neng)導致任務(wu)失敗。
若要做增量(liang)同步,源數據庫的(de)“pg_hba.conf” 文件中包含如(ru)下的(de)配(pei)置:
host replication all 0.0.0.0/0 md5源(yuan)數據庫參數wal_level必須(xu)配置為logical;
如果配置任(ren)務時邏輯解碼指(zhi)定(ding)為Decoderbufs,源數據庫需提前安(an)裝Decoderbufs插件;
源數據庫中無(wu)主鍵表的replica identity屬(shu)性必(bi)須(xu)為full;
源(yuan)數(shu)據庫的max_replication_slots參(can)數(shu)值必須(xu)大于當前已使用(yong)的復制(zhi)槽數(shu)量;
源數據庫(ku)的(de)max_wal_senders參數值必(bi)須(xu)等于或大于max_replication_slots參數值;
源(yuan)數據庫中表(biao)的主鍵(jian)列toast屬性為(wei)main、external、extended時(shi),其(qi)replica identity屬性必須為(wei)full。
同(tong)步(bu)對(dui)象依賴和關聯的對(dui)象也須(xu)一起(qi)同(tong)步(bu),否則可(ke)能導致任務失敗。
目標庫要求
目標庫若已(yi)(yi)存在(zai)行(xing)(xing)數(shu)據(ju),DTS在(zai)增量遷移過程中源庫相同主鍵(jian)的數(shu)據(ju)將覆蓋目標庫已(yi)(yi)存在(zai)的數(shu)據(ju),因此在(zai)遷移前(qian)需要(yao)用(yong)戶自(zi)行(xing)(xing)判斷(duan)數(shu)據(ju)是否需要(yao)清除,建議用(yong)戶在(zai)遷移前(qian)自(zi)行(xing)(xing)清空目標庫。
目(mu)標庫關聯RDS實(shi)例(li)必須有足夠的(de)磁(ci)盤空間,建議至少為待(dai)遷移(yi)數據量的(de)2.5倍。
結構、全量過程中
請(qing)勿修改(gai)源庫和目(mu)標(biao)庫的端口號,請(qing)勿修改(gai)、刪除源庫和目(mu)標(biao)庫連接用(yong)戶的密碼、權限,否則(ze)可能(neng)導致任務(wu)失(shi)敗。
請勿在源庫執行任(ren)何DDL,否(fou)則可能(neng)導(dao)致數(shu)據不一致或任(ren)務失(shi)敗(bai)。
請勿在目標庫做寫(xie)入操作,否則可(ke)能導致數據(ju)不一致。
增量過程中
請(qing)勿(wu)修改(gai)源(yuan)庫和目(mu)標(biao)庫的端口號,請(qing)勿(wu)修改(gai)、刪除源(yuan)庫和目(mu)標(biao)庫連(lian)接用(yong)戶的密碼、權限,否則可能導(dao)致(zhi)任務失敗。
請勿(wu)修改源數據庫表的主鍵(jian)或者(zhe)唯一鍵(jian)(主鍵(jian)不存在時),否則可能導致(zhi)增(zeng)量(liang)數據不一致(zhi)或任務失敗。
請勿修改源數據庫中表的(de)replica identity屬性(xing),否(fou)則可能導致增量數據不一致或任務(wu)失敗。
請勿在目(mu)標庫做寫入(ru)操作,否(fou)則可能(neng)導致數據(ju)不一致。
庫級同步時,源(yuan)庫新增無主鍵表時,請務必同時將該無主鍵表的replica identity屬性(xing)設置(zhi)為full,然后再寫入數(shu)據,否則可能導致(zhi)數(shu)據不一致(zhi)或任務失(shi)敗。
庫(ku)級同步時(shi)(shi),源庫(ku)新增主鍵(jian)(jian)表時(shi)(shi),如果主鍵(jian)(jian)列toast屬性為(wei)(wei)main、external、extended時(shi)(shi),請務(wu)必同時(shi)(shi)將該表的(de)replica identity屬性設置為(wei)(wei)full,然后再寫入(ru)數據,否(fou)則可(ke)能導致數據不一致或任務(wu)失(shi)敗(bai)。
若選擇同(tong)步DDL,須注意源庫執(zhi)行DDL時,確保在目(mu)標(biao)庫上(shang)是兼容的。
操作步驟
1、購買DTS實(shi)例。
在管理控制(zhi)臺點擊“創建實(shi)例”進(jin)入訂購頁面(mian),“實(shi)例類型”選擇“數據遷移”,”源數據庫(ku)”選擇Postgresql,“目(mu)標數據庫(ku)”選擇MySQL,完(wan)成其他信息(xi)的(de)填寫(xie)并(bing)完(wan)成購買。
2、進入實例配置頁面。
DTS實例購(gou)買成功(gong)后,進入【數據遷移】實例列(lie)表頁面,上一步驟購(gou)買成功(gong)的(de)實例在實例列(lie)表中顯示狀(zhuang)態為“待配置”,進入實例配置頁面的(de)操作(zuo)。
3、配置源庫及目標庫信息
進入(ru)(ru)實例配置第一個步驟(zou)的【配置源(yuan)庫(ku)(ku)(ku)及目標庫(ku)(ku)(ku)信(xin)(xin)息】頁(ye)面,填入(ru)(ru)源(yuan)庫(ku)(ku)(ku)與目標庫(ku)(ku)(ku)的相關配置信(xin)(xin)息,包括數據(ju)庫(ku)(ku)(ku)類型、IP地址(zhi)端口、數據(ju)庫(ku)(ku)(ku)賬(zhang)號、數據(ju)庫(ku)(ku)(ku)密(mi)碼(ma)等信(xin)(xin)息。
完(wan)成上(shang)述信息的填(tian)寫后,點(dian)擊源數(shu)(shu)據(ju)(ju)(ju)庫和目標(biao)數(shu)(shu)據(ju)(ju)(ju)庫的“測試(shi)連(lian)接(jie)”按鈕(niu)進行數(shu)(shu)據(ju)(ju)(ju)庫連(lian)接(jie)測試(shi),檢(jian)查數(shu)(shu)據(ju)(ju)(ju)庫能否正常連(lian)接(jie)。
4、配(pei)置(zhi)遷(qian)移對象及高級配(pei)置(zhi)
源(yuan)庫(ku)和目標庫(ku)連通性測試成(cheng)功(gong)后,點下一步(bu)按鈕(niu),進入實例配置第二個步(bu)驟的【配置遷移對(dui)象及高級配置】頁面,在“源(yuan)庫(ku)對(dui)象”中(zhong)選擇(ze)要遷移的源(yuan)庫(ku)對(dui)象,包含:庫(ku)、TABLE,選中(zhong)后點擊“>”按鈕(niu),將(jiang)待遷移對(dui)象移動到“已選擇(ze)對(dui)象”中(zhong)。
5、預檢查
點擊“下一步(bu)預(yu)檢(jian)(jian)查”,進(jin)入(ru)【預(yu)檢(jian)(jian)查】頁面。預(yu)檢(jian)(jian)查會檢(jian)(jian)查如下列(lie)表(biao)信息,并給出檢(jian)(jian)查結(jie)(jie)果,用戶可以依據檢(jian)(jian)查結(jie)(jie)果進(jin)行下一步(bu)操(cao)作。
| 檢查項 | 檢查內容 |
|---|---|
| 源庫(ku)連通性檢(jian)查(cha) | 檢查數據傳輸服務(wu)器能否連通源數據庫。 |
| 待遷移表(biao)是否存在(zai)主鍵檢查 | 勾(gou)選(xuan)增(zeng)量遷(qian)移時,檢(jian)查待(dai)遷(qian)移表中(zhong)是否存在(zai)無主鍵(jian)的表。 |
| 源(yuan)數據(ju)庫的模式名表名是否(fou)合法(fa) | 檢查(cha)源數據庫的(de)模式名(ming)表名(ming)是否合法,名(ming)稱不可以包含+"%'<>,.字符。 |
| 源庫參數wal_level是(shi)否為(wei)logical | 勾選增量(liang)遷移時(shi),檢(jian)查源庫wal_level參數值是否為logical。 |
| 目標庫連通性檢(jian)查 | 檢查數(shu)據(ju)傳(chuan)輸服(fu)務器能否連通目標數(shu)據(ju)庫(ku)。 |
| 源庫參數max_replication_slots校驗 | 勾選增量(liang)遷移時(shi),檢查源庫max_replication_slots參數值是否大于(yu)當前已使用的復制槽數量(liang)。 |
| 源庫參數max_wal_senders校驗 | 勾選(xuan)增量(liang)遷(qian)移時(shi),檢查源(yuan)庫max_wal_senders參(can)數(shu)值(zhi)是(shi)否大于當前已使用的復(fu)制槽數(shu)量(liang)。 |
| 源(yuan)庫用戶權限檢查(cha) | 檢查源(yuan)庫用(yong)于DTS任務的(de)(de)用(yong)戶是否(fou)具有相應的(de)(de)權限。 |
| 源庫主備狀態檢(jian)查(cha) | 勾選增量(liang)遷移時,檢查源(yuan)庫是否(fou)為集群中(zhong)的主庫。 |
| 待同(tong)步表REPLICA_IDENTITY模式檢查 | 檢查待(dai)遷移表REPLICA_IDENTITY值是(shi)否都(dou)為FULL |
| 檢查源庫(ku)(ku)和目標庫(ku)(ku)字符(fu)集一致性檢查 | 檢查源庫和目標庫字符集(ji)是否一致(zhi) |
6、確認配置并啟動
預檢(jian)查通過(guo)后,點(dian)擊“下一步(bu)”進入(ru)【確認配置】頁面(mian),用戶可確認配置的所(suo)有信息,確認無誤后,點(dian)擊右(you)下角的【啟動任務】,開始遷移(yi)任務。

