RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [DB] [經驗分享]MySQL資料快速轉移到另一台主機 - Linux下適用   字型大小:||| 
  本主題被作者加入到他/她的 Blog 中  
Vic
開墾隊隊長.苦力
等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32
老得不能再稱小的熊

十週年紀念徽章(五級)   終生苦力熊勳章  

今日心情

 . 積分: 9423
 . 精華: 28
 . 文章: 9950
 . 收花: 79350 支
 . 送花: 11004 支
 . 比例: 0.14
 . 在線: 2907 小時
 . 瀏覽: 187061 頁
 . 註冊: 8220
 . 失蹤: 32
 . 大熊國
#1 : 2013-3-4 04:10 PM     只看本作者 引言回覆

這方法不需要temp file,可以同時dump,zip,send&import,

問題是不支持resume,如果中途斷線…就需要重來。

@Receiver (先執行這裡,Receiver的nc必須先啟動)

nc -l {port} -v | gzip -d -c | mysql {db} -u{user} -p
@Sender

mysqldump {db} -u{user} -p | gzip | nc {ip of Receiver} {port}
FAQ:

1. nc (netcat) 安裝

yum install nc
2. 查看進度 (估計值)

a)傳送前先到Sender執行下面的sql...並記下要傳的db size是多少。

b)傳送中…在Receiver執行下面的sql...用來查看已import的資料有多大

查看db size SQL:

SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024
"Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ;
另外,如果你的db是MyISAM你也可以用(如果是innoDB, 則需要開啟innodb_file_per_table)

du -h /var/lib/mysql/{db}
來查看Sender & Receiver現在的data size而估計進度


相關關鍵字: mysql  備份  mysqldump  linux  






[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
Vic
開墾隊隊長.苦力
等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32
老得不能再稱小的熊

十週年紀念徽章(五級)   終生苦力熊勳章  

今日心情

 . 積分: 9423
 . 精華: 28
 . 文章: 9950
 . 收花: 79350 支
 . 送花: 11004 支
 . 比例: 0.14
 . 在線: 2907 小時
 . 瀏覽: 187061 頁
 . 註冊: 8220
 . 失蹤: 32
 . 大熊國
#2 : 2013-3-4 11:32 PM     只看本作者 引言回覆

如果資料庫很大…而且網絡慢/不穩…上面的方法可能不適用。

建議

1)直接tar整個/var/lib/mysql/{db} 或者 mysqldump整個db…

2)用rsync(支持resume)來傳出去

rsync -P --rsh=ssh {user}@{host}:{remote_file} {local_file}
-P: same as "--partial --progress"

3)之後再untar 或者 mysql {db} -u{user} -p < dump.sql


相關關鍵字: rsync  tar  






