這篇文章主要描述在主從的情況下,將Master(舊),Slave(舊)兩個數據庫轉移到Master(新),Slave(新)的方法。
關于MySQL數據庫(數據)的常用的遷移方法筆者知道兩種:
一、是使用lock table將主庫的表鎖起來,記錄binlog的位置,然后使用mysqldump將數據導出成文件,然后在新數據庫中導入這個文件,再把主從同步的位置調整到之前記錄的binlog的位置。
二、是直接將舊服務器上的數據庫的文件復制到新服務器上,然后使用Navicat將數據同步到從庫中,也就是今天需要講的這種方法。
對比兩種方法,第一種方法比較安全,但需要鎖表,很多時候,項目已經上線在運行的時候很難有可以鎖表的機會。而第二種方法比較簡單粗暴,同時也比較迅速,但就是不太安全。
在遷移數據之前,首先要做的是對比兩個服務器上的數據庫的版本是否一致(主要是大版本),如果兩個版本不一致,數據遷移的過程中和遷移完的結果都很容易出現一些不可預知的問題(這個即使使用鎖表的方法也一樣)。
為了說明方便,這里臨時使用幾個參數:
操作系統:CentOS 6.9
舊服務器:192.168.189.129
新服務器:192.168.189.131
數據庫:5.6.19
然后需要記住的是數據庫配置文件my.cnf里面的一些變量:
log_bin:binlog開啟狀態
server-id:
datadir:數據文件路徑
socket:socke路徑
log-error:錯誤日志文件路徑
pid-file:線程文件路徑
tmpdir:
還有一些配置主從同步的時候配置的需要同步或者需要忽略同步的參數(按個人需求)
binlog-ignore-db
binlog-do-db
之后找到129(舊)服務器上mysql數據文件的存放位置,一般都在/var/lib/mysql
然后將里面的所有文件使用rsync命令復制到131(新)服務器上,注意,要用rsync,如果直接使用CP的話,文件傳送到新服務器上之后,文件的所屬和權限都會被改,還有一個要注意的是,建議將文件直接傳送到新服務器的目標位置,例如:舊服務器上的數據庫文件路徑為:/var/lib/mysql 新的服務器上的mysql文件路徑也是。那么,指令就該為:
#后面的路徑是目標路徑
rsync -avz /var/lib/mysql 192.168.189.131:/var/lib/mysql
如上圖,如果像這樣先將文件傳送到目標服務器的一個臨時文件夾,然后再將這些文件轉移到最終路徑的話會很容易出現文件損壞或者文件權限被改變得問題。
在傳送到目標文件之后,需要改變配置文件,要將這個配置文件的變量的值改為剛剛記住的那個配置文件的變量的值。
修改完之后就可以使用
service mysqld start
來開啟數據庫服務器,之后就是登錄之類的操作了。如果登錄成功和查詢數據沒問題的話說明數據已經成功遷移過來了。
之后要做的就是做主從數據的同步。
這里使用的是Navicat,在Navicat里面有這個功能
源的話選擇新的數據庫(Master)就好了,目標就是就是新的Slave了,在做同步之前,最好先使用預覽功能看看會有什么錯誤之類的,然后選擇需要同步的內容,然后選擇開始就行了
在做完數據同步之后,就可以配置主從了,關于主從的配置可以參考這里:http://www.lxweimin.com/p/eed0ca8ba299
需要注意的是:
1、傳送數據要用rsync
2、傳送的數據最好一步到位,不要為多步執行,即中間不要有“中轉站”
其實發現,也可以不用這么麻煩,直接使用Navicat的數據傳輸,然后數據同步,接著再做主從就好了,這個也列作第三個方法吧。