資料庫線上遷移的設想
在分散式資料庫的環境下,應該經常有資料庫遷移的事情.
一個基於庫的資料庫線上遷移.
先做一個mysqldump到目標機,
因為這個過程很長,
完成之後,不斷追這段時間的binlog
然後,停止應用伺服器,應用最後一段binlog
最後手工檢查資料一致性.
這個只是相關的想法,指令碼未經過測試.不能用於生產環境.
一個基於庫的資料庫線上遷移.
先做一個mysqldump到目標機,
因為這個過程很長,
完成之後,不斷追這段時間的binlog
然後,停止應用伺服器,應用最後一段binlog
最後手工檢查資料一致性.
這個只是相關的想法,指令碼未經過測試.不能用於生產環境.
- #/bin/bash
- source ~/.bashrc
- sourcehost='127.0.0.1'
- sourceport=3306
- sourceuser='root'
- sourcepwd='root'
- targethost='192.168.16.114'
- targetport=3306
- targetuser='xx'
- targetpwd='xx'
- binlogdir='/data'
- db='probe'
-
- #設定master_host
- mysql -u$targetuser -p$targetpwd -h$targethost -P$targetport -e "stop slave;reset slave all;change master to master_host='127.0.0.1';";
-
- #初次同步
- mysqldump -u$sourceuser -p$sourcepwd --master-data --single-transaction --databases $db | mysql -u$targetuser -p$targetpwd -h$targethost -P$targetport
-
- #獲取源資料庫的binlog資訊
- sourcebinloginfo=$(mysql -u$targetuser -p$targetpwd -h$targethost -P$targetport -Be "show slave status\G" | grep 'Master_Log_File\|Read_Master_Log_Pos' | grep -v Relay | awk '{print $2}')
- Master_Log_File=$(echo $sourcebinloginfo | awk -F " " '{print $1}')
- Read_Master_Log_Pos=$(echo $sourcebinloginfo | awk -F " " '{print $2}')
-
- echo "Master_Log_File:"$Master_Log_File
- echo "Read_Master_Log_Pos:"$Read_Master_Log_Pos
- function getSourceBinlog()
- {
- binloginfo=$(mysql -u$sourceuser -p$sourcepwd -e "flush tables with read lock;show master status\Gunlock tables" | grep "File\|Position" | awk '{print $2}');
- echo $binloginfo;
- }
- function applyBinlog()
- {
- info=$(getSourceBinlog);
- echo "info:"$info
- endfile=$(echo $info | awk -F " " '{print $1}')
- endpos=$(echo $info | awk -F " " '{print $2}')
- while [ "$endfile" != "$startfile" ]
- do
- echo "Apply Binlog:"$startfile","$Read_Master_Log_Pos
- mysqlbinlog $binlogdir"/"$startfile --database $db --start-position=$Read_Master_Log_Pos | mysql -u$targetuser -p$targetpwd -h$targethost -P$targetport
- startfile=$(echo $startfile | awk -F "." '{printf("%s.%06d",$1,$2+1)}')
- startpos=0
- done
- mysqlbinlog $binlogdir"/"$startfile --database $db --stop-position=$endpos | mysql -u$targetuser -p$targetpwd -h$targethost -P$targetport
- startfile=$endfile
- startpos=$endpos
- }
- startfile=$Master_Log_File
- startpos=$Read_Master_Log_Pos
- applyBinlog;
- applyBinlog;
- applyBinlog;
- applyBinlog;
- echo "確認停止中介軟體(Y/N)"
- read sure
- while [ "Y" != "$sure" ]
- do
- echo "確認停止中介軟體(Y/N)"
- read sure;
- done
- applyBinlog;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1829484/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RAC One Node資料庫的轉換與線上遷移資料庫
- 【遷移】使用rman遷移資料庫資料庫
- 資料庫遷移資料庫
- 資料庫遷移 :理解資料庫
- laravel資料庫遷移Laravel資料庫
- Odoo遷移資料庫Odoo資料庫
- redis資料庫遷移Redis資料庫
- Cacti 遷移資料庫資料庫
- 資料庫遷移方案資料庫
- ORACLE資料庫遷移Oracle資料庫
- 遷移資料庫成功!資料庫
- 建立資料庫遷移資料庫
- 資料庫-oracle-資料庫遷移資料庫Oracle
- 線上資料遷移,數字化時代的必修課 —— 京東雲資料遷移實踐
- 資料庫檔案的遷移資料庫
- Oracle資料庫資料遷移流程Oracle資料庫
- 資料庫遷移神器——Flyway資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- 用rman遷移資料庫資料庫
- 資料庫遷移手記資料庫
- django資料庫遷移-15Django資料庫
- SQL Server資料庫遷移SQLServer資料庫
- mysql資料庫遷移 mysqldumpMySql資料庫
- 遷移資料庫到ASM資料庫ASM
- dm資料庫遷移命令資料庫
- 【資料遷移】RMAN遷移資料庫到ASM(三)遷移onlinelog等到ASM資料庫ASM
- 資料庫的冷備份遷移資料庫
- 資料庫的升級及遷移資料庫
- 資料庫遷移的幾個方式資料庫
- 線上遷移表空間資料檔案
- 雲資料庫管理與資料遷移資料庫
- 【資料遷移】RMAN遷移資料庫到ASM(一)建立ASM磁碟組資料庫ASM
- 騰訊雲 雲資料庫遷移資料庫
- laravel 資料庫遷移時報錯Laravel資料庫
- 資料庫邏輯遷移方案資料庫
- linux mysql資料庫遷移LinuxMySql資料庫
- 遷移資料庫到SQLonLinuxDocker資料庫SQLLinuxDocker
- bi資料庫遷移小記資料庫