姓名: 李小娜
[嵌牛導讀] :這篇文章主要介紹了Mysql中復制詳細解析,從基本概念、用途、實現方法以及集中模式進行了介紹,然后分享了具體實現代碼,具有一定參考價值
[嵌牛鼻子] :mysql復制概念 ? ?復制的用途 ? ?復制的實現 ??mysql復制的集中模式 ? ?控制主服務器操作 ??
[嵌牛提問] :常用命令有哪些?
[嵌牛正文] :1.mysql復制概念
指將主數據庫的DDL和DML操作通過二進制日志傳到復制服務器上,然后在復制服務器上將這些日志文件重新執行,從而使復制服務器和主服務器的數據保持同步。復制過程中一個服務器充當主服務器(master),而一個或多個其它服務器充當從服務器(slaves)。主服務器將更新重新寫入二進制日志文件,并維護文件的一個索引以跟蹤日志循環。這些日志可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器、從服務器在日志中讀取的最后一次成功更新的位置。從服務器接受從那時起發生的任何更新,然后封鎖并等待主服務器通知新的更新。
2.復制的用途
通過主從復制(master-slave)的方式來同步數據,再通過讀寫分離(mysql-proxy)來提升數據庫的并發負載能力,或者用來作為主備機的設計,保證在主機停止響應之后在很短的時間內就可以將應用切換到備機上繼續運行。
優勢:
(1)數據庫集群系統具有多個數據庫節點,在單個節點出現故障的情況下,其他正常節點可以繼續提供服務。
(2)如果主服務器上出現了問題可以切換到從服務器上
(3)通過復制可以在從服務器上執行查詢操作,降低了主服務器的訪問壓力,實現數據分布和負載均衡
(4)可以在從服務器上進行備份,以避免備份期間影響主服務器的服務。
3.復制的實現(3種方法)
(1)DRBD是一種用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲復制解決方案。
(2)Mysql cluster(又稱mysql簇)。Mysql replicaion(復制)本身是一個比較簡單的結構,即一臺從服務器(slave)從一臺主服務器(master)讀取二進制日志然后再解析并應用到自身。
(3)一個簡單復制環境只需要兩臺運行mysql的主機即可,甚至可以在一臺物理服務器主機上啟動兩個mysqld實例。一個作為master而另一個作為slave來完成復制環境的搭配。但是在實際應用環境中,可以根據實際的業務需求利用mysql復制的功能自己搭建出其他多種更利于擴展的復制架構,如最常用的主從架構。
主從架構指的是使用一臺mysql服務器作為master,一臺或多臺mysql服務器作為slave,將master的數據復制到slave上。在實際應用場合,主從架構模式是mysql復制最常用的。一般在這種架構下,系統的寫操作都是在master中進行,而讀操作則分散到各個slave中進行,因此這種架構特別適合現在互聯網高讀寫的問題。
Mysql數據庫復制操作大概分為以下幾個步驟:
(1)master啟用二進制日志。啟用二進制日志的操作在日志管理中有詳細的介紹。
(2)slave上面的I/O進程連接上master,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內容。
(3)master接受到來自slave的I/O進程請求后,通過負責復制的I/O進程根據請求信息讀取指定日志指定位置之后的日志信息,返回給slave的I/O。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經到master端的bin-log文件的名稱以及bin-log的位置。
(4)Slave的I/O進程接收到信息后,將接收到的日志內容依次添加到slave端的relay-log文件的最末端,并將讀取到的master端的bin-log的文件名和位置記錄到master-info文件中。
(5)Slave的sql進程檢測到relay-log中新增的內容后,會馬上解析relay-log的內容,并在自身執行。
4.mysql復制的集中模式
mysql5.1之后的版本中,在復制方面的改進就是引進了新的復制技術——基于行的復制。這種技術就是關注表中發生變化的記錄,而非以前的照抄binlog模式。從mysql5.1.12開始,可以用以下3種模式來實現。
(1)基于sql語句的復制(statement-base replication,sbr)
(2)基于行的復制(rbr)
(3)混合模式復制(mbr)
相應的,binlog的格式也有3種:statement、row、mixed。Mbr模式中,sbr模式是默認的。在運行時可以動態地改變binlog的格式。設定主從復制模式的方法非常簡單,只要在以前設定復制配置的基礎上,再添加一個參數,如下:
5.控制主服務器操作
Master:192.168.11.139
Slave:192.168.11.130
(1)主服務器:
在主服務器上開啟二進制日志
OFF表示二進制日志是關閉的
開啟日志3步驟:
①開啟mysql安裝目錄/my.cnf
②找到[mysqld]這個標簽,在此標簽下面一行,添加語句如下:
log_bin[filename]
在該語句中,log-bin說明要開啟二進制文件;filename是二進制日志的名字。如果沒有指定,默認為主機名后面跟-bin作為文件名,默認存放在datadir目錄中。在這里指定binary_log如果只對指定數據庫生成二進制文件,則需要添加如下語句
1Binlog-do-db=db_name(數據庫名稱)
如果不對指定數據庫生成二進制文件日志,則需要添加如下語句
1Binlog-ignore-db-db_name(數據庫名稱)
③重啟mysql服務??梢栽趍ysql安裝目錄/data文件夾下看到“binary_log.數字編號”文件,如binary_log.00001.以后每重啟一次mysql服務,都會重新生成二進制文件,文件名中的數字編號一次增加。
開機成功后,修改mysql的配置文件my.cnf,設置server-id,代碼如下
在master上創建復制所需要的用戶
將master主機的數據備份出來,保存在/data/binary_dump.txt文件中,然后導入到slave從機中去,具體執行語句如下
1[root@localhost bin]# mysqldump -h localhost>/data/binary_dump.txt
(2)控制從服務器操作
修改從服務器的數據庫配置文件,配置如下:
常用命令如下