資料遷移的預檢測及修復方案

sunlovesi發表於2016-07-24

資料傳輸(Data
Transmission)是阿里雲提供的一種支援以資料庫為核心的結構化儲存產品之間的資料傳輸服務,它提供了資料遷移、資料訂閱及實時同步等多種資料傳輸功能。使用資料傳輸服務實現資料一鍵上雲的同時,您還可以輕鬆得構建安全、可擴充套件、高可用的資料架構。資料傳輸服務支援常見資料庫型別,例如Oracle、MySQL、SQL Server、Postgres Plus
Advanced Server的資料遷移,同時,它支援雲資料庫RDS
MySQL的增量資料訂閱及雲資料庫RDS例項間的實時同步。

本文將簡單介紹雲資料庫RDS在資料遷移啟動之間的預檢查階段檢查的內容,失敗原因及具體修復方法。

源庫連線性檢查

檢測資料傳輸伺服器是否能夠連通要遷移的源資料庫。資料傳輸服務通過JDBC協議建立到源資料庫的連線,當建立連線失敗時,這個檢查項即失敗。

當源庫連線性預檢查失敗時,可能是由於如下表中幾種原因:

1.1   1. 建立遷移任務時,提供的賬號或密碼不正確

檢測方法:在任何一臺能夠網路能夠跟源資料庫互通的伺服器上,使用建立遷移任務使用的賬號/密碼,通過客戶端軟體連線源資料庫,確認是否能夠正常連線。如果連線報錯,且報錯資訊中含有Access deny,那麼說明賬號或密碼有誤。

修復方法:在資料傳輸服務控制檯修改遷移任務,將賬號密碼修改成正確的配置後重新預檢查。 

2. 源庫遷移賬號限制了來源IP

 檢測方法

(1) 在一臺網路能夠跟源資料庫連通的伺服器上,使用建立遷移任務使用的賬號/密碼, 通過客戶端軟體連線源資料庫,能夠正常連線。此時說明源資料庫限制了來源IP,只有允許的伺服器可以連線,而資料傳輸伺服器的IP不在授權列表,所以不能正常連線。
(2)如果源資料庫為MySQL資料庫,那麼直接使用mysql客戶端連線源資料庫,執行select host from
mysql.user where user=`遷移賬號`,password=‘遷移賬號密碼’,如果查詢結果不為”%”,那麼說明資料傳輸伺服器IP不在授權IP列表中,所以不能正常連線
(3) 如果是SQL Server,那麼檢查SQL Server安裝伺服器上是否設定了防火牆,或者檢查源資料庫中有endpoint或trigger限制了訪問來源IP
(4) 如果是Oracle,那麼檢查源資料庫的挽留過配置檔案sqlnet.ora,確認配置項TCP.VALIDNODE_CHECKING是否為yes,如果為yes,說明源資料庫限制了訪問來源IP

修復方法

(1) 如果源資料庫為MySQL,那麼在源資料庫中執行grant all on . to “遷移賬號”@”%” identified by “遷移密碼”給遷移賬號重新授權。這個命令中的遷移賬號用真實的遷移賬號替換,遷移密碼用真實的遷移密碼替換。授權後重新進行預檢查
(2) 如果源資料庫為SQLServer,那麼需要先關閉掉防火牆或禁用掉trigger後,重新進行預檢查
(3) 如果源資料庫為Oracle,那麼先修改TCP.VALIDNODE_CHECKING=no並重啟監聽後,重新進行預檢查

 

       3. 源資料庫安裝伺服器設定了防火牆

檢測方法: 如果源資料庫安裝伺服器為Linux,那麼在shell中執行 iptables -L,檢查伺服器是否配置了防火牆。如果安裝伺服器為window,那麼在控制皮膚中查詢到Windows防火牆,檢視是否配置了防火牆

修復方法: 先將防火牆關閉後,重新進行預檢查

目標庫連線性檢查

檢測資料傳輸伺服器是否能夠連通要遷移的目標資料庫。資料傳輸服務通過JDBC協議建立到目標資料庫的連線,當建立連線失敗時,這個檢查項即失敗。

當目標庫連線性預檢查失敗時,可能是由於如下的兩種原因:

1. 建立遷移任務時,提供的賬號或密碼不正確

檢測方法:在任何一臺能夠網路能夠跟目標資料庫互通的伺服器上,使用建立遷移任務使用的賬號/密碼,通過客戶端軟體連線源資料庫,確認是否能夠正常連線。如果連線報錯,且報錯資訊中含有Access deny,那麼說明賬號或密碼有誤

修復方法:在資料傳輸服務控制檯修改遷移任務,將賬號密碼修改成正確的配置後重新預檢查

2. 資料傳輸伺服器與目標資料庫網路不通

如果不是遷移賬號密碼不正確的話,那麼可能是由於資料傳輸伺服器跟目標資料庫網路不連通,當處於這種情況時,請聯絡資料傳輸服務值班同學協助解決。 

schema存在性檢查 

主要檢查待遷移的資料庫在目標RDS例項中是否存在。如果不存在,那麼資料傳輸服務會自動建立。但是對於如下幾種情況,自動建立資料庫會失敗,所以直接報預檢查失敗。

(1) 資料庫名中含有小寫字母、數字、下劃線、中劃線的其他特殊字元

當遇到這種情況時,預檢查的失敗原因為:遷移的資料庫遷移庫名的名稱不符合rds規範
修復方法為:到RDS控制檯的資料庫管理頁面中,建立滿足RDS規範的資料庫,將新建庫的讀寫許可權賦給遷移賬號。然後使用資料傳輸服務提供的庫名對映功能將要遷移的資料庫對映至新建立的資料庫後,然後重新進行預檢查