[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
innova
銀驢友〔高級〕
等級: 14等級: 14等級: 14等級: 14


十週年紀念徽章(五級)  

今日心情

 . 積分: 916
 . 文章: 2714
 . 收花: 7188 支
 . 送花: 1461 支
 . 比例: 0.2
 . 在線: 2182 小時
 . 瀏覽: 15202 頁
 . 註冊: 7173
 . 失蹤: 26
 . 火星
#3 : 2013-3-5 02:01 AM     只看本作者 引言回覆

以前有個案子 舊機房在內湖 新辦公大樓新機房 在南港
雖然他們自己有搞 VPN, 兩邊都是用 LAN IP
為了要即時同步兩邊資料
本來是想互相 同時當 master and slave
please google "MySQL master slave"
結果 可能是 OS是 MS-Win的關係?
只有 Master資料會往 slave丟, slave的東西丟不回來
搞好久,最後放棄

上面這方式 似乎是把master MySQL做的事情 寫成一個 log file, 丟給 slave去執行
所以,只要 start slave之前 確認兩邊資料都一樣,後面應該就不用理他
應該還蠻方便的
可惜 我還需要反向同步
如果只有單向同步(備份?)需求的 可以參考看看

如果不是需要很即時的同步
我是都直接stop mysqld
趕緊先 copy到別的資料夾後
再趕緊 start mysqld
然後把 copy的資料夾  tar/zip起來
用 rsync/ftp/sftp/UVNC丟到另一邊 再解開
另一邊當然也是要 stop mysqld之後, copy進去 再重新 start mysqld



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
Vic
開墾隊隊長.苦力
等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32
老得不能再稱小的熊

十週年紀念徽章(五級)   終生苦力熊勳章  

今日心情

 . 積分: 9423
 . 精華: 28
 . 文章: 9950
 . 收花: 79350 支
 . 送花: 11004 支
 . 比例: 0.14
 . 在線: 2907 小時
 . 瀏覽: 187061 頁
 . 註冊: 8220
 . 失蹤: 32
 . 大熊國
#4 : 2013-3-5 08:49 AM     只看本作者 引言回覆

熊上面提到的2種方面都是做一次性轉移…之後的資料並不會自動同步。

如innova兄所言

如果需要2(n)台主機同步…可以用master-slave(master可讀寫,slave只可讀)replication…

參考文章:
http://blog.longwin.com.tw/2008/ ... ter_slave_set_2008/


引用:
innova寫到:
只有 Master資料會往 slave丟, slave的東西丟不回來


如果想2台都可以同時讀寫…就需要所謂master-master replication(mysql官方並不支援…是人們弄出來的)

參考文章:
http://blog.longwin.com.tw/2008/ ... ger-mmm-intro-2008/
http://blog.wu-boy.com/2008/12/m ... %E5%90%8C%E6%AD%A5/



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
innova
銀驢友〔高級〕
等級: 14等級: 14等級: 14等級: 14


十週年紀念徽章(五級)  

今日心情

 . 積分: 916
 . 文章: 2714
 . 收花: 7188 支
 . 送花: 1461 支
 . 比例: 0.2
 . 在線: 2182 小時
 . 瀏覽: 15202 頁
 . 註冊: 7173
 . 失蹤: 26
 . 火星
#5 : 2013-3-6 12:22 AM     只看本作者 引言回覆

我那時候 只有兩台 需要同步
所以 我兩邊都設成 master, 同時也都設 slave
想說 兩邊都是master, 兩邊也都是 slave...
這樣 資料可以雙向同步
忘記在哪邊查到 有人這樣搞 有搞成功的樣子
不過 我兩邊都是 MS-OS
搞到最後 火大了 就不爽try了
... 反正 db也不是我在維護 XD



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
Vic
開墾隊隊長.苦力
等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32等級: 32
老得不能再稱小的熊

十週年紀念徽章(五級)   終生苦力熊勳章  

今日心情

 . 積分: 9423
 . 精華: 28
 . 文章: 9950
 . 收花: 79350 支
 . 送花: 11004 支
 . 比例: 0.14
 . 在線: 2907 小時
 . 瀏覽: 187061 頁
 . 註冊: 8220
 . 失蹤: 32
 . 大熊國
#6 : 2013-3-6 05:54 AM     只看本作者 引言回覆

Master-master的原理好像就是這樣…熊沒有真的做過…所以也不是很清楚。


[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
monkle
驢有所悟
等級: 3等級: 3


今日心情

 . 積分: 12
 . 文章: 47
 . 收花: 97 支
 . 送花: 1 支
 . 比例: 0.01
 . 在線: 503 小時
 . 瀏覽: 1140 頁
 . 註冊: 7074
 . 失蹤: 1456
#7 : 2013-3-7 02:28 AM     只看本作者 引言回覆

innova網友提的是dual master架構
前陣子剛剛實作, 分享一下心得

基本上兩邊作replication 可以選擇
master-slave 和 dual master

不過dual master的架構並不是兩邊都開放寫
比方說, 我們在a和b各有一台DB, 我們讓 甲群使用者寫a, 乙群使用者寫b
我們另外用mysql proxy來監控兩邊狀態.
這時候雖然兩邊似乎都在寫, 但是寫到b的資料卻是透過mysql proxy寫到a, 而b就有點像是slave, 會去跟a的binlog
這樣雖然看似是master-slave架構, 但是如果a掛了, mysql proxy就會通知b接手
這樣就可以完成redundant.

當然也可以單純兩邊設master並且開啟binlog讓對方跟
不過如果在table中有auto increment 的話, 因為兩邊跟會有網路延時的時間差
大量寫入的狀況下應該會有點風險
這時候可以能要用比較特殊的方法來避開風險
這部分我就沒有實作過 不過有google到相關文章可以參考

[monkle 在  2013-3-7 02:35 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-11-22 01:14 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.020709 second(s), 6 queries , Qzip disabled