Mysql中復(fù)制詳細(xì)解析
1.mysql復(fù)制概念
指將主數(shù)據(jù)庫(kù)的DDL和DML操作通過(guò)二進(jìn)制日志傳到復(fù)制服務(wù)器上,然后在復(fù)制服務(wù)器上將這些日志文件重新執(zhí)行,從而使復(fù)制服務(wù)器和主服務(wù)器的數(shù)據(jù)保持同步。復(fù)制過(guò)程中一個(gè)服務(wù)器充當(dāng)主服務(wù)器(master),而一個(gè)或多個(gè)其它服務(wù)器充當(dāng)從服務(wù)器(slaves)。主服務(wù)器將更新重新寫入二進(jìn)制日志文件,并維護(hù)文件的一個(gè)索引以跟蹤日志循環(huán)。這些日志可以記錄發(fā)送到從服務(wù)器的更新。當(dāng)一個(gè)從服務(wù)器連接主服務(wù)器時(shí),它通知主服務(wù)器、從服務(wù)器在日志中讀取的最后一次成功更新的位置。從服務(wù)器接受從那時(shí)起發(fā)生的任何更新,然后封鎖并等待主服務(wù)器通知新的更新。
2.復(fù)制的用途
通過(guò)主從復(fù)制(master-slave)的方式來(lái)同步數(shù)據(jù),再通過(guò)讀寫分離(mysql-proxy)來(lái)提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力,或者用來(lái)作為主備機(jī)的設(shè)計(jì),保證在主機(jī)停止響應(yīng)之后在很短的時(shí)間內(nèi)就可以將應(yīng)用切換到備機(jī)上繼續(xù)運(yùn)行。
優(yōu)勢(shì):
(1)數(shù)據(jù)庫(kù)集群系統(tǒng)具有多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),在單個(gè)節(jié)點(diǎn)出現(xiàn)故障的情況下,其他正常節(jié)點(diǎn)可以繼續(xù)提供服務(wù)。
(2)如果主服務(wù)器上出現(xiàn)了問(wèn)題可以切換到從服務(wù)器上
(3)通過(guò)復(fù)制可以在從服務(wù)器上執(zhí)行查詢操作,降低了主服務(wù)器的訪問(wèn)壓力,實(shí)現(xiàn)數(shù)據(jù)分布和負(fù)載均衡
(4)可以在從服務(wù)器上進(jìn)行備份,以避免備份期間影響主服務(wù)器的服務(wù)。
3.復(fù)制的實(shí)現(xiàn)(3種方法)
(1)DRBD是一種用軟件實(shí)現(xiàn)的、無(wú)共享的、服務(wù)器之間鏡像塊設(shè)備內(nèi)容的存儲(chǔ)復(fù)制解決方案。
(2)Mysql cluster(又稱mysql簇)。Mysql replicaion(復(fù)制)本身是一個(gè)比較簡(jiǎn)單的結(jié)構(gòu),即一臺(tái)從服務(wù)器(slave)從一臺(tái)主服務(wù)器(master)讀取二進(jìn)制日志然后再解析并應(yīng)用到自身。
(3)一個(gè)簡(jiǎn)單復(fù)制環(huán)境只需要兩臺(tái)運(yùn)行mysql的主機(jī)即可,甚至可以在一臺(tái)物理服務(wù)器主機(jī)上啟動(dòng)兩個(gè)mysqld實(shí)例。一個(gè)作為master而另一個(gè)作為slave來(lái)完成復(fù)制環(huán)境的搭配。但是在實(shí)際應(yīng)用環(huán)境中,可以根據(jù)實(shí)際的業(yè)務(wù)需求利用mysql復(fù)制的功能自己搭建出其他多種更利于擴(kuò)展的復(fù)制架構(gòu),如最常用的主從架構(gòu)。
主從架構(gòu)指的是使用一臺(tái)mysql服務(wù)器作為master,一臺(tái)或多臺(tái)mysql服務(wù)器作為slave,將master的數(shù)據(jù)復(fù)制到slave上。在實(shí)際應(yīng)用場(chǎng)合,主從架構(gòu)模式是mysql復(fù)制最常用的。一般在這種架構(gòu)下,系統(tǒng)的寫操作都是在master中進(jìn)行,而讀操作則分散到各個(gè)slave中進(jìn)行,因此這種架構(gòu)特別適合現(xiàn)在互聯(lián)網(wǎng)高讀寫的問(wèn)題。
Mysql數(shù)據(jù)庫(kù)復(fù)制操作大概分為以下幾個(gè)步驟:
(1)master啟用二進(jìn)制日志。啟用二進(jìn)制日志的操作在日志管理中有詳細(xì)的介紹。
(2)slave上面的I/O進(jìn)程連接上master,并請(qǐng)求從指定日志文件的指定位置(或者從最開(kāi)始的日志)之后的日志內(nèi)容。
(3)master接受到來(lái)自slave的I/O進(jìn)程請(qǐng)求后,通過(guò)負(fù)責(zé)復(fù)制的I/O進(jìn)程根據(jù)請(qǐng)求信息讀取指定日志指定位置之后的日志信息,返回給slave的I/O。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經(jīng)到master端的bin-log文件的名稱以及bin-log的位置。
(4)Slave的I/O進(jìn)程接收到信息后,將接收到的日志內(nèi)容依次添加到slave端的relay-log文件的最末端,并將讀取到的master端的bin-log的文件名和位置記錄到master-info文件中。
(5)Slave的sql進(jìn)程檢測(cè)到relay-log中新增的內(nèi)容后,會(huì)馬上解析relay-log的內(nèi)容,并在自身執(zhí)行。
4.mysql復(fù)制的集中模式
mysql5.1之后的版本中,在復(fù)制方面的改進(jìn)就是引進(jìn)了新的復(fù)制技術(shù)——基于行的復(fù)制。這種技術(shù)就是關(guān)注表中發(fā)生變化的記錄,而非以前的照抄binlog模式。從mysql5.1.12開(kāi)始,可以用以下3種模式來(lái)實(shí)現(xiàn)。
(1)基于sql語(yǔ)句的復(fù)制(statement-base replication,sbr)
(2)基于行的復(fù)制(rbr)
(3)混合模式復(fù)制(mbr)
相應(yīng)的,binlog的格式也有3種:statement、row、mixed。Mbr模式中,sbr模式是默認(rèn)的。在運(yùn)行時(shí)可以動(dòng)態(tài)地改變binlog的格式。設(shè)定主從復(fù)制模式的方法非常簡(jiǎn)單,只要在以前設(shè)定復(fù)制配置的基礎(chǔ)上,再添加一個(gè)參數(shù),如下:
binlog_format=”statement” #binlog_format=”row” #binlog_format=”mixed”
當(dāng)然了,也可以在運(yùn)行時(shí)動(dòng)態(tài)修改binlog的格式
Mysql> set session binlog_format=”statement”
5.控制主服務(wù)器操作
Master:192.168.11.139
Slave:192.168.11.130
(1)主服務(wù)器:
mysql> show variables like '%datadir%'; +---------------+--------------------------+ | Variable_name | Value | +---------------+--------------------------+ | datadir | /application/mysql/data/ | +---------------+--------------------------+
在主服務(wù)器上開(kāi)啟二進(jìn)制日志:
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | OFF | +---------------+-------+ row in set (0.00 sec)
OFF表示二進(jìn)制日志是關(guān)閉的
開(kāi)啟日志3步驟:
①開(kāi)啟mysql安裝目錄/my.cnf
②找到[mysqld]這個(gè)標(biāo)簽,在此標(biāo)簽下面一行,添加語(yǔ)句如下:
log_bin[filename]
在該語(yǔ)句中,log-bin說(shuō)明要開(kāi)啟二進(jìn)制文件;filename是二進(jìn)制日志的名字。如果沒(méi)有指定,默認(rèn)為主機(jī)名后面跟-bin作為文件名,默認(rèn)存放在datadir目錄中。在這里指定binary_log如果只對(duì)指定數(shù)據(jù)庫(kù)生成二進(jìn)制文件,則需要添加如下語(yǔ)句
Binlog-do-db=db_name(數(shù)據(jù)庫(kù)名稱)
如果不對(duì)指定數(shù)據(jù)庫(kù)生成二進(jìn)制文件日志,則需要添加如下語(yǔ)句
Binlog-ignore-db-db_name(數(shù)據(jù)庫(kù)名稱)
③重啟mysql服務(wù)。可以在mysql安裝目錄/data文件夾下看到“binary_log.數(shù)字編號(hào)”文件,如binary_log.00001.以后每重啟一次mysql服務(wù),都會(huì)重新生成二進(jìn)制文件,文件名中的數(shù)字編號(hào)一次增加。
開(kāi)機(jī)成功后,修改mysql的配置文件my.cnf,設(shè)置server-id,代碼如下
Server-id=1 Binlog-do-db=xscj Binlog-ignore-db=mysql Server-id=1:每一個(gè)數(shù)據(jù)庫(kù)服務(wù)器都要指定一個(gè)唯一的server-id,通常主服務(wù)器為1,master和slave的server-id不能相同。 Binlog-do-db:表示需要復(fù)制的數(shù)據(jù)庫(kù),這里以xscj為例 Binlog-ignore-db:表示不需要復(fù)制的數(shù)據(jù)庫(kù)
在master上創(chuàng)建復(fù)制所需要的用戶
mysql> grant replication slave on *.* to rep_user@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec
mysql> show master status\G
*************************** 1. row ***************************
File: binary_log.000001
Position: 303
Binlog_Do_DB:
Binlog_Ignore_DB:
row in set (0.00 sec)
將master主機(jī)的數(shù)據(jù)備份出來(lái),保存在/data/binary_dump.txt文件中,然后導(dǎo)入到slave從機(jī)中去,具體執(zhí)行語(yǔ)句如下
[root@localhost bin]# mysqldump -h localhost>/data/binary_dump.txt
(2)控制從服務(wù)器操作
修改從服務(wù)器的數(shù)據(jù)庫(kù)配置文件,配置如下:
Server-id=2 ##設(shè)置從服務(wù)器id Master-host=192.168.11.129 Master-user=rep_user Master-password= ##設(shè)置連接主服務(wù)器的密碼 Replicate-do-db ##設(shè)置你要同步的數(shù)據(jù)庫(kù),可以設(shè)置多個(gè) Master-port=<port> ##配置端口號(hào) 重啟slave,在slave主機(jī)的mysql重新執(zhí)行如下命令,關(guān)閉slave服務(wù) Mysql>stop slave; 設(shè)置slave實(shí)現(xiàn)復(fù)制相關(guān)的信息,執(zhí)行如下命令 Mysql>change master to >master_host='', >master_user='', >master_password='', >master_log_file='binary_log.000007', >master_log_pos=120; 輸入:show slave status\G用于提供有關(guān)從服務(wù)器線程的關(guān)鍵參數(shù)信息。
常用命令如下
|
選項(xiàng) |
功能 |
|
Slave start |
啟動(dòng)復(fù)制線程 |
|
Slave stop |
停止復(fù)制線程 |
|
Reset slave |
重置復(fù)制線程 |
|
Show slave status |
顯示復(fù)制線程狀態(tài) |
|
Show slave status\g |
顯示復(fù)制線程狀態(tài)(分行顯示) |
|
Show master status\G |
顯示主數(shù)據(jù)庫(kù)的狀態(tài)(分行顯示) |
|
Show master logs |
顯示主數(shù)據(jù)庫(kù)日志 |
|
Change master to |
動(dòng)態(tài)改變到主數(shù)據(jù)庫(kù)的配置 |
|
Show processlistv |
顯示有哪些線程正在運(yùn)行 |
以上就是本文關(guān)于Mysql中復(fù)制詳細(xì)解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:mysql中使用instr進(jìn)行模糊查詢方法介紹、mysql查詢語(yǔ)句中用戶變量的使用代碼解析、MySQL操作之JSON數(shù)據(jù)類型操作詳解等,如有不足之處,歡迎留言指出。有問(wèn)題咱就改,事物不是一成不變的。
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信