初碼-Azure系列-記一次MySQL資料庫向Azure的遷移

来源:http://www.cnblogs.com/printhelloworld/archive/2017/05/30/6919577.html
-Advertisement-
Play Games

Azure的遷移繼續進行中,這次是MySQL Database on Azure服務,微軟在SQL Server之外的資料庫能力到底如何呢 ...


初碼Azure系列文章目錄


還在繼續給客戶遷移不同的系統到Azure,這一次是一個系統的MySQL資料庫要遷移,將遷移過程記錄一下

原系統環境

資料庫版本:MySQL Community Edition 5.7

伺服器環境:自建機房虛擬化環境,E7 4820 分配8核32G,主節點+非熱備災備節點

運維方式:每日夜間停止服務,ETL程式備份全庫至災備環境

數據規模:用戶與業務表相關表,記錄數據量在500萬級別以內;日誌表,記錄數據量在5000萬條以內,總數據存儲量在50G

Azure環境選擇

考慮到Azure並不擅長MySQL的PaaS服務(這是我自己的意淫),所以原本計劃在Azure上新建相同配置的虛擬機並安裝同樣的MySQL版本,後經過與Azure專家的溝通,確認Azure的MySQL資料庫服務是適合併且穩定的服務於商用環境的,所以最終的方案是,新建一個MS4規模的MySQL庫,在官網可以查詢到MS4規模如下:

image

可以看到有100G的空間,應該是足夠的,1000的連接數也是綽綽有餘

對比一下阿裡雲的價格

image

其實這樣直接對比沒什麼意義,但是相對而言,阿裡雲的MySQL看上去還是稍微便宜點

開始在Portal中新建MySQL資料庫

image

可以看到這裡還加了一個(預覽),可能還是一個內部在持續研發的產品吧

下麵選擇配置並輸入管理員賬號和密碼

image

等待一會後,創建完成

image

可以看到,這裡沿用了和SQL Azure一樣的結構,即伺服器-資料庫的架構,需要自己新建資料庫和賬號

然後就發現一個比較坑爹的地方,就是新的Portal面板,功能缺失嚴重,竟然沒有防火牆管理,密碼管理也有BUG,從而導致一直無法通過Navicat訪問成功,幸好想起1年前曾經在經典面板中看到過相關功能,於是前往經典面板,發現了這台新建的資料庫,並且找到了防火牆配置

image

image

於是添加一條允許所有IP地址的規則,用於臨時數據遷移

image

後來經過與Azure專家的溝通得知,新的控制面板還不全面,後續會加一些提示,提醒用戶前往經典面板進行管理,或者會臨時關閉新面板上的MySQL管理

下麵就開始進行正式的數據遷移

首先是對原資料庫的備份

由於我對資料庫非常不精通,而MySQL就更不熟悉了,所以為了保險起見,做瞭如下準備工作

1、在夜間操作

2、關閉了所有對外的Web服務

3、停止MySQL服務,對MySQL的資料庫文件目錄(Data目錄)進行了文件拷貝備份(50G),資料庫級的備份就沒有做了,因為ETL程式每天有備份

然後開始選擇遷移方式

事先想到了三種可能的遷移方式,經過搜索最終用瞭如下兩個工具

1、Navicat For MySQL

試用了一下裡面的數據傳輸功能,原理上應該是逐條偏移讀取數據,再傳輸,用這個做數據傳輸肯定不行,但是Navicat有個特別好用的功能,就是導出MySQL數據結構,於是用Navicat導出了數據結構

image

然後再連接到Azure庫,執行剛纔導出的SQL語句,於是就成功的在Azure庫中把所有表建好了(包含索引)

image

2、使用MySQL的SELECT INTO OUTFILE 、LOAD DATA FILE

我不是MySQL專家, 導入導出只能百度,搜索了一下,大部分文章均推薦使用SELECT INTO OUTFILE方式進行快速的導入導出,效率最高,所以我也選擇了這種方式

先找一個300萬數據的表試試看

image

可以看到,260萬條數據,4分鐘導出完成

然後再連接到Azure伺服器,執行導入命令,悲劇了,提示沒有許可權哈哈。

