閱讀561 返回首頁    go 阿裏雲


預檢查失敗修複__數據遷移_用戶指南_數據傳輸-阿裏雲

本小節簡單介紹數據遷移啟動之間的預檢查階段檢查的內容,失敗原因及具體的修複方法。

源庫連接性檢查

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

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

  • 創建遷移任務時,提供的賬號或密碼不正確

    檢測方法:在任何一台能夠網絡能夠跟源數據庫互通的服務器上,使用創建遷移任務使用的賬號/密碼,通過客戶端軟件連接源數據庫,確認是否能夠正常連接。如果連接報錯,且報錯信息中含有Access deny,那麼說明賬號或密碼有誤。

    修複方法:在數據傳輸服務控製台修改遷移任務,將賬號密碼修改成正確的配置後重新預檢查

  • 源庫遷移賬號限製了來源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。

      修複方法:

    5. 如果源數據庫為MySQL,那麼在源數據庫中執行grant all on . to “遷移賬號”@”%” identified by “遷移密碼”給遷移賬號重新授權。這個命令中的遷移賬號用真實的遷移賬號替換,遷移密碼用真實的遷移密碼替換。授權後重新進行預檢查。

    6. 如果源數據庫為SQLServer,那麼需要先關閉掉防火牆或禁用掉trigger後,重新進行預檢查。
    7. 如果源數據庫為Oracle,那麼先修改TCP.VALIDNODE_CHECKING=no並重啟監聽後,重新進行預檢查。
  • 源數據庫安裝服務器設置了防火牆

    檢測方法:如果源數據庫安裝服務器為Linux,那麼在shell中運行 iptables -L,檢查服務器是否配置了防火牆。如果安裝服務器為window,那麼在控製麵板中查找到Windows防火牆,查看是否配置了防火牆。

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

  • 數據傳輸服務器與源數據庫網絡不通

    如果不是上麵三種情況中的任何一種,那麼可能是由於數據傳輸服務器跟源數據庫網絡不連通,當處於這種情況時,請聯係數據傳輸服務值班同學協助解決。

  • 目標庫連接性檢查

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

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

    • 創建遷移任務時,提供的賬號或密碼不正確

      檢測方法:在任何一台能夠網絡能夠跟目標數據庫互通的服務器上,使用創建遷移任務使用的賬號/密碼,通過客戶端軟件連接源數據庫,確認是否能夠正常連接。如果連接報錯,且報錯信息中含有Access deny,那麼說明賬號或密碼有誤。

      修複方法:在數據傳輸服務控製台修改遷移任務,將賬號密碼修改成正確的配置後重新預檢查。

    • 數據傳輸服務器與目標數據庫網絡不通

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

schema存在性檢查

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

  • 數據庫名中含有小寫字母、數字、下劃線、中劃線的其他特殊字符。

    當遇到這種情況時,預檢查的失敗原因為:遷移的數據庫遷移庫名的名稱不符合rds規範。

    修複方法為:到RDS控製台的數據庫管理頁麵中,創建滿足rds規範的數據庫,將新建庫的讀寫權限賦給遷移賬號。然後使用數據傳輸服務提供的庫名映射功能將要遷移的數據庫映射至新創建的數據庫後,然後重新進行預檢查。

  • 數據庫的字符集不為utf8、gbk、latin1、utf8mb4中的一種。

    當遇到這種情況時,預檢查的失敗原因為:遷移的數據庫遷移庫名的字符集不滿足rds的要求。

    修複方法為:到RDS控製台的數據庫管理頁麵中,創建滿足rds規範的數據庫,然後將新建庫的讀寫權限賦給遷移賬號。如果新創建的庫名與待遷移的庫名不同,那麼使用數據傳輸服務提供的庫名映射功能將要遷移的數據庫映射至新創建的數據庫後,重新進行預檢查。

  • 目標庫遷移賬號無遷移庫的讀寫權限。

    當遇到這種情況時,預檢查的失敗原因為:該用戶沒有權限使用庫遷移庫名

    修複方法為:先到RDS控製台的數據庫管理頁麵中賬號管理頁麵,修改權限,將遷移庫的讀寫權限授予遷移賬號後,重新進行預檢查。

源庫權限檢查

這個檢查項主要檢查源數據庫的遷移賬號是否有足夠的權限可以進行數據遷移。每種數據庫需要的遷移權限詳見遷移手冊。

目標庫權限檢查

這個檢查項主要檢查源數據庫的遷移賬號是否有足夠的權限可以進行數據遷移。每種數據庫需要的遷移權限詳見遷移手冊。

源庫版本號檢查

這個檢查項主要檢查源數據庫的版本號,數據傳輸服務是否支持。數據傳輸服務支持的各種源數據庫的版本如下:

源數據庫類型 支持的版本號
MySQL 5.0、5.1、5.5、5.6
當進行增量遷移時,僅支持5.1、5.5、5.6
SQL Server 2005、2008、2008R2、2012
Oracle 10g、11g

當版本檢查失敗時,隻能將源數據庫升降級到數據傳輸服務支持的版本範圍後,再進行預檢查。

同名對象存在性檢查

這個檢查項主要檢查目標庫是否已經存在跟待遷移對象同步的對象。當這個檢查項失敗時,說明目標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的表,修改遷移任務,將這些表從遷移列表刪除掉。然後單獨創建一個遷移任務,對這些表進行結構遷移+全量數據遷移。

最後更新:2016-11-23 16:24:18

  上一篇:go 數據遷移功能簡介__數據遷移_用戶指南_數據傳輸-阿裏雲
  下一篇:go 從本地Oracle遷移到RDS for MySQL__數據遷移_用戶指南_數據傳輸-阿裏雲