(2) 資料庫的字符集不為utf8、gbk、latin1、utf8mb4中的一種

當遇到這種情況時,預檢查的失敗原因為:遷移的資料庫遷移庫名的字符集不滿足rds的要求
修復方法為:到RDS控制檯的資料庫管理頁面中,建立滿足rds規範的資料庫,然後將新建庫的讀寫許可權賦給遷移賬號。如果新建立的庫名與待遷移的庫名不同,那麼使用資料傳輸服務提供的庫名對映功能將要遷移的資料庫對映至新建立的資料庫後,重新進行預檢查

(3) 目標庫遷移賬號無遷移庫的讀寫許可權

當遇到這種情況時,預檢查的失敗原因為:該使用者沒有許可權使用庫遷移庫名 
修復方法為:先到RDS控制檯的資料庫管理頁面中賬號管理頁面,修改許可權,將遷移庫的讀寫許可權授予遷移賬號後,重新進行預檢查

同名物件存在性檢查 

這個檢查項主要檢查目標庫是否已經存在跟待遷移物件同步的物件。當這個檢查項失敗時,說明目標RDS例項中已經存在了跟待遷移的物件一樣名字的物件,這會導致遷移失敗。

當這個檢查項失敗時,失敗原因為:目標庫存在跟待遷移物件同名的結構物件:遷移庫名。
當這個檢查項失敗時,修復方式為:
(1)使用資料傳輸服務提供的庫表對映功能,將待遷移物件遷移到目標庫中的另外一個物件名的物件中
(2)刪除或重新命名目標庫中跟遷移物件同名的物件
(3)修改遷移任務配置,將同名物件從遷移物件中刪除掉,暫時不遷移這些同名物件

約束完整性檢查 

這個檢查項主要檢查遷移的物件列表中,有外來鍵依賴關係的父子表是否都被遷移,防止破壞外來鍵約束完整性。
當這個檢查項失敗時,失敗原因為:待遷移表子表名字依賴的父表父表名字沒有遷移

對於這種錯誤的修復方式為:
(1) 不進行約束完整性檢查失敗的子表的遷移,修改遷移任務配置,將這些約束完整性檢查失敗的子表從遷移列表中刪除後,重新進行預檢查
(2) 進行約束完整性檢查失敗的子表對應的父表的遷移,修改遷移任務配置,將這些約束完整性檢查失敗的子表對應的父表新增到遷移列表中後,重新進行預檢查
(3) 刪除約束完整性檢查失敗的子表的外來鍵依賴,修改源資料庫將這些子表的外來鍵依賴刪除掉,重新進行預檢查 

源庫server-id檢查 

這個配置項只有當進行MySQL->MySQL增量遷移時,才會進行檢查。這個檢查項主要檢查源資料庫的server-id是否設定為大於1的整數。
當檢查失敗時,只要在源資料庫執行set global server_id=某個不為1的數,然後重新進行預檢查。 

源庫binlog是否開啟檢查

這個配置項只有當進行MySQL->MySQL增量遷移時,才會進行檢查。這個檢查項主要檢查源資料庫是否開啟binlog日誌。如果檢查項失敗,那麼說明源資料庫沒有開啟binlog。
如果binlog沒有開啟,那麼需要修改源資料庫配置檔案中的 log_bin,配置完成後重啟源資料庫後,重新進行預檢查。

源庫binlog模式檢查 

這個配置項只有當進行MySQL->MySQL增量遷移時,才會檢查。這個檢查項主要檢查源資料庫的binlog模式是否為ROW。如果檢查失敗,那麼說明源資料庫的binlog格式不為ROW。
如果檢查項失敗,那麼在源資料庫中執行“set global binlog_format=ROW”後重新進行預檢查。建議修改後重啟MySQL,否則連線中的session可能以非ROW模式繼續寫入,這會導致資料丟失。

源庫binlog存在性檢查 

這個配置項只有當進行MySQL->MySQL增量遷移時,才會檢查。這個檢查項主要檢查源資料庫存在的binlog檔案是否被刪除。如果檢查失敗,那麼說明源資料庫的binlog檔案不完整。
如果檢查失敗,那麼在源資料庫執行“PURGE BINARY LOGS TO 未被刪除的第一個binlog檔名 ”後,重新進行預檢查。 具體purge的檔名參考預檢查的修復方法。

Mysql源庫binlog_row_image是否為FULL 

這個配置項只有當進行進行MySQL->MySQL增量遷移時,才會檢查。這個檢查項主要檢查源資料庫的binlog_row_image是否為full,即是否記錄全映象。如果檢查失敗,那麼說明源資料庫的binlog未記錄全映象。
如果檢查失敗,那麼在源庫執行”set global
binlog_row_image=FULL”命令後,重新進行預檢查

federated型別的表的存在性檢查

這個配置項只有當進行進行MySQL->MySQL增量遷移時,才會檢查。這個檢查項主要檢查員資料庫中是否存在增量遷移不支援的儲存引擎。目前增量遷移不支援federated, mrg_myisam兩種儲存引擎。

當檢查失敗,且失敗原因為:源資料庫中存在引擎為FEDERATED的表時,說明源資料庫中要遷移的部分表的儲存引擎為federated,所以導致檢查失敗。

當檢查失敗,失敗原因為:源數 據庫中存在引擎為MRG_MYISAM的表時,說明源資料庫中要遷移的部分表的儲存引擎為mrg_myisam,所以導致檢查失敗。

當檢查失敗時,對於這些儲存引擎為federated或mrg_myisam的表,修改遷移任務,將這些表從遷移列表刪除掉。然後單獨建立一個遷移任務,對這些表進行結構遷移+全量資料遷移。


參考

預檢查失敗修復

資料傳輸

 

 


相關文章