經過與Azure專家的溝通,原來LOAD DATA FILE的時候,要加上Local關鍵詞,這樣數據就識別為從客戶端讀取,而不是伺服器上的路徑,於是導入試試看

由於帶寬受限(5M),所以260萬條數據花了40分鐘才全部導入成功

image

不過這也算是成功的開始了

3、實戰一下AzureMySQL的速度

進行了一個用戶昵稱的關鍵詞Like查詢,原伺服器耗時114秒,Azure伺服器耗時2秒,哈哈哈,真是不錯啊!!!!然後我就嚴重懷疑原伺服器的性能和優化都存在很大問題!

 

好了,至此為止,已經可以說順利的完成了遷移的所有的技術調研和測試,剩下的就是緩慢的表的數據的導入導出了,然後還是要總結一下

總結

1、MySQL的數據遷移,還是比較容易的,可搜索到的資料也很多,特別是數據的導入導出,有很多種辦法,都可以嘗試嘗試

2、Azure的MySQL版整體上看,功能比較簡單傻瓜,適合我這樣的初級DBA,而在命令行模式下,應該有更多可深入挖掘的參數設置、運維功能

3、今天僅僅是遷移,後續在實際運行中可能還會遇到需要解決的場景和問題,我會保持跟進,隨時記錄

4、Azure新Portal裡面的MySQL管理功能確實是有缺失,建議官方可以優化一下或者暫時先關閉


作者:張柔,發佈於  博客園  與  張柔的博客

轉載請註明出處,歡迎郵件交流:[email protected],或者加QQ群:11444444


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一篇 申請帳號 https://mp.weixin.qq.com/cgi-bin/registermidpage?action=index&lang=zh_CN 這裡註冊帳號,記得選小程式,不然其他都是之前的老功能不行的,我就遇到過坑。 記住郵箱只能使用一次,身份證只能綁定5次。好坑沒有找到解綁的 ...
  • Redis 小白指南(四)- 數據的持久化保存 簡介 因為 redis 將數據保存在記憶體中,很容易誘發的一個問題就是,程式崩潰或伺服器重啟等情況如何保證數據的正常存儲。 當我們以 redis 作為主資料庫使用時,或者將 redis 作為緩存伺服器使用時,在緩存被穿透後會對性能造成很大的影響,所有緩存 ...
  • Installating and Initializing a Greenplum Database System... 1 安裝說明 1.1 環境說明 1.2 集群說明 2 準備工作 2.1 Linux用戶 在所有節點上創建greenplum管理員用戶。 2.2 主機名和hosts配置 相同的配置 ...
  • information_schema資料庫是MySQL系統自帶的資料庫,它提供了資料庫元數據的訪問方式。感覺information_schema就像是MySQL實例的一個百科全書,記錄了資料庫當中大部分我們需要了結的信息,比如字元集,許可權相關,資料庫實體對象信息,外檢約束,分區,壓縮表,表信息,索引 ...
  • 7. 圖的聚合操作 圖的聚合操作主要的方法有: (1) Graph.mapReduceTriplets():該方法有一個mapFunc和一個reduceFunc,mapFunc對圖中的每一個EdgeTriplet進行處理,生成一個或者多個消息,並且將這些消息發送個Edge的一個或者兩個頂點,redu ...
  • Redis 小白指南(三)- 事務、Watch 命令、過期、消息通知、管道、優化記憶體空間 簡介 目錄 事務 Watch 命令 過期時間 排序 消息通知 管道 優化記憶體空間 事務 事務是一組命令的集合,事務和命令一樣都是 Redis 的最小執行單位。即一個事務中的命令,要麼都執行,要麼都不執行。可以思 ...
  • 一.資料庫的相關操作 1.創建資料庫 create database dbname; 2.查看系統下有哪些資料庫 show databases; 3.選擇使用哪個數據 use daname 4.查看一個資料庫下有哪些數據表 use dbname show tables; 5.刪除資料庫 drop d ...
  • 說明 本文寫於2017 05 20,使用MySQL 5.7.18。操作系統為64位CentOS Linux release 7.2.1511 (Core),以桌面形式安裝。 卸載MariaDB CentOS7預設安裝MariaDB而不是MySQL,而且yum伺服器上也移除了MySQL相關的軟體包。因 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...