Mysql中復(fù)制詳細(xì)解析
發(fā)表時(shí)間:2023-07-16 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本文主要介紹了Mysql中復(fù)制詳細(xì)解析,從基本概念、用途、實(shí)現(xiàn)方法以及集中模式進(jìn)行了介紹,然后分享了具體實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。1.mysql復(fù)制概念 指將主數(shù)據(jù)庫的DD...
本文主要介紹了Mysql中復(fù)制詳細(xì)解析,從基本概念、用途、實(shí)現(xiàn)方法以及集中模式進(jìn)行了介紹,然后分享了具體實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
1.mysql復(fù)制概念
指將主數(shù)據(jù)庫的DDL和DML操作通過二進(jìn)制日志傳到復(fù)制服務(wù)器上,然后在復(fù)制服務(wù)器上將這些日志文件重新執(zhí)行,從而使復(fù)制服務(wù)器和主服務(wù)器的數(shù)據(jù)保持同步。復(fù)制過程中一個(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ù)制的用途
通過主從復(fù)制(master-slave)的方式來同步數(shù)據(jù),再通過讀寫分離(mysql-proxy)來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力,或者用來作為主備機(jī)的設(shè)計(jì),保證在主機(jī)停止響應(yīng)之后在很短的時(shí)間內(nèi)就可以將應(yīng)用切換到備機(jī)上繼續(xù)運(yùn)行。
優(yōu)勢:
(1)數(shù)據(jù)庫集群系統(tǒng)具有多個(gè)數(shù)據(jù)庫節(jié)點(diǎn),在單個(gè)節(jié)點(diǎn)出現(xiàn)故障的情況下,其他正常節(jié)點(diǎn)可以繼續(xù)提供服務(wù)。
(2)如果主服務(wù)器上出現(xiàn)了問題可以切換到從服務(wù)器上
(3)通過復(fù)制可以在從服務(wù)器上執(zhí)行查詢操作,降低了主服務(wù)器的訪問壓力,實(shí)現(xiàn)數(shù)據(jù)分布和負(fù)載均衡
(4)可以在從服務(wù)器上進(jìn)行備份,以避免備份期間影響主服務(wù)器的服務(wù)。
3.復(fù)制的實(shí)現(xiàn)(3種方法)
(1)DRBD是一種用軟件實(shí)現(xiàn)的、無共享的、服務(wù)器之間鏡像塊設(shè)備內(nèi)容的存儲復(fù)制解決方案。
(2)Mysql cluster(又稱mysql簇)。Mysql replicaion(復(fù)制)本身是一個(gè)比較簡單的結(jié)構(gòu),即一臺從服務(wù)器(slave)從一臺主服務(wù)器(master)讀取二進(jìn)制日志然后再解析并應(yīng)用到自身。
(3)一個(gè)簡單復(fù)制環(huán)境只需要兩臺運(yùn)行mysql的主機(jī)即可,甚至可以在一臺物理服務(wù)器主機(jī)上啟動(dòng)兩個(gè)mysqld實(shí)例。一個(gè)作為master而另一個(gè)作為slave來完成復(fù)制環(huán)境的搭配。但是在實(shí)際應(yīng)用環(huán)境中,可以根據(jù)實(shí)際的業(yè)務(wù)需求利用mysql復(fù)制的功能自己搭建出其他多種更利于擴(kuò)展的復(fù)制架構(gòu),如最常用的主從架構(gòu)。
主從架構(gòu)指的是使用一臺mysql服務(wù)器作為master,一臺或多臺mysql服務(wù)器作為slave,將master的數(shù)據(jù)復(fù)制到slave上。在實(shí)際應(yīng)用場合,主從架構(gòu)模式是mysql復(fù)制最常用的。一般在這種架構(gòu)下,系統(tǒng)的寫操作都是在master中進(jìn)行,而讀操作則分散到各個(gè)slave中進(jìn)行,因此這種架構(gòu)特別適合現(xiàn)在互聯(lián)網(wǎng)高讀寫的問題。
Mysql數(shù)據(jù)庫復(fù)制操作大概分為以下幾個(gè)步驟:
(1)master啟用二進(jìn)制日志。啟用二進(jìn)制日志的操作在日志管理中有詳細(xì)的介紹。
(2)slave上面的I/O進(jìn)程連接上master,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容。
(3)master接受到來自slave的I/O進(jìn)程請求后,通過負(fù)責(zé)復(fù)制的I/O進(jìn)程根據(jù)請求信息讀取指定日志指定位置之后的日志信息,返回給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)程檢測到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開始,可以用以下3種模式來實(shí)現(xiàn)。
(1)基于sql語句的復(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ù)制模式的方法非常簡單,只要在以前設(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ù)器上開啟二進(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)閉的
開啟日志3步驟:
①開啟mysql安裝目錄/my.cnf
②找到[mysqld]這個(gè)標(biāo)簽,在此標(biāo)簽下面一行,添加語句如下:
log_bin[filename]
在該語句中,log-bin說明要開啟二進(jìn)制文件;filename是二進(jìn)制日志的名字。如果沒有指定,默認(rèn)為主機(jī)名后面跟-bin作為文件名,默認(rèn)存放在datadir目錄中。在這里指定binary_log如果只對指定數(shù)據(jù)庫生成二進(jìn)制文件,則需要添加如下語句
Binlog-do-db=db_name(數(shù)據(jù)庫名稱)
如果不對指定數(shù)據(jù)庫生成二進(jìn)制文件日志,則需要添加如下語句
Binlog-ignore-db-db_name(數(shù)據(jù)庫名稱)
③重啟mysql服務(wù)?梢栽趍ysql安裝目錄/data文件夾下看到“binary_log.數(shù)字編號”文件,如binary_log.00001.以后每重啟一次mysql服務(wù),都會(huì)重新生成二進(jìn)制文件,文件名中的數(shù)字編號一次增加。
開機(jī)成功后,修改mysql的配置文件my.cnf,設(shè)置server-id,代碼如下
Server-id=1
Binlog-do-db=xscj
Binlog-ignore-db=mysql
Server-id=1:每一個(gè)數(shù)據(jù)庫服務(wù)器都要指定一個(gè)唯一的server-id,通常主服務(wù)器為1,master和slave的server-id不能相同。
Binlog-do-db:表示需要復(fù)制的數(shù)據(jù)庫,這里以xscj為例
Binlog-ignore-db:表示不需要復(fù)制的數(shù)據(jù)庫
在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ù)備份出來,保存在/data/binary_dump.txt文件中,然后導(dǎo)入到slave從機(jī)中去,具體執(zhí)行語句如下
[root@localhost bin]# mysqldump -h localhost>/data/binary_dump.txt
(2)控制從服務(wù)器操作
修改從服務(wù)器的數(shù)據(jù)庫配置文件,配置如下:
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ù)庫,可以設(shè)置多個(gè)
Master-port=<port> ##配置端口號
重啟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ù)庫的狀態(tài)(分行顯示) |
Show master logs | 顯示主數(shù)據(jù)庫日志 |
Change master to | 動(dòng)態(tài)改變到主數(shù)據(jù)庫的配置 |
Show processlistv | 顯示有哪些線程正在運(yùn)行 |
大家學(xué)會(huì)了嗎?趕緊動(dòng)手嘗試一下吧。
相關(guān)推薦:
mysql中復(fù)制表結(jié)構(gòu)的方法小結(jié)_MySQL
MySQL中復(fù)制數(shù)據(jù)表中的數(shù)據(jù)到新表中的操作教程_MySQL
MySQL復(fù)制的概述、安裝、故障、技巧、工具(火丁分享)
以上就是Mysql中復(fù)制詳細(xì)解析的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。