使用 mysqldump 遷移 MySQL 數據-企業實戰

使用 mysqldump 工具的優勢是簡單易用、容易上手,缺點是停機時間較長,所以它適用於數據量不大,或者容許停機的時間較長的狀況。
html


背景信息mysql

因爲 RDS 提供的關係型數據庫服務與原生的數據庫服務徹底兼容,因此對用戶來講,將原有數據庫遷移到 RDS 實例的過程,與從一個 MySQL 服務器遷移到另一臺 MySQL 服務器的過程基本相似。sql


注意事項數據庫

遷移後的表不區分大小寫,統一變爲小寫。bash


前提條件服務器

  • 已對RDS 實例設置白名單,申請外網地址,以及建立數據庫和帳號。具體可參見快速入門。ide

  • 已購買雲服務器 ECS。函數

操做步驟工具

在正式遷移以前,須要先在本地數據庫中建立遷移帳號,並將要遷移的數據庫的讀寫權限受權給遷移帳號。spa

    1. 在本地數據庫中建立遷移帳號。

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

    參數說明:

  • username:要建立的帳號

  • host:指定該帳號登陸數據庫的主機。若是是本地用戶可使用 localhost,若是想讓該用戶從任意主機登陸,可使用通配符 %

  • password:該帳號的登陸密碼

    例:要建立帳號爲 William,密碼爲 Changme123 的帳號從任意主機登陸本地數據庫,命令以下:

CREATE USER 'William'@'%' IDENTIFIED BY 'Changme123';

  

  2. 在本地數據庫中給遷移帳號受權。

GRANT SELECT ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
GRANT REPLICATION SLAVE ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

參數說明:

  • privileges:該帳號的操做權限,如 SELECT、INSERT、UPDATE 等。若是要受權該帳號全部權限,則使用 ALL

  • databasename:數據庫名。若是要受權該帳號全部的數據庫權限,則使用通配符 *

  • tablename:表名。若是要受權該帳號全部的表權限,則使用通配符 *

  • username:要受權的帳號名

  • host:受權登陸數據庫的主機名。若是是本地用戶可使用 localhost,若是想讓該用戶從任意主機登陸,可使用通配符 %

  • WITH GRANT OPTION:受權該帳號能使用GRANT命令,該參數爲可選

    例:受權帳號 William 對全部數據庫和表的全部權限,並能夠從任意主機登陸本地數據庫,命令以下。

GRANT ALL ON *.* TO 'William'@'%';

 

   3. 使用 mysqldump 的數據導出工具,將本地數據庫數據導出爲數據文件。

說明: 導出期間請勿進行數據更新。本步驟僅僅導出數據,不包括存儲過程、觸發器及函數。

mysqldump -h localIp -u userName -p --opt --default-character-set=utf8 --hex-blob dbName --skip-triggers > /tmp/dbName.sql

參數說明:

  • localIp:本地數據庫服務器 IP 地址

  • userName:本地數據庫的遷移帳號

  • dbName:須要遷移的數據庫名

  • /tmp/dbName.sql:備份生成的文件名

 

   4. 使用 mysqldump 導出存儲過程、觸發器和函數。

說明: 若數據庫中沒有使用存儲過程、觸發器和函數,可跳過此步驟。在導出存儲過程、觸發器和函數時,須要將 definer 去掉,以兼容 RDS。

mysqldump -h localIp -u userName -p --opt --default-character-set=utf8 --hex-blob dbName -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/triggerProcedure.sql

參數說明:

  • localIp:本地數據庫服務器 IP 地址

  • userName:本地數據庫的遷移帳號

  • dbName:須要遷移的數據庫名

  • /tmp/triggerProcedure.sql:備份生成的文件名


    5. 將數據文件和存儲過程文件上傳到 ECS 上。

    本例以文件上傳到以下路徑爲例。

/tmp/dbName.sql
/tmp/triggerProcedure.sql


    6. 登陸 ECS,將數據文件和存儲過程文件導入到目標 RDS 中。

mysql -h intranet4example.mysql.rds.aliyuncs.com –u userName -p dbName < /tmp/dbName.sql
mysql -h intranet4example.mysql.rds.aliyuncs.com -u userName -p dbName < /tmp/triggerProcedure.sql

參數說明:

  • intranet4example.mysql.rds.aliyuncs.com:RDS 實例鏈接地址,本例之內網地址爲例

  • userName:RDS 數據庫的遷移帳號

  • dbName:須要導入的數據庫名

  • /tmp/dbName.sql:要導入的數據文件名

  • /tmp/triggerProcedure.sql:要導入的存儲過程文件名



參考:

https://help.aliyun.com/document_detail/96156.html?spm=5176.10695662.1996646101.searchclickresult.5b8d5ba4LaBzne

https://help.aliyun.com/knowledge_detail/41721.html?spm=5176.10695662.1996646101.searchclickresult.3a72674bAfcRkp

相關文章
相關標籤/搜索