一個簡單的MySQL資料遷移示例
因為伺服器遷移,目前一套硬體老化的MySQL主從伺服器都需要替換為新伺服器,總體評估了一下,在不改變版本的情況下,採用了較新的5.6子版本。就是如下圖所示的左邊和右邊。
如果要做這個完整的切換,其實方式和思路都有很多,我選擇了一種來做。
首先我低估了資料的情況,以為都是InnoDB表,於是從主庫使用--single-transaction匯出表資料,直接匯入。看起來沒有什麼明顯的異常,但是啟動slave,發現資料衝突。
2017-08-07 17:40:31 75211 [Warning] Slave: Duplicate entry '632107' for key 'PRIMARY' Error_code: 1062
2017-08-07 17:40:31 75211 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave S
QL thread with "SLAVE START". We stopped at log 'binlog.000019' position 934115248
所以仔細審視資料,發現原來裡面有個資料庫裡存在大量的MYISAM表。在這種情況系,備份MYISAM表資料就很可能出現問題,因為--single-transaction不會生效,要備份可以使用mysqlhotcopy等方式來做,我不喜歡MYISM表,而且這個人其實比較懶,不想這樣折騰,而且還對主庫造成一定的影響。所以我把目光瞄向了從庫。
為了保證資料一致性,我完全可以先停掉slave,在有限的時間裡匯出資料,這樣對於主庫來說是透明的。
而需要注意的是使用mysqldump匯出使用master-data的選項註定是有衝突的,所以我們完全可以不用master-data=2的選項,而直接根據show slave status\G的結果來得到具體的偏移量。
# mysqldump --all-databases --master-data=2 > master.sql
mysqldump: Error: Binlogging on server not active
新的主庫,新的備庫都是按照這種方式來搭建,資料都來自舊的從庫,這樣一來,配置好服務的話,主庫會有3個binlogDump執行緒。
整個資料匯入的過程中,可以根據processlist的資料看到處理MyISAM表還是比較耗時,我就乾等著幾個MyISAM大表的執行緒State從“Repair by sorting”和“Repair with keycache”切換。
這個時候我們就需要轉換一下,我們把新的從庫指向新的主庫即可,也就是實現級聯複製,要做這個工作,讓資料追平之後,保險起見還是先停掉新主庫的slave執行緒,讓新的從庫重新從新的主庫來應用日誌(show master status\G) 這樣一來,一切一連,一個級聯的環境就搞定了。
後期後一些微調,也可以很自然的完成。
而正式切換的時候,其實幾乎不需要做什麼工作。新的主庫使用reset slave all即可。
上面的這是一個很基礎的環境切換,如果能夠更深一步,把網路層面的工作做好,其實這個切換就更加透明,完全可以做到無感知。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2143218/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SSIS 開發篇-做一個簡單的SqlServer資料表資料遷移SQLServer
- Mysql資料遷移方法MySql
- 簡單分析Flask 資料庫遷移詳情Flask資料庫
- linux mysql資料庫遷移LinuxMySql資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- [譯]ViewModels:一個簡單的示例View
- 寫一個簡單的 Facade 示例
- 【Golang+mysql】記一次mysql資料庫遷移(一)GolangMySql資料庫
- MySQL資料遷移那些事兒MySql
- 一個簡單的 indexedDB 應用示例Index
- 金倉資料庫資料遷移實戰:從MySQL到KES的順利遷移資料庫MySql
- WebGL簡易教程(一):第一個簡單示例Web
- Mysql百萬級資料遷移,怎麼遷移?實戰過沒?MySql
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- 從 SQL Server 到 MySQL (一):異構資料庫遷移ServerMySql資料庫
- redis 單機和cluster資料遷移Redis
- mysql 備份與遷移 資料同步方法MySql
- 技術分享 | MySQL 的幾種資料遷移方案MySql
- MySQL資料備份多種引數介紹及簡單示例MySql
- OGG資料庫遷移方案(一)資料庫
- Hbase、Hive、Impala資料同步簡單示例Hive
- 達夢遷移工具之MySQL資料庫遷移到達夢MySql資料庫
- EF 中多個資料庫遷移資料庫
- Mysql百萬級資料遷移實戰筆記MySql筆記
- 1.0 ORACLE到MYSQL資料遷移方式選型OracleMySql
- Centos MySQL資料庫遷移詳細步驟CentOSMySql資料庫
- 伺服器資料遷移的方法-硬體不同如何遷移資料伺服器
- Kafka資料遷移Kafka
- Harbor資料遷移
- gitlab資料遷移Gitlab
- 資料庫遷移資料庫
- 異構資料庫資料遷移 oracle to mysql之oracle sqlloader和mysql load data資料庫OracleMySql
- Blazor一個簡單的示例讓我們來起飛Blazor
- 帶你實現一個簡單的MYSQL資料庫生成實體類工具MySql資料庫
- MySQL 遷移表空間,備份單表MySql
- mysqldump從mysql遷移資料到OceanBaseMySql
- 資料遷移(1)——通過資料泵表結構批量遷移
- 高速遷移MySQL資料到分散式時序資料庫DolphinDBMySql分散式資料庫
- 一個非常標準的連線Mysql資料庫的示例程式碼MySql資料庫