|       一般使用MySQL的時(shí)候,如果數(shù)據(jù)量不大,我們都使用一臺(tái)MySQL服務(wù)器,備份的時(shí)候使用mysqldump工具就可以了,但是隨著業(yè)務(wù)不斷發(fā)展,問(wèn)題出現(xiàn)了:  武漢百度推廣公司首先:數(shù)據(jù)量往往直線上升,單獨(dú)一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器開(kāi)始出現(xiàn)性能的瓶頸,數(shù)據(jù)訪問(wèn)越來(lái)越慢。
 其次:備份也變得困難了,因?yàn)閙ysqldump是導(dǎo)出一份文本文件,而數(shù)據(jù)量特別大的時(shí)候,這樣的備份往往需要很長(zhǎng)時(shí)間,可能有人會(huì)說(shuō),我們可以直接通過(guò)拷貝數(shù)據(jù)文件來(lái)備份數(shù)據(jù)庫(kù),這樣很方便,快捷,不錯(cuò),這樣是比mysqldump方便快捷,但是,直接拷貝數(shù)據(jù)文件備份的方式要求我們必須先關(guān)閉mysql服務(wù),然后再拷貝數(shù)據(jù)文件,否則,你拷貝的文件很可能是壞的。而實(shí)際運(yùn)行的mysql服務(wù)往往要求在任何時(shí)候都不可以停止服務(wù),所以這樣的備份方式在此情況下不可行。
 如果你遇到了類似上面的問(wèn)題,你就可以使用建立MySQL主從服務(wù)器的方式來(lái)解決,下面先來(lái)看看主從服務(wù)器的設(shè)置:
 前提:MySQL主從服務(wù)器最好使用相同的軟件版本,以避免不不可預(yù)期的故障。
 首先設(shè)置MySQL主服務(wù)器:
 在主服務(wù)器上為從服務(wù)器建立一個(gè)用戶:
 grant replication slave on *.* to ‘用戶名‘@’主機(jī)’ identified by ‘密碼’;
 編輯主服務(wù)器的配置文件:/etc/my.cnf的mysqld處
 server-id = 1 log-bin
 binlog-do-db=需要備份的數(shù)據(jù)庫(kù)名,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
 binlog-ignore-db=不需要備份的數(shù)據(jù)庫(kù)苦命,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
 編輯從服務(wù)器的配置文件:/etc/my.cnf
 server-id=2
 master-host=主機(jī)
 master-user=用戶名
 master-password=密碼
 master-port=端口
 replicate-do-db=需要備份的數(shù)據(jù)庫(kù)名,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
 記得先手動(dòng)同步一下主從服務(wù)器中要備份的數(shù)據(jù)庫(kù),然后重啟主,從服務(wù)器。
 要驗(yàn)證主從設(shè)置是否已經(jīng)成功,可以登錄從服務(wù)器輸入如下命令:
 mysql> show slave status\G
 會(huì)得到類似下面的列表:
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 如果這兩個(gè)選項(xiàng)不全是Yes,那就說(shuō)明你前面某個(gè)步驟配置錯(cuò)了。
 如果你的設(shè)置是正確的,嘗試在主服務(wù)器上插入若干條記錄,然后你再轉(zhuǎn)到從服務(wù)器,會(huì)發(fā)現(xiàn)相應(yīng)的新記錄已經(jīng)自動(dòng)同步過(guò)來(lái)了。
 如果你的主從服務(wù)器已經(jīng)配置好了,那么你在應(yīng)用程序中,只要保證所有的insert/delete/update操作是在主服務(wù)器上進(jìn)行的,那么相應(yīng)的數(shù)據(jù)變化會(huì)自動(dòng)同步到從服務(wù)器上,這樣,我們就可以把select操作分擔(dān)到多臺(tái)從數(shù)據(jù)庫(kù)上,從而降低服務(wù)器的載荷。
 如果你想使用復(fù)制數(shù)據(jù)文件的方式來(lái)備份數(shù)據(jù)庫(kù),只要在從服務(wù)器上的mysql命令行先鍵入slave stop;然后復(fù)制數(shù)據(jù)庫(kù)文件,復(fù)制好了,再 在mysql命令行鍵入slave start;啟動(dòng)從服務(wù)器,這樣就即備份了數(shù)據(jù)有保證了數(shù)據(jù)完整性,而且整個(gè)過(guò)程中主服務(wù)器的mysql無(wú)需停止。
 ———————————————————————————–
 提示:如果修改了主服務(wù)器的配置,記得刪除從服務(wù)器上的master.info文件。否則從服務(wù)器使用的還是老配置,可能會(huì)導(dǎo)致錯(cuò)誤。
 ———————————————————————————–
 注意:關(guān)于要復(fù)制多個(gè)數(shù)據(jù)庫(kù)時(shí),binlog-do-db和replicate-do-db選項(xiàng)的設(shè)置,網(wǎng)上很多人說(shuō)是用半角逗號(hào)分隔,經(jīng)過(guò)測(cè)試,這樣的說(shuō)法是錯(cuò)誤的,MySQL官方文檔也明確指出,如果要備份多個(gè)數(shù)據(jù)庫(kù),只要重復(fù)設(shè)置相應(yīng)選項(xiàng)就可以了。
 比如:
 binlog-do-db=a
 binlog-do-db=b
 replicate-do-db=a
 replicate-do-db=b
 ———————————————————————————–
 補(bǔ)充:從服務(wù)器上my.cnf中的master-*的設(shè)置僅在第一次生效,后保存在master.info文件里。
 ———————————————————————————–
 在從服務(wù)器上使用show slave status
 Slave_IO_Running,為No,則說(shuō)明IO_THREAD沒(méi)有啟動(dòng),請(qǐng)執(zhí)行slave start [IO_THREAD]
 Slave_SQL_Running為No則復(fù)制出錯(cuò),查看Last_error字段排除錯(cuò)誤后執(zhí)行slave start [SQL_THREAD]
 查看Slave_IO_State字段
 空 //復(fù)制沒(méi)有啟動(dòng)
 Connecting to master//沒(méi)有連接上master
 Waiting for master to send event//已經(jīng)連上
 ———————————————————————————–
 可以使用LOAD DATA FROM MASTER語(yǔ)句來(lái)建立slave。但有約束條件:
 數(shù)據(jù)表要全部是MyISAM表,必須有SUPER權(quán)限,master的復(fù)制用戶必須具備RELOAD和SUPER權(quán)限。
 在master端執(zhí)行RESET MASTER清除已有的日志變更,
 此時(shí)slave端會(huì)因?yàn)檎也坏絤aster日志無(wú)法啟動(dòng)IO_THREAD,請(qǐng)清空data目錄下
 relay-log.info,hosname-relay-bin*等文件重新啟動(dòng)mysql
 中繼日志文件默認(rèn)的文件為hostname-relay-bin.nnn和hostname-relay-bin.index。可用從服務(wù)器的–
 relay-log和–relay-log-index選項(xiàng)修改。在從服務(wù)器中還有一個(gè)relay-log.info中繼信息文件,可用
 –relay-log-info-file啟動(dòng)選項(xiàng)修改文件名。
 雙機(jī)互備則是兩個(gè)mysql同時(shí)配置為master及slave
 ———————————————————————————–
 主服務(wù)器上的相關(guān)命令:                   武漢百度公司
 show master status
 show slave hosts
 show {master|binary} logs
 show binlog events
 purge {master|binary} logs to ‘log_name’
 purge {master|binary} logs before ‘date’
 reset master(老版本flush master)
 set sql_log_bin={0|1}
 ———————————————————————————–
 從服務(wù)器上的相關(guān)命令:
 slave start
 slave stop
 SLAVE STOP IO_THREAD //此線程把master段的日志寫(xiě)到本地
 SLAVE start IO_THREAD
 SLAVE STOP SQL_THREAD //此線程把寫(xiě)到本地的日志應(yīng)用于數(shù)據(jù)庫(kù)
 SLAVE start SQL_THREAD
 reset slave
 SET GLOBAL SQL_SLAVE_SKIP_COUNTER
 load data from master
 show slave status(SUPER,REPLICATION CLIENT)
 CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //動(dòng)態(tài)改變master信息
 PURGE MASTER [before 'date'] 刪除master端已同步過(guò)的日志
 ———————————————————————————–
 –read-only
 該選項(xiàng)讓從服務(wù)器只允許來(lái)自從服務(wù)器線程或具有SUPER權(quán)限的用戶的更新??梢源_保從服務(wù)器不接受來(lái)自客戶的更新。
 
 
 
 
 |