這篇文章主要描述在主從的情況下,將Master(舊),Slave(舊)兩個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)移到Master(新),Slave(新)的方法。
關(guān)于MySQL數(shù)據(jù)庫(kù)(數(shù)據(jù))的常用的遷移方法筆者知道兩種:
一、是使用lock table將主庫(kù)的表鎖起來,記錄binlog的位置,然后使用mysqldump將數(shù)據(jù)導(dǎo)出成文件,然后在新數(shù)據(jù)庫(kù)中導(dǎo)入這個(gè)文件,再把主從同步的位置調(diào)整到之前記錄的binlog的位置。
二、是直接將舊服務(wù)器上的數(shù)據(jù)庫(kù)的文件復(fù)制到新服務(wù)器上,然后使用Navicat將數(shù)據(jù)同步到從庫(kù)中,也就是今天需要講的這種方法。
對(duì)比兩種方法,第一種方法比較安全,但需要鎖表,很多時(shí)候,項(xiàng)目已經(jīng)上線在運(yùn)行的時(shí)候很難有可以鎖表的機(jī)會(huì)。而第二種方法比較簡(jiǎn)單粗暴,同時(shí)也比較迅速,但就是不太安全。
在遷移數(shù)據(jù)之前,首先要做的是對(duì)比兩個(gè)服務(wù)器上的數(shù)據(jù)庫(kù)的版本是否一致(主要是大版本),如果兩個(gè)版本不一致,數(shù)據(jù)遷移的過程中和遷移完的結(jié)果都很容易出現(xiàn)一些不可預(yù)知的問題(這個(gè)即使使用鎖表的方法也一樣)。
為了說明方便,這里臨時(shí)使用幾個(gè)參數(shù):
操作系統(tǒng):CentOS 6.9
舊服務(wù)器:192.168.189.129
新服務(wù)器:192.168.189.131
數(shù)據(jù)庫(kù):5.6.19
然后需要記住的是數(shù)據(jù)庫(kù)配置文件my.cnf里面的一些變量:
log_bin:binlog開啟狀態(tài)
server-id:
datadir:數(shù)據(jù)文件路徑
socket:socke路徑
log-error:錯(cuò)誤日志文件路徑
pid-file:線程文件路徑
tmpdir:
還有一些配置主從同步的時(shí)候配置的需要同步或者需要忽略同步的參數(shù)(按個(gè)人需求)
binlog-ignore-db
binlog-do-db
之后找到129(舊)服務(wù)器上mysql數(shù)據(jù)文件的存放位置,一般都在/var/lib/mysql
然后將里面的所有文件使用rsync命令復(fù)制到131(新)服務(wù)器上,注意,要用rsync,如果直接使用CP的話,文件傳送到新服務(wù)器上之后,文件的所屬和權(quán)限都會(huì)被改,還有一個(gè)要注意的是,建議將文件直接傳送到新服務(wù)器的目標(biāo)位置,例如:舊服務(wù)器上的數(shù)據(jù)庫(kù)文件路徑為:/var/lib/mysql 新的服務(wù)器上的mysql文件路徑也是。那么,指令就該為:
#后面的路徑是目標(biāo)路徑
rsync -avz /var/lib/mysql 192.168.189.131:/var/lib/mysql

如上圖,如果像這樣先將文件傳送到目標(biāo)服務(wù)器的一個(gè)臨時(shí)文件夾,然后再將這些文件轉(zhuǎn)移到最終路徑的話會(huì)很容易出現(xiàn)文件損壞或者文件權(quán)限被改變得問題。
在傳送到目標(biāo)文件之后,需要改變配置文件,要將這個(gè)配置文件的變量的值改為剛剛記住的那個(gè)配置文件的變量的值。
修改完之后就可以使用
service mysqld start
來開啟數(shù)據(jù)庫(kù)服務(wù)器,之后就是登錄之類的操作了。如果登錄成功和查詢數(shù)據(jù)沒問題的話說明數(shù)據(jù)已經(jīng)成功遷移過來了。
之后要做的就是做主從數(shù)據(jù)的同步。
這里使用的是Navicat,在Navicat里面有這個(gè)功能

源的話選擇新的數(shù)據(jù)庫(kù)(Master)就好了,目標(biāo)就是就是新的Slave了,在做同步之前,最好先使用預(yù)覽功能看看會(huì)有什么錯(cuò)誤之類的,然后選擇需要同步的內(nèi)容,然后選擇開始就行了

在做完數(shù)據(jù)同步之后,就可以配置主從了,關(guān)于主從的配置可以參考這里:http://www.itdecent.cn/p/eed0ca8ba299
需要注意的是:
1、傳送數(shù)據(jù)要用rsync
2、傳送的數(shù)據(jù)最好一步到位,不要為多步執(zhí)行,即中間不要有“中轉(zhuǎn)站”
其實(shí)發(fā)現(xiàn),也可以不用這么麻煩,直接使用Navicat的數(shù)據(jù)傳輸,然后數(shù)據(jù)同步,接著再做主從就好了,這個(gè)也列作第三個(gè)方法吧。