著作權說明: 本文由博主原創,轉載請注明出處,
原文地址: https://blog.csdn.net/qq_38688267/article/details/109090926
文章目錄
- 背景介紹
- 資料庫概況
- 遷移方案確定
- 具體步驟
- 1、通過mysqldump備份現有資料庫資料
- 2、從庫讀取備份
- 3、建立主從同步
- 查詢`mysqldump.sql`中的bin-log日志節點資訊
- 修改從庫的MASTER資訊
- 檢查是否成功
背景介紹
我接手的平臺是17年開始開發的,當時沒有用云服務器,而是用公司自己的機房,
自己維護服務器的問題還是很多的,首先是穩定性沒法保證,就我入職這幾個月下來,所在大樓停電保養就弄了兩次,然后還有一次意外停電,一次網路光纖被挖機挖斷了,,,就各種各樣的突發情況導致系統無法正常提供服務,嚴重影響用戶體驗,
其次是硬體維護成本較高,不論是主機的日常維護,還是硬體問題解決、硬體擴展等都挺麻煩的,因為我司的服務器都是物體機上創建的虛擬機,一旦需要動硬體就會影響到該主機上的所有服務,
所以服務上云作業刻不容緩,而上云作業中的重中之重就在資料庫的遷移,
資料庫概況
平臺資料庫用的MySQL5.7,沒有做任何優化,讀寫分離、主從都沒有!運行了兩年多,200多張表,大概10E條資料,最大的表將近3E資料,data檔案夾大概300G左右,大表資訊如圖:

我以前的專案都是些小專案,資料量最大的也就百萬級,我以前的認知中,MySQL處理億級資料應該挺慢的(不知道這個思想是怎么形成的,可能是看多了各種MySQL優化的文章),沒想到哪怕是查詢2.7E資料的表,速度也還是非常可觀的!當然order_id表肯定是加了索引的,
mysql> select * from insp_order_chklist where order_id = 1316429177167155200
> OK
> 時間: 0.059s
遷移方案確定
其實在資料庫遷移的同時,我也決定將MySQL版本升級成MySQL8.0,所以我先用Navicat同步了資料過去后進行了測驗,確定升級版本不會影響現有功能,
資料遷移最大的問題不是將這300G資料遷過去,而是需要在服務切換時,確保兩邊資料庫資料一致!
所以顯然通過Navicat工具同步是不現實的,300G的資料不是一時半會能一次性同步完的,系統也不可能專門停止一天的服務來實作資料遷移作業,最后跟一群大佬請教后決定用mysqldump工具初始化云服務器資料庫資料,再將現有資料庫與云服務器資料庫搭建主從,實時同步資料,確保在后續任何時間進行上云時,資料都是一致的!
具體步驟
首先需要開啟主庫的bin-log日志,設定唯一server-id,從庫也設定唯一server-id,這個就不多說了,
資料庫操作非同小可,請謹慎操作,在不熟悉的情況下,建議先在TEST或本地操作一遍,熟悉流程后再操作生產環境~
1、通過mysqldump備份現有資料庫資料
- –single-transaction
表示此次mysqldump程序中處于同一個事務中,即同步程序中的修改不會被同步, - –master-data
將二進制日志檔案的名稱和位置寫入輸出,
如果選項值為2,則該CHANGE MASTER TO陳述句將寫為SQL注釋,因此僅供參考;重新加載轉儲檔案時,它無效,如果選項值為1,則該陳述句不作為注釋寫入,并在重新加載轉儲檔案時生效,如果未指定選項值,則默認值為1, - –databases
需要備份的database名,如果多個則空格隔開
mysqldump -uroot -proot --single-transaction --master-data=2 --databases YOUR_DB1 YOUR_DB2 > mysqldump.sql
需要注意的是,該操作會有一個
flush tables的操作,該操作會鎖所有表,導致所有其他SQL等待,包括查詢SQL,我操作的時候大概鎖了8S左右,資料庫越大鎖的越久,各位謹慎操作!!!
更多mysqldump資訊請參閱:MySQL官方檔案-mysqldump
2、從庫讀取備份
## 我的備份檔案較大,且需要傳出到云服務器上,因此我先壓縮一下
# 安裝 pigz 工具
yum -y install pigz
# -p 20 使用20個CPU并發進行壓縮
pigz -p 20 mysqldump.sql
## 壓縮完通過scp命令傳輸到目標服務器
#root@123.123.123.123是目標服務器登錄用戶@IP
scp ./mysqldump.sql.gz root@123.123.123.123:/home
# 解壓
pigz -d mysqldump.sql.gz
# 恢復備份
mysql -uroot -p
source /home/mysqldump.sql
3、建立主從同步
查詢mysqldump.sql中的bin-log日志節點資訊
> less /home/mysqldump.sql

修改從庫的MASTER資訊
## 修改MASTER資訊
CHANGE MASTER TO MASTER_HOST='123.123.123.123', MASTER_USER='rep1',MASTER_PORT=3306,MASTER_PASSWORD='slavepass',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=73;
## 查看slave狀態
show slave status;
## 開啟同步
start slave;
檢查是否成功
剛開啟同步時,Seconds_Behind_Master的值可能比較大,這是正常情況,因為他需要先將之前先同步過來,
過一陣后,再檢查,依舊沒有報錯且Seconds_Behind_Master的值為0時,可以去找幾張表看下資料是否一致,都沒問題表示資料遷移成功,

總結:
資料庫的遷移作業是服務上云作業中的重要一環,但也只是其中一環,其他需要注意的還有:
1、當前服務器所在網段是否依賴/搭建DNS服務,如果存在,則需要考慮DNS服務器是否會對服務上云造成影響,
2、除了資料庫資料,是否還存在其他資料,比如檔案系統的資料,圖片、視頻等資料,如果存在則也需要同步資料,
3、需要配置新環境的各個服務引數,保持與原服務器一致或設定更合適的值,
希望本文對大家有所幫助或啟發,碼字不易,覺得寫的不錯的可以點贊支持一下哦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/175887.html
標籤:其他
