為什么要做遷移?
由于系統(tǒng)版本、數(shù)據(jù)庫的升級,導(dǎo)致測試流程阻塞,為了保證數(shù)據(jù)及系統(tǒng)版本的一致性,我又迫切需要想用這套環(huán)境做性能測試,所以和領(lǐng)導(dǎo)、開發(fā)請示,得到批準(zhǔn)后,便有了這次學(xué)習(xí)的機會,所以特此來記錄下整個過程。
使用方案:
借助工具與編碼相結(jié)合形式,備份MySQL
數(shù)據(jù)庫,并把備份數(shù)據(jù)庫還原到本地MySQL
數(shù)據(jù)庫,使用第三方工具完成數(shù)據(jù)遷移,代碼實現(xiàn)SQL
條數(shù)統(tǒng)計按照庫名和表名回寫結(jié)果,使用ultracompare
實現(xiàn)比對。
使用工具:
第一種遷移工具
Microsoft SQL Server Migration Assistant for MySQL
:推薦這款工具,微軟出的,但是也會有些問題,如部分表數(shù)據(jù)不能完全遷移
第二種遷移工具
Navicat Premium 12
:不推薦,速度慢,極容易失敗
第三種遷移工具
Tapdata
:這款也不錯,第三方工具,但不穩(wěn)定,總內(nèi)存溢出,底層Java
寫的,需要與客服溝通解決使用中問題,客服響應(yīng)速度不是很理想
比對工具
ultracompare
:比對結(jié)果使用
工具使用
第一種遷移工具使用
Microsoft SQL Server Migration Assistant for MySQL
,這款工具是微軟出的,真的很好用,而且速度也算比較快。
從https://www.microsoft.com/en-us/download/details.aspx?id=54257
,下載安裝.
下面來介紹如何使用這款工具,具體步驟如下:
第一步:創(chuàng)建一個遷移工程
需要注意的是你需要選擇遷移到的SQL Server
數(shù)據(jù)庫的版本,目前支持:SQL Azure,SQL Server 2005,SQL Server2008,SQL Server 2012,SQL Server2014
,根據(jù)實際需要選擇你要遷移到目標(biāo)數(shù)據(jù)庫的版本。
第二步:連接源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫
上面的是源:MySQL
,下面的是目標(biāo):SQL Server
第三步:選擇需要遷移的數(shù)據(jù)庫創(chuàng)建遷移分析報告
此報告會分析當(dāng)前需要遷移的數(shù)據(jù)庫中的所有表結(jié)構(gòu)并會生成一個可行性報告
生成的報告如下:
分析需要轉(zhuǎn)換的對象,表,數(shù)據(jù)庫有多少個,是否存在不可轉(zhuǎn)換的對象等信息,如有檢查錯誤會下下面輸出
第四步: 轉(zhuǎn)換schema
也就是數(shù)據(jù)庫結(jié)構(gòu)
遷移分兩步:1.轉(zhuǎn)換數(shù)據(jù)庫結(jié)構(gòu),2.遷移數(shù)據(jù);
第五步:在源數(shù)據(jù)庫轉(zhuǎn)換完schema
之后記得在目標(biāo)數(shù)據(jù)庫上執(zhí)行同步schema
操作
否則轉(zhuǎn)換的數(shù)據(jù)庫結(jié)構(gòu)是不會到目標(biāo)數(shù)據(jù)庫的
點擊同步之后同樣會有一個同步的報告:
點擊OK
之后就真正執(zhí)行同步操作會將你轉(zhuǎn)換完的結(jié)構(gòu)同步到目標(biāo)數(shù)據(jù)庫上,創(chuàng)建對應(yīng)的表及其他對象。同步操作完成之后會有如下輸出:
第六步:結(jié)構(gòu)同步完成之后接下來就是數(shù)據(jù)遷移操作了
我們可以看到右邊有幾個tab
頁,當(dāng)前選中的是Type Map
,會列出源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的字段類型的mapping
關(guān)系
因為不同數(shù)據(jù)庫之間的數(shù)據(jù)類型還是有所差異的。
點擊Migrate Data
之后需要再次確認(rèn)輸入源數(shù)據(jù)庫密碼和目標(biāo)數(shù)據(jù)庫密碼,然后開始真正的數(shù)據(jù)的遷移。
執(zhí)行之后就等待完成就好,同樣會生成一個數(shù)據(jù)遷移完成的報告。至此數(shù)據(jù)遷移就可以完成了。
第二種遷移工具使用
Navicat Premium 12
這款工具操作更簡單,因為很多步驟可以圖形化,相對簡便。
具體操作步驟如下:
建立MySQL、SqlServer
連接,
雙擊MySQL
的連接,建立連接
然后選擇navicat 的左上角工具
數(shù)據(jù)將自動導(dǎo)入
**注意:**該工具將不會同步約束,比如:默認(rèn)值之類的。但是非空約束是可以傳遞到SqlServer
。
第三種遷移工具
Tapdata
,這個工具是永久免費的,也算比較好用,具體使用方法如下:
第一步:配置MySQL
連接
1、點擊 Tapdata Cloud
操作后臺左側(cè)菜單欄的【連接管理】,然后點擊右側(cè)區(qū)域【連接列表】右上角的【創(chuàng)建連接】按鈕,打開連接類型選擇頁面,然后選擇MySQL
2、在打開的連接信息配置頁面依次輸入需要的配置信息
【連 接 名 稱】:設(shè)置連接的名稱,多個連接的名稱不能重復(fù)
【數(shù)據(jù)庫地址】:數(shù)據(jù)庫 IP / Host
【端 口】:數(shù)據(jù)庫端口
【數(shù)據(jù)庫名稱】:tapdata
數(shù)據(jù)庫連接是以一個 db
為一個數(shù)據(jù)源。這里的 db
是指一個數(shù)據(jù)庫實例中的 database
,而不是一個 mysql
實例。
【賬 號】:可以訪問數(shù)據(jù)庫的賬號
【密 碼】:數(shù)據(jù)庫賬號對應(yīng)的密碼
【時 間 時 區(qū)】:默認(rèn)使用該數(shù)據(jù)庫的時區(qū);若指定時區(qū),則使用指定后的時區(qū)設(shè)置
第二步:配置 SQL Server
連接
3、同第一步操作,點擊左側(cè)菜單欄的【連接管理】,然后點擊右側(cè)區(qū)域【連接列表】右上角的【創(chuàng)建連接】按鈕,打開連接類型選擇頁面,然后選擇 SQL Server
4、在打開的連接信息配置頁面依次輸入需要的配置信息,配置完成后測試連接保存即可。
第三步:選擇同步模式-全量/增量/全+增
進(jìn)入Tapdata Cloud
操作后臺任務(wù)管理頁面,點擊添加任務(wù)按鈕進(jìn)入任務(wù)設(shè)置流程
根據(jù)剛才建好的連接,選定源端與目標(biāo)端。
根據(jù)數(shù)據(jù)需求,選擇需要同步的庫、表,如果你對表名有修改需要,可以通過頁面中的表名批量修改功能對目標(biāo)端的表名進(jìn)行批量設(shè)置。
在以上選項設(shè)置完畢后,下一步選擇同步類型,平臺提供全量同步、增量同步、全量+增量同步,設(shè)定寫入模式和讀取數(shù)量。
如果選擇的是全量+增量同步,在全量任務(wù)執(zhí)行完畢后,Tapdata Agent
會自動進(jìn)入增量同步狀態(tài)。在該狀態(tài)中,Tapdata Agent
會持續(xù)監(jiān)聽源端的數(shù)據(jù)變化(包括:寫入、更新、刪除),并實時的將這些數(shù)據(jù)變化寫入目標(biāo)端。
點擊任務(wù)名稱可以打開任務(wù)詳情頁面,可以查看任務(wù)詳細(xì)信息。
點擊任務(wù)監(jiān)控可以打開任務(wù)執(zhí)行詳情頁面,可以查看任務(wù)進(jìn)度/里程碑等的具體信息。
第四步:進(jìn)行數(shù)據(jù)校驗
一般同步完成后,我都習(xí)慣性進(jìn)行一下數(shù)據(jù)校驗,防止踩坑。
Tapdata
有三種校驗?zāi)J?,我常用最快的快?code>count校驗 ,只需要選擇到要校驗的表,不用設(shè)置其他復(fù)雜的參數(shù)和條件,簡單方便。
如果覺得不夠用,也可以選擇表全字段值校驗 ,這個除了要選擇待校驗表外,還需要針對每一個表設(shè)置索引字段。
在進(jìn)行表全字段值校驗時,還支持進(jìn)行高級校驗。通過高級校驗可以添加JS校驗邏輯,可以對源和目標(biāo)的數(shù)據(jù)進(jìn)行校驗。
還有一個校驗方式關(guān)聯(lián)字段值校驗 ,創(chuàng)建關(guān)聯(lián)字段值校驗時,除了要選擇待校驗表外,還需要針對每一個表設(shè)置索引字段。
以上就是 MySQL
數(shù)據(jù)實時同步到 SQL Server
的操作分享。
使用到的SQL技術(shù)
MySQL部分
查詢某個庫的所有表名稱
select table_name from information_schema.tables where table_schema='數(shù)據(jù)庫名';
查詢某個數(shù)據(jù)庫中所有的表名 列名 字段長度
SELECT TABLE_NAME as '表名', COLUMN_NAME as '列名',COLUMN_COMMENT,DATA_TYPE as '字段類型' ,COLUMN_TYPE as '長度加類型' FROM information_schema.`COLUMNS` where TABLE_SCHEMA='數(shù)據(jù)庫名' order by TABLE_NAME,COLUMN_NAME
sqlserver部分
SQLserver 查詢當(dāng)前庫 所有表名
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name;
查詢數(shù)據(jù)庫中重復(fù)數(shù)據(jù)按照ID查詢
SELECT id FROM 數(shù)據(jù)庫名 where id<>'' GROUP BY id HAVING COUNT(*)>1
刪除一個表中各字段完全相同情況,只留一條數(shù)據(jù)
-- delete top(1) from 數(shù)據(jù)庫名 where id =id值
刪除日志
USE [master]
GO
ALTER DATABASE 數(shù)據(jù)庫名 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 數(shù)據(jù)庫名 SET RECOVERY SIMPLE --簡單模式
GO
USE 數(shù)據(jù)庫名
GO
DBCC SHRINKFILE (N'數(shù)據(jù)庫名_log' , 2, TRUNCATEONLY) --設(shè)置壓縮后的日志大小為2M,可以自行指定
GO
USE [master]
GO
ALTER DATABASE 數(shù)據(jù)庫名 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE 數(shù)據(jù)庫名 SET RECOVERY FULL --還原為完全模式
GO
修改表字段
alter table 數(shù)據(jù)庫名 alter column 字段名 字段類型(長度)
解決sqlserver問題:超時時間已到。在操作完成之前超時時間已過或服務(wù)器未響應(yīng)。
1、點開菜單欄:工具
- > 選項
2、設(shè)置腳本執(zhí)行超時時間(根據(jù)自己需求,0為不限制)
3、設(shè)置鏈接字符串更新時間(根據(jù)自己需求,范圍為1-65535)
Navicat Premium 16 無限試用文章來源:http://www.zghlxwxcb.cn/news/detail-503428.html
@echo off
echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language]
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium" /s | findstr /L Registration"') do (
reg delete %%i /va /f
)
echo.
echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSID
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\Classes\CLSID" /s | findstr /E Info"') do (
reg delete %%i /va /f
)
echo.
echo Finish
pause
遷移數(shù)據(jù)成功后遇到的問題
- 部分表數(shù)據(jù)會重復(fù),多次嘗試遷移引起,需要手動刪除重復(fù)數(shù)據(jù),極小概率出現(xiàn),一般出現(xiàn)在數(shù)據(jù)量大的表;
- 部分表字段類型會改變,遷移工具會自動轉(zhuǎn)換成SqlServer支持字段類型,并會影響部分應(yīng)用服務(wù),使其不能正常啟動,需要開發(fā)同事定位并修改成正確類型;
- 部分表會出現(xiàn)沒有主鍵和索引的現(xiàn)象,需要自行手動添加;
- 表字段類型及索引、主鍵修改,如果逐表修改的話,工作量會很大。
寫在最后
整個遷移過程,共耗時近兩周,比我想象中的要難得多,遇到的問題也是真的很棘手,不得不說,當(dāng)數(shù)據(jù)量很大時,確實會給數(shù)據(jù)的操作帶來巨大挑戰(zhàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-503428.html
到了這里,關(guān)于記一次MySQL數(shù)據(jù)遷移到SQLServer全過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!