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)容的存儲(chǔ)復(fù)制解決方案。
(2)Mysql cluster(又稱mysql簇)。Mysql replicaion(復(fù)制)本身是一個(gè)比較簡單的結(jié)構(gòu),即一臺(tái)從服務(wù)器(slave)從一臺(tái)主服務(wù)器(master)讀取二進(jìn)制日志然后再解析并應(yīng)用到自身。
(3)一個(gè)簡單復(fù)制環(huán)境只需要兩臺(tái)運(yùn)行mysql的主機(jī)即可,甚至可以在一臺(tái)物理服務(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)指的是使用一臺(tái)mysql服務(wù)器作為master,一臺(tái)或多臺(tái)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ù)字編號(hào)”文件,如binary_log.00001.以后每重啟一次mysql服務(wù),都會(huì)重新生成二進(jìn)制文件,文件名中的數(shù)字編號(hào)一次增加。
開機(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> ##配置端口號(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ù)庫的狀態(tài)(分行顯示)
|
Show master logs
|
顯示主數(shù)據(jù)庫日志
|
Change master to
|
動(dòng)態(tài)改變到主數(shù)據(jù)庫的配置
|
Show processlistv
|
顯示有哪些線程正在運(yùn)行
|
以上就是本文關(guān)于Mysql中復(fù)制詳細(xì)解析的全部內(nèi)容,希望對大家有所幫助。歡迎參閱:mysql中使用instr進(jìn)行模糊查詢方法介紹、mysql查詢語句中用戶變量的使用代碼解析、MySQL操作之JSON數(shù)據(jù)類型操作詳解等,如有不足之處,歡迎留言指出。有問題咱就改,事物不是一成不變的。
您可能感興趣的文章:- 分析MySQL復(fù)制以及調(diào)優(yōu)原理和方法
- Linux下MySQL數(shù)據(jù)庫的主從同步復(fù)制配置
- 詳解Docker方式實(shí)現(xiàn)MySql 主從復(fù)制(實(shí)踐篇)
- MySQL高可用解決方案MMM(mysql多主復(fù)制管理器)
- MySQL5.7.18主從復(fù)制搭建(一主一從)教程詳解
- Mysql5.7.18的安裝與主從復(fù)制圖文詳解
- 詳解MySQL實(shí)現(xiàn)主從復(fù)制過程
- 利用pt-heartbeat監(jiān)控MySQL的復(fù)制延遲詳解
- 詳解MySQL主從復(fù)制讀寫分離搭建
- 詳解如何利用docker快速構(gòu)建MySQL主從復(fù)制環(huán)境
- 簡單談?wù)凪ySQL的半同步復(fù)制
- MySQL復(fù)制優(yōu)點(diǎn)、原理詳解